算法之 博弈问题
创作时间:
作者:
@小白创作中心
算法之 博弈问题
引用
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]
热门推荐
断桥铝和塑钢窗的窗户优缺点有哪些?断桥铝窗户怎么选?
义务兵和志愿兵的区别是什么
义务兵和志愿兵的区别是什么?哪个待遇更好?
揭阳网红景点游玩攻略:六大必打卡景点全解析
宝塔面板自动定时备份网站文件和数据库到阿里云OSS
数控车床常用代码及其功能解析
S7-1200集成PN接口MODBUS TCP通信概述
紧急出国,签证办理全攻略
电脑显示器接口大对比:VGA、DVI、HDMI、DP哪个更胜一筹?
《艾尔登法环:黄金树幽影》玩家评价两极分化,媒体却给出超高分
交通事故车辆司法鉴定的法律程序及实务要点
运动后怎么浑身疼?你需要了解「迟发性肌肉酸痛(DOMS)」
营养美味的养颜紫薯八宝粥(以紫薯为主材,多种食材融合,打造健康营养早餐)
懒人版卤鸡腿:简单几步就能做出餐厅级美味
阿拉善蝮作为中国毒性最强的蝮蛇,它们的天敌居然是荒漠猫
阿拉善蝮:中国毒性最强的蝮蛇,为何成为荒漠猫的猎物?
工龄怎么算
川西旅游网:网红与热门旅游线路推荐
警惕!身上有这种痣可能癌变,带状疱疹也会“痛不欲生”
从小长到大的痣会癌变吗
在宠物服务行业中实施质量管理的方法
50岁的男性也有更年期?看看这位中医怎么说
台州眼科专家科普:侧躺玩手机很危险!除影响视力,还有这些危害
2.4GHz的最大带宽速率是多少?
上市公司重大资产重组停牌机制解析:影响与应对
十首诗词说洞房,情浓意浓尽在不言中!
销售费用如何预算管理
大腿外侧疼痛?3个步骤帮你缓解
供大于求格局延续 12月份豆粕价格或遵循季节性下跌规律
胎儿生长受限怎么办?从诊断到治疗,一文全懂