每晚读一个学习测试技术de小鬼故事 第三夜:无限恐怖算法

我去热饭 · 2021年11月26日 · 最后由 凯丽 回复于 2021年11月29日 · 3083 次阅读

第三夜:《无限噩梦算法!》
导读

你刷过算法题么?有过绞尽脑汁也解不开题的经历么?想知道怎么去解决一道递归算法题么?欢迎阅读完这个故事.....

正文

凌晨 12 点,老马紧张的坐在电脑前,一遍一遍的刷新着 leet 扣题库,期盼着今天的打卡题能简单一点...

可是当他发现新的每日打卡题居然是一道困难级别的递归类型时,他绝望的趴在了桌子上...这是他最讨厌的题型...

老马是我的测开同事,公司的测开小组算上我俩一共 5 个人,规模算得上是中规中矩,这其中老马的年纪最大,也是最能熬夜刷算法题的人,用他的话说就是因为年纪大,才更加需要多刷题来保持大脑灵活性,以免被我们这些年轻人比下去。

可是那天老马却没来上班,后来经过领导,我们得知一个悲痛的消息,说老马因为熬夜刷算法题突发昏迷,变成了植物人...

听到消息后我们很震惊也很难过,仿佛在老马身上看到了自己的未来。

哎....没办法,工具人,我们都不过是工具,有一天坏了很正常...只是难以接受是这种下场。

当天下班后,我们 4 个商量着带上礼物去医院看望一下老马。到了医院,找到老马的病床,在一个很安静的走廊尽头的房间里,房间只有他太太在看着他,见到我们几个来了后泣不成声。

但是她突然像想起了什么似的!颤抖着给我们说了一句话,是老马昏迷前曾一直大喊重复的一句句话:"三千世界无出路,生生世世梦中笼!"

听到这句话,我们诧异了一下,心说老马不是说刷题的时候昏迷的么,听着怎么像正在看武侠小说着魔了?

太太说完后就离开了,说让我们帮忙看护一会,她要去办理一些住院手续等。

可就在这时候!我们四人中的小李却突然严肃的拉着我们几个满脸焦急的说:

"老马!老马...应该不是普通的昏迷,而是陷入了算法题的递归中了,有很大可能是他昏迷前一直不断的用思维试图去挑战最终数据,结果进行了无数次递归后依然没找到可以返回的契机,最终大脑崩溃。"

如果是别人听到这种话,恐怕会把小李当成精神病看待,可我们几个却恍然大悟,是的,我们都是经常刷算法的人,我们很能理解那种极限的感觉,每个人都有思绪不断飞升到差点迷失的经历。所以小李这番话在我们听来并不是危言耸听。

"这么说来,老马的确有可能连续多日熬夜刷题,最终崩溃的,那么...." 我说道。

"那么我们就有机会救他!也只有我们能救他!" 小李坚定的说道!

我们面面相觑,听着小李继续讲起,小李说他曾经有过一次帮助同事找回真实思绪的经验,所以才能断定老马的症状,但是这个解救方法很危险,也很难。

具体说明是这样的:

【老马可能在昏迷前脑子还在想着这道递归题的解法,结果导致他的思维停留在某一个极深层次的梦境世界里,他应该找不到回来的方式,也失去了对当前梦境进行验证的方法,就像是大船没有了锚点,他在无限的梦境世界中冒险的时候也失去了锚点。而我们能做的,就是绑好救生绳子,跳入这个无限深的梦境中,找到老马的意识,把他拉回到现实!就成功了!】

听着很简单,但我们都傻了,心说居然还有这种玄学一样的方式救人?确定不是吹的?

"那我们要怎么进入老马的梦中呢?" 我将信将疑的问道。

"这好办,只要谁也看一下今天那道困难打卡算法题,然后带着解题思路睡着,之后我会把他和老马的大脑皮层的所有神经全部同步映射,再让脉搏保持一致,眼动频率也保持相同...." 小李滔滔不绝的狂甩专业术语,我们也大多根本听不懂,但是只要能救老马,我还是愿意冒一次险的,而且现在在医院,各种设备链接工具都现成的,简直是天时地利人和。

说干就干,不一会儿的功夫,这套简易的设备就打造完毕,我自告奋勇的担任救援人员,因为这几个人中,我的算法能力是最高的,大脑也是最发达的,意志力也很坚定,小李要负责外界维持同步系统,剩下两人护法。

但在开始之前,我们还面临一个难点,就是这条所谓的"安全绳"怎么制作,在那无限深的梦中梦中梦...中,失去安全绳的话,我也会迷失,甚至永远无法醒来。

这一切都要从算法题递归思想来寻找答案...

首选要确定递归的最终目标数据和判断依据。
然后写好简单的 if 判断,判断每次调用时,是继续深入递归,还是返回。
若是返回就证明完成了目标,找到了最终值。
一但找到了最终值即可一层一层顺序返回到最外层。
在最初调用时需要传入初始数据。
若需要记下路径和深度,则需要每次传递的时候再额外加一个参数 path。
而这个参数 path,就是安全绳,可以帮助我们在找到了最终目标的时候,能沿着来时路线安全的返回。

我们现在面临的是梦中梦这个可怕的无限世界里,所谓的"最终目标数据"就是老马,每次的 if 判断就是判断眼前的老马,到底是不是最深层的真正老马的意识。而安全绳则是我每次再进入更深层梦境的时候要死死记住我目前所处的深度数。

而进入更深梦境和返回的方法则是通过一个陀螺,因为人在处于梦境中的时候是并不知道自己在做梦,所以要用陀螺是否可以无限旋转来判断是现实空间还是梦境。当意识到自己在梦境中后,则可以选择是醒来还是继续深入梦境去寻找老马。

计划好一切后,实验便开始了!

带上同步设备后,随着麻醉枪的注射,一股困意瞬间涌上来,我也迅速进入了老马的梦乡中...

现在,我正站在某个像公寓的门口,周围街上熙熙攘攘的....城市的夜生活真的很 high 啊~

在这冬天中热气腾腾的小火锅很是扎眼,而在店面内我发现了老马,此刻的他正在大快朵颐吃着火锅,他看到我便招呼我过去,我想都没想就过去和他一起吃了起来。

吃完火锅,我抢着结账,一摸兜发现有个很硬的东西,我紧忙掏出来发现并不是钱包,而是一个陀螺!

猛然间我想起了一切!这是梦!这是老马的梦境!我是来救他的!我居然自己刚刚还以为是现实中...一股莫名的后怕涌上心头。

而随着我的意识清醒,眼前的世界瞬间变得奇怪起来,所有的人全都驻足盯着我看,然后竟然统一的慢慢的向我走来,我突然想起小李之前嘱咐我的一句话:他说...这个梦境中所有的人和物都是老马大脑创造的,只有你是外来者具备主观意识,所以老马的大脑会自动清理掉你!你只能逃,不然你的意识会被杀死而困在虚空世界中!

我想起了这可怕的嘱咐,便开始害怕起来,心说真不该太过自信而自告奋勇来逞英雄,现在自己都危险了。但是现在立马返回也有点不甘心,于是我就抓起老马,对他说:老马,这是梦!速速醒来!速速醒来!

这句话是小李教我的,他说这就是验证眼前的老马到底是不是最真实最深处的他的 if 判断方法,如果是,那么他会怀疑当前的世界,那么他的梦境就会慢慢自动溶解,我们也就可以顺利的往返上一层了。如果世界毫无变化,那就说明眼前的老马也不是真的老马意识,也只是老马梦境中的创造的自己而已!

而这时我则需要立即闭眼,迅速沉睡来进入下一层梦境。我记得我还问过小李,我闭上眼睛,想睡着就能睡着么?

小李回答是的,他说人的意识一旦在梦中发现自己在梦中这回事,便可以脱离肉体的限制,控制整个梦境世界!不过我毕竟在别人的梦里,控制不了世界,但是可以控制自己!想睡就睡,想醒就醒,完全没有阻碍!

于是我强迫自己进入睡眠,猛地睁开眼睛,便发现面前的景色变了,此刻的我在一个乡下庄园里...

碧绿的菜园,爬满架子的葡萄....给人很安稳的舒适感。

园子里有一些人,但是我都不认识。

这时我突然看到老马在摘一些葡萄,正在给众人分发,嘴里还喊着一块钱一串。我心说好家伙,原来老马还兼职卖葡萄啊。

我走过去跟他打招呼,他却对我说,就算熟人,也要付款哦!

我心说这老马可真抠门,同事一场,一块钱也要!看着眼前硕大饱满的葡萄,我突然觉得很口渴,然后就掏了掏兜,却掏出一个陀螺...

于是我再次想起了一切!有了上一层梦境的经验,我这次没有等众人和老李反应过来,直接一个健步抓住老马,对他说:"老马!这是梦!你现在很危险!快醒来!"

可是老马却诧异的看着我,周围的世界也没有预想中所谓的分崩离析或者逐渐模糊。和上一层一样,众人疑惑的看着我并且不断逼近!那场景就像被一群丧尸包围一样可怕!吓得我倒吸了一口凉气!

然后赶紧再次闭眼,心说快睡快睡!

...

再次睁眼...我发现我正躺在自己在北京的出租屋里,清晨的闹钟响了,我看了看表,上班要迟到了!

于是我立马起床,却看到我的父母!他们一个在忙着做饭,一个在洗手间刮胡子,看我起来。

我父亲立马对着我母亲喊道:"孩子都起床了,你这饭咋还没做好呢,一会我爷俩上班都迟到了!"

母亲则回答:"快了,快了,别催了!"

我微笑着说,我早上就不吃了,着急上班,先走了。然后穿好衣服就赶紧出门,心说这个点了,地铁可能都要迟到了,又要扣钱了,哎~

但是我忽然意识到有些不对劲!!!

不对劲....

我....我是在北京上班,我的出租屋那么小,怎么可能父母也在呢?我父母这会儿应该在我东北老家里呢!对啊!北京这边一直都是我自己住啊!

顿时,一种非常恐惧的感觉涌上我的心头,我好像忘记了某些非常重要的事情!

我努力的想了好久,突然想起来...陀螺!我应该有个陀螺才对!

于是我赶紧掏兜却发现陀螺没了...

丢了?丢在哪了?我完全想不起来,上次见到那个陀螺仿佛是一个很久远很久远的事了!

于是我开始继续分析,不出意料的话,我现在应该是在做梦!我想赶紧醒过来,但是心里总有一个直觉告诉我,我还没完成某个任务,我不能醒!

但是这个任务我记不清了,好像是找什么东西还是找什么人...

不过目前这个梦得赶紧醒来了。于是我闭上眼,默念快点醒来醒来吧~

然后一睁开眼睛,发现自己处于一片雪山中.... 这又是哪?我强迫自己镇定下来,继续思考和回忆:

我这辈子都没来过雪山,很显然这也是梦,难道我陷入到了梦中梦?为什么会这样呢?我还是不明白,但是我却能记得刚刚更深一层梦的事情,不像睡着后进入更深一层时会自动忘掉之前所有层的梦一样,需要一点点才能回想起来。

所以此刻的我明确知道我刚刚在更深的一层梦,刚刚梦到父母,还梦到陀螺丢了!对!陀螺!我赶紧掏兜,却发现陀螺依旧不在....

我有点慌了,这个陀螺作为一个常量,一个常识存在,任何深层的梦境中,我都可以不用回忆即可想起陀螺的作用:就是来验证当前是否是梦境,而现在丢失了陀螺....那么....

严格来说,我已经无法快速验证现在是不是梦了!之后每一层梦境,我都只能凭运气了...

不过这层还好,因为在雪山里,我可以一眼发现不对劲,我仔细回忆雪山这个梦境我发生了什么,但是死活想不起来!冥冥中感觉 这像是很多年前的经历了....

看来现在只能继续苏醒了!随即,我便闭上了眼睛,默念醒来。

再次睁眼,发现周围是一片草地,刚开始我还不知道这是梦,还以为自己刚刚醒来深处现实中,不过靠着陀螺的记忆还有刚刚的雪山和出租屋的事情,我才意识到现在应该还是在梦里...

随着我回到了上一层,我的一些记忆似乎也找回了一些....

我想起了我是参加一个实验好像,是关于无限深层的梦境,好像和算法题有关,好像目的是找一个物件还是一个人。而且我现在的处境貌似很危险,因为我除了丢失陀螺之外,还不知道在哪层的时候丢失了"安全绳"!也就是说,我现在不知道自己处于多深的梦境,可能几十层,也可能几百层.....

这个数字想想就可怕,一层一层清醒过来,不知道我还要经历多少..万一我某一层始终没有运气好而意识到自己还在梦中,那可能就永远回不去了...

面对着这样史诗级的考研,我再也没有了一开始的自信,我没有勇气接受和承认这个我现在很难回去现实世界的事实。

漫无目的走了一会,我咬了咬牙,坚定了下内心,决定开始一层一层醒来,毕竟万丈高楼平地起,苏醒只能靠自己!

于是,我便开始无限的醒来再醒来,以至于我都懒得判断当前的世界是不是真实世界了,甚至养成了习惯,只要醒来就会立马再次习惯性的闭眼,默念醒来,然后睁开眼,再闭眼默念醒来。反反复复的重复着这套操作。

不知道过了多久,这期间无数的世界在我眼前一晃而过,就像幻灯片一样快速刷新着...有高山,有流水,有沙漠,有洞穴...

到最后我干脆懒得查了,就一直这么重复着,粗略估算有几百次之后...

我停了下来,我傻了,因为眼前的景象仍然是违反常识和记忆的,也就是说,在几百次醒来后面还有不知道多少次需要醒来啊,我突然有种想放弃的念头,心说干脆永远迷失在这里算了....

而此时,我的记忆也渐渐找回的更多了,我记得我是来救一个人,是同事老马,也记得这个算法题。

也清楚的意识到一个可怕的事情,就是正常来说我应该是在老马的梦中,见到的应该都是老马认识的人。但是在我现在能想起来的这些梦中,显然出现了老马不认识而我认识的人,比如说最深的那层我的父母....

所以我应该是已经陷入到自己的无限梦中梦了,我现在在现实中应该也是深度昏迷了吧~

正当我绝望的时候,我下意识的摸了一下兜,突然摸到了一个让我惊喜的物件!陀螺!

不知道从哪一层醒来后,陀螺回来了。确切的说是之前深入的时候漏掉了这个陀螺.....现在终于回到了丢失陀螺之前的层级了!这么说来,只要我坚持醒来,我的安全绳参数 path 也可以记起来了!

于是,我再次鼓足劲开始不断重复醒来的操作。

大概又经过几百层吧,突然在某一次醒来后,我大脑中一下便想起来这个 path 的值!于是我立即停下来,心说我运气简直太好了!看来我前面的推断是正确的!

可是下一秒,我就呆住了~

因为这个安全绳参数 path 的数值是..... 2147483647 !!!

2147483647 !!!

二十一 亿多!!!

我呆住了,这是什么鬼?这是什么情况?

21 亿...亿!!!???

我惊讶了足足有一个小时左右,常年刷算法的我很清楚这个数字是什么意思,这是 python 的最大整形数字,因为受限于 32 位操作系统所产生的最大整形数字!

我开始苦笑,心说我是怎么一步步沉睡进入这么多层级的呢?我不嫌累么?

想了想,觉得应该是每次进入更深梦境后,自己都会像重头开始一般,丝毫不觉得疲惫,然后意气风发的进入了下一层,就这样持续到 21 亿次,达到 python 最大数据时,突然在继续深入的时候丢失了这个安全绳...

但是现在也就意味着,我要苏醒 21 亿多次才能回到现实世界?想到这,我无力的瘫倒在地上。

还有我觉得有些奇怪的地方就是,这也太巧合了,正好这个最后的记忆是 python 的最大整形数,这是 python 的上限但不是我大脑的上限呀,为什么我下一层就选择扔掉了这个数了呢?

!!!

想了一会儿,我突然恍然大悟!我知道原因了!

因为这一层,是老马陷入的最深层!他当时为了解这道题,思绪一直循环递归,遍历 python 的每一个数字,直到最终的这个最大整数的层级!而在这之后,老马的梦境就截止了,所以我才会在深入到了自己的梦中,也就顺势丢掉了这个用来救老马的宝贵的安全绳...

而现在,我再次回到了这个层,那么不出意外的话!真正的老马的意识,现在就在这层梦境中,幸好我刚刚刹住车没有继续醒来返回上一层梦境,否则便要错过老马本尊了!

于是我开始仔细观察周围的环境...

我现在身处一处废弃的烂尾楼楼顶,天空中挂着几轮明月,是的几轮!

不过这些我都不在乎,现在最重要的是找到老马!

正想着,就发现远处似乎有个人影正蹲在地上,我眯着眼看了看才发现,那不是别人,正是老马!

我飞奔过去,心说好你个老马,把我也坑到这里了!

可是他看到我后,并没惊讶的转头理会我,而是说了让我一句震惊的话!

"你醒了啊,欢迎回来....现在你知道无限梦境的可怕了吧..." 老马垂头丧气的说道。

"现在的你,是真人吧?" 我没有理会老马的话,而是先试探性的问了问,毕竟我应该经历 21 亿多次面对虚假老马...疑心大是正常的。

"当然是真人,这样,我先说下咱俩现在的处境吧...." 老马转头看向我说道。

我半信半疑的也蹲在地上,示意他继续说,我自有判断。

老马深吸了一口气说:"那道每日打卡题,我在梦中进行了递归解答,但是很遗憾,我找不到最终目标数据,我一个数一个数的遍历循环,一直到我进行了 2147483647 次递归后,算到了 32 位整形的最大值后!我发现这个数字依然并不是最终答案,整个递归依然无法进行返回,但后面连操作系统都装不下了,所以这不可能,这不符合出题常理啊~,于是我便在这层放弃了,可是想回去时却发现太困难了,21 亿多次醒来才能回去啊..."

我听着他的话,确定他的确是真正的老马意识,数据全部正确,逻辑也很清晰,便接着聊了起来:

“是啊,苏醒的过程中记忆不像入梦后被清空,而是会不断累加想起更多的事,要不了多少层,我们大脑就会存储不足而崩溃,然后删掉我们在现实世界的一切记忆,所以就算最终能回到现实世界,恐怕也变成俩个白痴了....”

老马听着我的分析面露尴尬的说道:"其实...也不是一点办法没有,只要我们能解开这个算法题的答案,便可以像坐火箭一般迅速自动的醒过来!一瞬间便可以秒过这 21 亿多层世界!...但,这道题是无解的...是一个真正的无限死递归..."

老马刚兴奋起来的语调又低沉了下去,而我也失望的沉默了。

过了许久,突然!

我想到一件事!一件似乎让一切都有转机的关键事情!

我立即冲着老马喊道:

"老马!你是不是忘了什么!"

"忘了什么?" 老马疑惑的看向我。

"对,你是不是没看这个题的数据范围!" 我再次喊道!

老马顿了一下,呆呆的望着我...

我继续喊道:

"这个题我也看了,人家出题者在出题的左下角的提示模块中规定了最大的数据范围,我记得是 10 的 4 次方,就是 10000!你是不是压根就没仔细看完题的提示,就开始做题了!"

老马听到后,当即愣了半天,然后突然双眼冒光,抓住我对我喊道:

"我靠,真的是这样么!10000 就可以了么?也就是说,最终的值就仅仅是到 10000 就结束了?"

说罢,老马迅速开始心算起来,一边算还一边念叨:

"如果是 10000 的话,10000 除以... 再乘上....最....最终的结果..."

我此刻也在心算着,便抢先脱口而出:"结果就是 2021!结果就是 2021!"

此刻,激动的老马和我眼前的场景迅速开始崩溃,溶解...

一阵强光袭来。

我再次睁开眼,终于看到了久违的医院病房的天花板,周围三个小伙伴正在焦急的围着我和老马...

仿佛过了很多年的样子,一切,就这么回来了!

清醒了一下,我直接一个鲤鱼打挺从床上站了起来,然后跑到老马身边伸手抓住老马的衣领,顺手掏出手机打开 leet 扣 app 的今天的打卡题目给他看!

赫然显示着 最大值为 10 的 4 次方...

"睁开你的眼睛瞧瞧!再不好好看提示,下次没人救你了!!"

我扔下了这一骂后,气愤的摔门而走....

留下四人愣在原地。

所以读者们,以后再刷算法题,请一定要重视这个左下角的提示哦~ 不要白浪费精力考虑超出范围的数据了~

共收到 6 条回复 时间 点赞

沙发,此故事由真实梦境改编,最近好多同学大半夜还在刷题,做梦都在解决问题,走火入魔了。

此处 @ 无敌哥

这。。。。

做梦都在卷🏇

无敌哥给饭佬的压力么

编出这个故事的人也真的是牛逼啊,一般人写不出这感觉

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册