算法之 博弈问题
创作时间:
作者:
@小白创作中心
算法之 博弈问题
引用
1
来源
1.
http://www.mrgr.cn/news/90194.html
博弈问题在算法和编程领域中占据重要地位,涉及双方之间的策略对抗。本文将深入探讨几种常见的博弈类型,包括巴什博弈、尼姆博弈和斐波那契博弈等,并通过具体的算法题目来解释这些博弈问题的解法。
巴什博弈
巴什博弈是一种经典的博弈问题,通常涉及双方轮流取物,每次取的数量有限制,最后取完者获胜。下面通过一个具体的算法题目来说明巴什博弈的解法。
292. Nim 游戏
这道题目实际上是一个典型的巴什博弈问题。分析问题结束的情况,当最后轮到一方的时候,剩余的石头的数目达到1、2、3的时候,该方就是赢的,否则就是输的。那么怎么才能保证这种情况?我们可以观察到,通过n%4,就可以知道最后是否可以剩下对应的1、2、3个数目的石头。
class Solution:
def canWinNim(self, n: int) -> bool:
# 由于每个人都是最优解,所以只要查看n是不是4的倍数即可
if n % 4 == 0:
return False
else:
return True
尼姆博弈
尼姆博弈是一种更复杂的博弈类型,通常涉及多堆物品,双方轮流取物,每次可以从任意一堆中取任意数量的物品,最后取完者获胜。尼姆博弈的解法通常涉及异或运算。
斐波那契博弈
斐波那契博弈是一种基于斐波那契数列的博弈问题,通常涉及双方轮流取物,每次取的数量必须是斐波那契数列中的数,最后取完者获胜。
其他博弈
除了上述几种常见的博弈类型外,还有一些其他的博弈问题,例如除数博弈。
1025. 除数博弈
这道题目是一个典型的除数博弈问题。分析问题结束的情况,当最后轮到一方的时候,剩余的石头的数目达到1、2、3的时候,该方就是赢的,否则就是输的。那么怎么才能保证这种情况?我们可以观察到,通过n%4,就可以知道最后是否可以剩下对应的1、2、3个数目的石头。
class Solution:
def divisorGame(self, n: int) -> bool:
# win = {2}
# los = {1}
dp = [False] * (n + 1)
if n == 1:
return False
dp[1] = False
dp[2] = True
for i in range(3, n + 1):
flag = 0
for j in range(1, i):
if i % j == 0:
if (i - j) in los:
flag = 1
break
if flag:
dp[i] = True
win.add(i)
else:
los.add(i)
return dp[n]
热门推荐
XILINX FPGA高速串行接口GTX
刚出生的人类婴儿如此脆弱,在原始社会恶劣环境下如何生存的?
幼儿园女孩喜欢哪些玩具?5种德国儿童教育专家推荐的玩具类型
植物来源外泌体及其生物医学应用研究进展
心学问集团靠谱吗?学习的革命者:引导孩子探索个性化学习路径
牙缝隙变大是什么原因引起的
培育良种、创新技术、玩出新潮——小杨梅“链”出大产业
诗歌是什么?探索诗歌的定义与魅力
如何提升项目合同管理能力
部部高质量!网飞高分电影大盘点:10部佳作带你领略别样精彩
小孩呼吸急促喘气粗重怎么办?原因分析与就医指南
按揭房转按揭全攻略:流程、注意事项及优缺点分析
睡个好觉很重要,鼾星人的睡眠搭子——家用呼吸机买前必看攻略!
打呼噜止鼾神器有用吗?为什么?
如何解析龙头股的形成原因?这种解析如何指导投资策略?
恐龙简笔画入门教程:100张图教你轻松画出可爱恐龙
Unity2D骨骼动画 2D Animation+IK入门
Unity2D骨骼动画 2D Animation+IK入门
烘焙程度如何影响咖啡的风味?
钽电容是做什么用的
支原体肺炎“耐药”怎么办?多西环素使用需注意!
气相色谱仪的基本原理与结构,一文全读懂
肩袖损伤与脱位:互为因果的“疼痛锁链”
电视柜尺寸全解析——如何选择适合的尺寸(从高度、宽度到深度)
金枪鱼尽量少吃最好不吃
回族形成简史
人力资源数字化转型:如何用数据驱动组织效能提升?
糖尿病酮症酸中毒如何补液?补液速度、补液量,都帮你总结好了!
对外销售原材料如何写会计分录?
一周涨粉10万,谁在靠猫meme走红?