前端必刷思维题系列[3]

315 阅读6分钟

这是我参与更文挑战的第 27 天,活动详情查看 更文挑战

这个系列有点花头^o^,就是来拓展拓展思维,算是智力题吧,一般不会在面试中出现,但有的厂会出一些,据我所知我们这有的部门会问些这种,然后在群里说: "唉,又是全军覆没,-_-",我好奇地看了看群,把这个问题拿出来,虽然可以解出来,但是确实在有精神和时间压力的情况下应该是无法轻松做出。突然想起这件事,所以开了个栏目,希望能在面试中为你锦上添花。

首先,先端正下态度,1. 这种题做不出也没关系。这就是你该有的态度,2. 做不出答案,整理出思路也是好的,其实可能面试官就是看你面对难题和面对压力的反应,而不是题目本身,轻松面对,就当自己做不出来吧,也没啥大不了的。

我高中曾经在33IQ上一波通过了门萨测试,对自己还是较有信心,但随着时间的推移,愈发觉得耐心和毅力才是增长智慧的唯一法门,所以努力吧 ^-^

另外,天天看算法系列是不是有点无聊,调剂一下?

上两篇思维题也很有意思推荐收看

  1. 有1000个旅客,有1人阳性, 如何用10个试剂盒找出来 ?
  2. 1 ~ 999 之间有多少个 7 ?

3. 海盗分金问题

题目描述

是说5个海盗抢得100枚金币,他们按抽签的顺序依次提方案:首先由1号提出分配方案,然后5人表决,投票要超过半数同意方案才被通过否则他将被扔入大海喂鲨鱼,依此类推。那么如果你抽到了第一个提出方案的签,那么应该如何分配才能获得最多的金币,又不会被喂鲨鱼呢?

几个限定条件

  • 每一个海盗都极其聪明,都足够理性。
  • 每一个海盗都非常残忍。在不影响收益的情况下,他们会更倾向于杀人。
  • 每一个海盗都贪生怕死,尽量留着小命。
  • 每一个海盗都绝不信任对方,或提前跟另一个人有默契。

其实后面三条都是对第一条的补充,在这个虚拟的问题中,我们可以假设他们都绝对理性

分析

拿到这个问题,想想前面的方法,还是先特殊后一般,数学归纳都是从小做起。先假设一个和原问题差不多,但是规模小很多的子问题。通过对子问题的求解来寻求原问题的解决方案。

在本问题来说,就是减少海盗个数,

  • 若只有一个人,那不用投了,直接我全拿
  • 若有2个人,不好意思先提方案的人应该是死定了,不如想想后路比如鲨鱼少的地方?
  • 若有3个人,我们给他按照签的顺序编号 1,2,3 (1 表示第一个提方案),那么关键思想就是逆推法,如果1号喂了鲨鱼,那么只剩下2人,根据上面的 2人情况,2号死定了,所以 2号其实没其他选择,剩下3人的时候,它必须支持 1号不死。换句话说,1 号提出啥坑爹方案他都得同意,否则就得死,小命要紧,所以必须同意。所以 1 号可以提出(100 0 0),这种看似另两个怎么都不会同意的方案,而拿走所有的金币。

现在这个问题的思路方向大概是有了,继续

  • 4 个人 1,2,3,4 号,第一个人已经能算到后面的状况,他知道自己如果挂了,剩3个人,2号就能搞出(100 0 0)的方案,而后面人必然无法反对,而现在,3,4同样也知道这种结果,所以他只要给后面 3,4一人一个,(98, 0, 1, 1) 这样,3, 4也必然会支持自己,已经超过半数,3, 4为了利益(相比于投死 1号,然后回归3人投,自己一无所获,现在还能获得一个)也会支持这种做法。

  • 最后,我们再加入1个海盗。1,2,3,4,5编号。1号海盗的提案需要至少3个人通过。算上他自己,他还需要争取2票

    • 2号是无法争取的,因为1号死了他的收益必然最大。
    • 3号可以争取,因为1号死了,就回到4人情况,3号将一无所获。所以给他一个金币就行
    • 4号和5号当然可以争取,但要比4个人时(最后两人1人1个金币)要多一个随便争取谁都行
    • 所以1号分配方案可以是 (97,0,1,2,0)(97,0,1,0,2)

现在是不是清楚这个问题的思想了呢

题外话,秦时明月《天行九歌》中 三姬分金就是说这个模型,有兴趣可以看下。

延伸

不过,现实世界远比模型复杂。首先现实中肯定不会是人人都“绝对理性”。

行为经济学家认为人们容易受到来自周围环境(我们称之为情境效应)中无关情绪、短视以及其他形式的非理性因素的影响,因此决策总是会出现有规律的错误。我们经常会陷入到“决策幻想”中,因为我们认为自己对自己的决策、对自己生活的方向具有至高无上的操控能力。但是,这只是我们一厢情愿的认识,它反映的是我们的欲望,而不是现实。

这虽然只是行为学理论,但我认为确实根据人的算力,和信息储备来说,谁都做不到对某件事某个人的完全理性

其次,生活更像扑克,而不是象棋。扑克是有底牌的,包含大量隐藏信息;而象棋所有信息摊在棋盘上清清楚楚;

《对赌》这本书建议我们用概率化的思维去做决策和复盘,把决策水平和运气分开,去进行生活中信息不足前提下的高质量决策。建议看看。

总结

如果你读完只能记住几点的话希望是以下几点:

  1. 遇到大问题,先分解,从小问题着手(这个老生常谈)
  2. 善用 逆推法,从假设结果反推原因。
  3. 现实不是游戏,生活更像扑克,而不是象棋,运气很重要。
  4. 学点运筹学和博弈论没坏处。
  5. 记得点赞。

另外向大家着重推荐下另一个系列的文章,非常深入浅出,对前端进阶的同学非常有作用,墙裂推荐!!!核心概念和算法拆解系列 记得点赞哈

今天就到这儿,想跟我一起刷题的小伙伴可以加我微信哦 点击此处交个朋友 Or 搜索我的微信号infinity_9368,可以聊天说地 加我暗号 "天王盖地虎" 下一句的英文,验证消息请发给我 presious tower shock the rever monster,我看到就通过,加了之后我会尽我所能帮你,但是注意提问方式,建议先看这篇文章:提问的智慧

参考