从开始到现在:一起走进计算机文化

从图灵在1936年的论文《论可计算数及其在判定问题上的应用》中提出“算法”和“计算机”两个概念并于1940年设计出破译德国恩尼格码的机器“炸弹”(Bombe)至今,计算机的发展与研究已经覆盖到了我们生活的方方面面。

△ 图灵1936年发表的论文《论可计算数及其在判定问题上的应用》。(图片来源:http://plms.oxfordjournals.org/content/s2-42/1/230.extract)

而如今计算机的研究也不再只限于枯燥的机器内部的结构或者编程的研究。下面我举几个例子带你了解计算机的趣味性:

假设有一个公共汽车站,平均10分钟过一趟载客量为50人的车。而平均10分钟会有30个人来等车。突然有天举办奥运,平均10分钟会有60个人来等车。作为公汽公司,你会将每辆车的载客量增加到多少以至于不改变乘客的平均候车时间呢?

100人?或是大于100人?亦或是小于100人?

(图片来源:网络)

应该是100人吧?! 排队人数翻倍,为了不让平均等车时间发生变化我们也应该让每趟的载客量翻倍吧?

听着似乎很有道理,但事实并非如此。

如果只是保证之前的平均候车时间,公汽公司完全没有必要将载客量增加到100人或以上。抛开严谨的数学证明,试着想象有这么两个世界 A 和 B。世界 A 的时间比世界 B 慢一倍, 也就是说世界 A 的两秒只相当于世界 B 的一秒。在世界 A 的系统里有个车站平均 10 分钟有 30 人排队并被载客量为50人的车载走,平均排队时间是 T(a)。在世界 B 的系统里也有个同样的车站平均10 分钟有 30 人排队也被载客量为50人的车载走,平均排队时间是 T(b)。如果我们从世界 C 同时观察 A 和 B 会得到什么样的结论呢?没错,单位时间里世界 B 的排队人数和上车人数是世界 A的两倍,而世界 B 的平均候车时间却是世界 A 的一半。也就是说在上面的例子里如果因排队人数翻倍而将载客量也翻倍,乘客的平均候车时间将会降至原来的二分之一!

不要小看看似简单的这种排队候车问题,小到计算机系统的模拟,大到搜索引擎的网页排名,无一不用到了上述的候车问题。这就是在计算机系统(System)研究里常用到的排队原理(Queuing theory)。而如果仅用我们的常识来解决问题,得出的往往都是错误的结论。

我们再看一个哲学点的例子。

请证明人不能用自己的方法来判定自己方法的有效性。这里的有效性是指可以在有限步骤内解决一个的问题。什么?学计算机也要证明类似 “ 你妈是不是你妈 ” 的问题?没错,这就是计算机理论(Theory)研究里著名的停机问题(Halting problem)。而如此深奥的问题最后却被图灵以一种及其简单的方式证明出来,并由此奠定了计算机语言设计,编译及实现的基础。

(图片来源:https://www.youtube.com/watch?v=macM_MtS_w4)

我们再看一个不深奥但却丝毫不简单的问题。

假设铁轨上有五个小孩在玩,停用的岔轨上有一个小孩在玩,你要把车转移到岔轨上压死一个孩子救下五个吗?如果那一个在停用的岔轨上的孩子是你的亲人,你又会怎么选择呢? 这是一个英国哲学家费丽帕·弗特在1967年提出的电车问题(Trolley Problem)。值得思考的是大多数人在停用岔轨不是自己的亲人的条件下,会选择救下五个人,而在知道了岔轨上是自己亲人的条件下会选择袖手旁观。

(图片来源:www.relativelyinteresting.com)

没错,类似的问题也和计算机应用(Application)研究有着千丝万缕的关系。像这样同一事件在不同条件下得出不同结论常被用于批判图灵实验的有效性。而人工智能也在像这样的质疑声中不断发展着。让人们不禁思考,计算机这个为和平而生的东西是否最终会导致更大的灾难。

上面三个例子分别隶属于计算机研究发展至今的三个大的分支,系统(system),理论(theory)以及应用(application)。

未来,我将推出计算机系列文章同大家一起探索诸如以上的有趣事例,走进计算机发展的这三个大分支,从开始到现在。

(0)

相关推荐