隐匿在数据结构背后的原理

公元2014年的冬天,一部讲述计算机科学之父艾伦·图灵传奇人生的传记电影在美国上映,这部影片就是《模仿游戏》。次年,该片荣获第87届奥斯卡金像奖最佳改编剧本奖,以及包括最佳影片、最佳导演、最佳男主角、最佳女配角在内的7项提名,一时风光无限。尽管现代计算机已经无处不在,但因图灵的时代离我们过于久远,现今人们对他的研究工作已经知之甚少。

 

要说起图灵的贡献,我们还得把时间再往前推。1900年,德国数学家大卫·希尔伯特在巴黎举行的国际数学家大会上作了题为《数学问题》的演讲,在这篇重要的演讲中,他提出了著名的希尔伯特之23个问题。尽管此后的数学发展远远超过了希尔伯特的预料,但他所提出的23个问题仍然对20世纪的数学发展起到了非常积极的推动作用。

 

希尔伯特的第10个问题是要设计一个算法来测试多项式是否有整数根。他没有使用算法这个术语,而是采用了下面这种表述:“通过有限多次运算就可以决定的过程”。有意思的是,从希尔伯特对这个问题的陈述中可以看出,他明确地要求设计一个算法。因此,他显然是假设这样的算法是存在的,人们所要做的只是找到它。现在我们知道,这个任务是无法完成的,即它是算法上不可解的。但对那个时期的数学家来说,以他们对算法的直观认识,得出这样的结论是不可能的。

 

非形式地说,算法是为实现某个任务而构造的简单指令集。以日常用语来说,算法又称为过程或者方法。算法在数学中也起着非常重要的作用。古代数学文献中就包含有执行各种各样计算任务的算法描述。例如,我国古代数学经典《九章算术》中就记述了包括求最大公约数、最小公倍数、开平方根、开立方根等在内的诸多算法。现代计算机科学中更是充满了各种各样的算法。例如,求解最短路径的狄克斯特拉算法,进行字符串匹配的KMP算法等等。

 

虽然算法在数学中已有很长的历史,但在20世纪之前,算法概念本身一直没有精确的定义。数学家们面对希尔伯特的第10个问题,显得束手无策。由于缺乏对于算法本身的精确定义,所以要证明某个特定任务不存在算法就完全不可能了。要想破解希尔伯特的第10个问题,人们不得不等待算法之精确定义的出现。

 

直到1936年,曙光似乎出现了。图灵向伦敦的权威数学杂志递交了一篇题为《论数字计算在决断难题中之应用》的论文。该文最终于1937年正式发表,并立即引起了广泛的注意。在论文中,图灵描述了一种可以辅助数学研究的机器,也就是后来被称为“图灵机”的抽象系统。与此同时,另外一位数学家阿隆佐·丘奇也独立地提出了另外一套系统,即所谓的Lambda演算。图灵采用他的图灵机来定义算法,而丘奇则采用Lambda演算来定义算法,后来图灵证明这两个定义是等价的。由此,人们在算法的非形式概念和精确定义之间建立了联系,即算法的直觉概念等价于图灵机算法,这就是所谓的丘奇-图灵论题。

 

 

丘奇-图灵论题提出的算法定义是解决希尔伯特第10问题所必需的。而第10问题的真正解决则要等到1970年,借助于丘奇与图灵的杰出贡献,马提亚塞维齐(Yuri Matiyasevich)在戴维斯(Martin Davis)*、普特纳姆(Hilary Putnam)和罗宾逊(Julia Robinson)等人工作的基础上,最终证明检查多项式是否有整数根的算法是不存在的。上述四人的名字也紧紧地同希尔伯特的第十个问题联系在了一起。破解希尔伯特之第十个问题的历史更像一场声势浩大又旷日持久的国际协作和学术接力。每个人的工作都必不可少,而且大家都感觉已经相当接近问题的最终答案了。后来的历史鉴证了马提亚塞维齐敏锐地接过最后一棒并完成终点冲刺的伟大一幕。更有意思的是,彼时正值美苏冷战最为紧张的时期,两个超级大国之间的正常学术交流几乎完全中断。但这或许就是科学无国界的一个重要体现,尽管国家层面上双方剑拔弩张,而科学们在私下仍然以一种惺惺相惜的默契方式彼此神交。特别是在得知苏联数学完成了最终的证明时,美国同行们都表示相当的振奋和由衷的喜悦,这不得不说是学术界的一段佳话。

 

              

 

   Yuri Matiyasevich(1947—)         Hilary Putnam(1926 – 2016)

俄罗斯数学家和计算机科学家         美国数学家和计算机科学家    

   

     Martin Davis(1928)                 Julia Robinson(1919 – 1985)

       美国数学家                                       美国数学家               

 

回顾建立算法形式化定义和破解希尔伯特之第十个问题的那段风起云涌的历史,更多地是想说明算法之于我们的世界是多么的重要。而谈到算法的重要性就不得不提及计算机科学家安德鲁·艾派尔在1985年所开展的一项研究工作,这也是程序性能优化领域的经典案例。彼时,艾派尔编写了一个用于计算重力场中天体间相互作用之问题的程序。给定场中物体质量、初始位置和速度等条件,该程序即可对10000个天体相互作用时其中两个天体的运行状态进行模拟和仿真。由于计算量太大,最初的程序要完成该项计算大约需要耗时一年。在一系列的改进之后,艾派尔最终将程序耗时有效地缩短到了一天!而在这个改进过程中,算法和数据结构的调优占了主要比重。

 

无论你是信息技术的从业人员,还是计算机专业的在校学生,再或者是从事相关专业的研究人员,熟练掌握一门计算机语言都重要性都不言而喻。但是不是掌握了这其中的语法规则就能写出漂亮的程序了呢?答案当然是否定的。因为你还需要另外一样至少同等重要的工具——算法。算法和语言的关系,其实很像是“道”和“术”的关系。掌握一门语言,就如同习得一门技艺,可以成为一名工匠。但要想从工匠一跃成为大师,单单停留在“术”的层面显然不够,更重要的是悟“道”。而算法无疑就是计算机程序设计中的“道”。事实上,从图灵开始,算法已然同计算机科学之间产生了密不可分的联系。在与信息技术相关的工程应用领域,我们同样需要各种各样的算法。在计算机及其相关领域,算法无疑就是阿里巴巴打开惊人宝藏的通关密语,只有掌握它的人,才能获得披荆斩棘、扬帆远航的符咒,才能见识到更加广阔的风景

 

---------------------------------------------

* 戴维斯在得到相关成果时应用了中国剩余定理。

 

【本文完】

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白马负金羁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值