算法之 博弈问题
创作时间:
作者:
@小白创作中心
算法之 博弈问题
引用
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]
热门推荐
Vue如何防止窃取Cookie
法院判决书下达后对方拒不执行怎么办?
拒不执行判决裁定罪谁受理
类风湿关节炎患者手指操锻炼方法
申请个人信用卡时,需要注意哪些细节呢
玫瑰花茶与蜂蜜一起泡水喝:功效、禁忌与饮用指南
丙火男命的八字特征详解:如何解读其性格与命运
警惕“保健品”诈骗圈套:常见套路与防范指南
幽门螺旋杆菌难消除?教你如何准确挑选药物、剂量、疗程!
汉字的六种构造方法:从象形到假借
意大利导演点赞《哪吒2》 :情感表达细腻 特效制作美术设计令人惊叹
哪些人群不适合饮用玫瑰茶
电脑桌面护眼模式:作用、设置与参数调整全解析
房产证上可以写几个人的名字?
房产证加名指南:操作流程与注意事项
胰岛素抵抗的四大表现 胰岛素抵抗的表现症状
ON是什么词性
开薪资证明时需要建立哪些档案?
人事档案工资管理系统在处理个税申报和社保缴纳时有哪些优势?
如何制定有效的员工工资薪酬方案?
重温《潜伏》:吴站长这一“金句”,道出了马奎死亡的真相
内联外畅 通达全国!增城轨道交通助力广州东部中心蓬勃发展
数据文化与增长决策的协同机制?
减脂期可以喝纯牛奶吗?营养师的专业解答来了
发售预付款消费卡的商家应如何开具发票
华东理工大学邢明阳Perspective:均相与非均相芬顿在废水处理中的“博弈”
全年龄段健身指南:从幼儿到老年,科学运动助力健康人生
如何设计平房的排水系统?这种设计对居住环境有何改善?
台式电脑组装必备硬件清单与选购攻略
台式电脑内存条的选择怕后悔?这些因素是关键