像程序员一样思考读书笔记 3

来源:互联网 发布:1069短信平台软件 编辑:程序博客网 时间:2024/06/09 23:40

第三章用数组解决问题

1、数组基本操作。存储,复制,提取和搜索,排序(应用2种:一种是快速、易于使用的算法,使用快速排序qsort,另一种是优雅、易于理解的算法),计算统计数据。

2、如果不用快速排序qsort,那么就是用插入排序吧。大多数情况下,插入排序并不是效率最高的排序算法。实事求是说,即使对于执行插入排序而言前面的代码也不是效率最高的方法。他仅仅适用于长度较小或中等的数组。但是他足够简单,很容易记忆,可以把他看成是一种定式思维。我们至少要有一种排序方法,可以让自己在编写代码时充满信心。

3、寻找众数。

在真正编写代码前,可以先写一些伪码。所谓伪码,就是与程序代码相似的语句,是日常语句和c语句的折中,可以提醒我们在编写每条语句时应该要完成什么任务。

方案1:先排序,再找出众数。

有些代码对于测试用例是可行的,但是到实际情况可能会出现效率和性能上的问题。

重构,就是对代码进行改进,但不影响它所执行的任务。

方案2:柱状图解决方案。

相比原来的排序方法,他是更好的解决方案。但是,这并不意味着尝试前面那种方法是错误的或者是浪费时间的。

如果写程序时,自己一开始所采取的解决方案并没有成为最终的解决方案,也不必因此而懊恼。编写一个最初的程序,其实是一种学习过程,我们不能期待前进的道路总是一帆风顺。另外,在一个问题上多走些弯路有助于我们在以后的问题中找到更便捷的道路。比如之前的最初方案里面的某一部分,是最终方案所不具有的,如果以后有需要,还是要用最初方案里的那部分。

我们需要认识到,更曲折的道路并不是浪费时间,我们往往能够从中学到一些走最短路径时所无法学到的东西。这也是保存自己所编写的所有代码的原因之一。这样就可以很方便的找到他并在以后进行服用。即使是那种被证明是“死路一条”的代码,也可能会成为未来宝贵的资源。

4、常量数组作为查找表。这是使用线性搜索技巧所进行的提取操作。

5、多维数组。二位数组并不常见,三维以上就更为罕见了。这是因为大多数据本质上都是一维的,而且多维的数据在本质上可以用多个一维数组表示。因此,对多维数组的使用并不是程序员必须选择的方法。处理二维数组是,数组的标识符尽量赋有意义,可以帮我们清楚地区分维数和下标。即使使用了多维数组,有时候最好的方法还是一次只处理一维的数据,代码会变得更清晰并且容易编写。

6、决定什么时候用数组。数组只是一种工具。

三点:是否需要多次处理数据、最大长度是否固定、随机访问还是线性访问数据。同时考虑代价平衡。

0 0