算法之 博弈问题
创作时间:
作者:
@小白创作中心
算法之 博弈问题
引用
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]
热门推荐
小儿疝气的检查方法详解
元明粉和工业盐在染色中的作用
热电偶、热电效应和热电效应原理
玄奘:唐代高僧的传奇人生与卓越贡献
龟板胶的功效与使用注意事项
日本四大抹茶之都的抹茶都有哪些不同?
如何把手机联系人导入另一个手机?两种方法快速搞定
影响钣金加工价格的因素有哪些?
新农合保险报销指南:流程与比例详解
职业学校是“差生收容站”?人心中的成见是一座大山
企业级网红SSD评测:小海豚 PBlaze6 6530 性能解析
《遣怀》创作背景是什么?该如何理解?
网络消费避坑:电脑寄修如何挑选靠谱的服务商家
电脑阴影问题的解决方法(快速排除电脑显示屏阴影的困扰)
维生素B6严重缺乏会导致的疾病
乌梅干的功效与作用机理
西京学院英文学术期刊《Battery Energy》影响因子破9,跻身Q1区
如何理解证券市场的代持行为?这种行为如何影响市场透明度?
腹泻患儿饮食上应遵循哪些原则?
鼻腔术后护理全攻略:从术中到康复期的全方位指南
鼻窦炎做手术后会复发吗
手动挡汽车如何驾驶?这种驾驶方式对驾驶技能有何要求?
凯里·欧文:篮球场上的艺术大师与争议焦点
脑梗塞患者出现呕吐怎么办?医生给出专业治疗建议
粟裕三战胡琏未竟全功,玄机竟在这个纵队表现起伏?
国军名将胡琏为何两次死里逃生?一靠刺猬战术,二靠乌龟战术
青龙寺片区改造有望提速 回迁安置楼预计2025年建成
芦丁鸡孵化详细步骤
芦丁鸡孵化详细步骤
什么是支撑位和压力位?