程序原本(三十八):程序设计的核心思想——数据结构:散列存储(哪种情况下,做记号的法子才确保能行得通呢?)

阅读数:40 2019 年 9 月 28 日 18:22

程序原本(三十八):程序设计的核心思想——数据结构:散列存储(哪种情况下,做记号的法子才确保能行得通呢?)

排排座的主意其实并不太好:我们总是要尽可能将小朋友排到最前面,否则空缺一旦多了起来,老师们就不大可能记得住了。

于是老师们想起了一个故事。据说,在很久很久以前,有个楚国人在坐船渡河的时候,身上所佩的宝剑掉到水里去了,于是他在船上刻下了一个记号,说:这是我掉剑的地方。当船停在岸边的时候,这个楚国人就跳下船去,沿着这个记号往下找啊找啊……

不对,好像故事讲错了——这个可怜的楚国人好像找不到他的剑了吧?

老师们很快意识到这个问题,于是立即换了另一个著名的故事。又据说,在很久很久以前,有人送给曹操一头大象,但当曹操问这头象有多重时,却难坏了他的官员们——仍然是据说,提出把大象砍成许多段、排成排、逐一称量的那个家伙已经被推出去先砍成许多段了。这时呢,有个叫曹冲的小朋友跳出来说,我们先把大象推到船上去,根据水面位置在船上刻个记号;然后再把大象换成许多石头,直到船沉到记号的位置;最后我们称一下那些石头不就行了吗?

咦!问题解决了!

但新的问题又出现了:为什么同样是做记号,楚人的法子行不通,曹冲的法子却行得通呢?更进一步的问题是:哪种情况下,做记号的法子才确保能行得通呢?

评论

发布