从Solstice Google题解说起

前两天Solstice放出一个帖子,把前一段时间在CSDN首页停留过的Google 850分试题给解析了一番。记得当时这个题目的出现是我告诉他的,他大概做了半下午加一晚上,就得出O(n3)的解,次日上午又得出O(n2)的解。当天晚上,Solstice给我打了两个小时电话,讨论这个题目。当时我也给出了一个算法,但是使用了树作为数据结构,当我知道他使用二维矩阵解决此问题后,经过短暂的考虑,立刻认定他的想法比我好得多。我弟弟是建筑师,当时在旁被骚扰了两个小时,挂断电话之后,他对我说:“你们搞计算机的还真是不一样。在我们建筑设计行业里,各有各的想法与立场,两人的方案相比较,彼此互不相让,谁也不服谁,表面上分个优劣,心里通常都是不服气的,最后说到底是只能拼经验、拼名气,拼资历。哪像你们这么容易见分晓!” 我听了这话,不由得有些得意。虽说我弟弟也不过是一己之见,未见得正确,但是至少也从一个侧面证明了计算机算法设计还是一个讲求实证的科学技术领域,与当下流行的那些徒以口舌为能事的显学等并非同类。

回过头来说,Goolge这个题目,只要花一些时间去认真研究,得出O(n3)的算法并非难事。不过看看Solstice的代码,除了函数命名不是很规范以外,在数据结构的设计和标准库算法的使用上,还是显现了功力。一维和二维数组确实是非常有用的数据结构,简单而又威力无穷。每个元素,除了其对象内自带信息之外,其所处的位置也是重要的信息。这就是数组威力的源泉。长期以来,我设计数据结构时有轻视数组,而偏爱复杂数据结构的倾向,Solstice的这个轻快的算法确实给我上了很好的一课。另外,C++ <algorithm>的威力也可以从这段程序中看出端倪。在那篇文章的回复中,有人写了python和scheme等动态语言的程序,看上去更短小。不过相对于那些语言,C++的程序显然更“常规”,更适合出现在产品代码里。

你可能感兴趣的:(数据结构,算法,python,Scheme,Google)