《世界是数字的》读后感二
第二部分、软件
现代系统越来越多地的采用通用硬件(如处理器、内存,以及与外界相连接的接口),同时靠软件来实现特定的行为。人们普遍认为,软件更便宜,更灵活,比硬件更好修改(特别是跟已经出厂的设备比)。
第四章 算法
算法,就是保证特定计算过程正确执行的一系列步骤。
算法的每一步都表达为一种基本操作,其含义都是完全确定的。
4.1线性算法
如果计算时间与数据量成正比或叫线性比例,那该算法就叫做线性时间算法或线性算法。计算机要执行多少步,或者需要花的时间有多长,与他必须处理的数据量成正比。
以数据量为横坐标,以时间为纵坐标画一条线,得到的将是一条向右上方延伸的直线。
线性算法的基本形式都是一样的。
4.2二分搜索
二分搜索需要熟练的掌握2的幂和10的幂,每次检查或比较都会把数据项一分为二,而其中的一半就不用理会,每一步都会舍弃一半的数据。
二分搜索的关键是数据量的增长只会带来工作量的微小增长。
选择排序算法,会不断从未经排序的名字中选择下一个名字。
检查名字的遍数与最初的数据项数成正比,而每一遍要处理的项数都比前一遍少一项,所以选择排序算法的工作量是N+(N-1)+(N-2)+(N-3)+......+2+1,即N*(N+1)/2。
快速排序法,1962年由英国科学家托尼·霍尔发明。该算法可对任何数据进行排序,但只有在每次都能把数据分割成大小相等的组时,才最有效。
4.4难题与复杂性
“P”问题,具有“多项式”级复杂性,即解决问题的时间可以用 N2这样的多项式来表示,其中指数可以大于2。
“NP”问题,可以快速验证某个解决方案是否正确。NP,非确定性多项式,即这些问题可以用一个算法在多项式时间内靠猜测来解决,而且该算法必须每次都能猜中。
第五章 编程与编程语言
编程语言,让我们能够表达完成某个任务所需计算步骤的语言。
5.1汇编语言
1949年,EDSAC的诞生标志着第一批真正可编程的电子计算机登上历史舞台。
代替人执行具体操作的程序被称为汇编器,相应的语言叫汇编语言,这个层次上的编程叫汇编语言编程。
5.2高级语言
相比于汇编语言,高级语言的优势:
1、让更多人学会编程,编程效率大大提高。
2、高级语言程序独立于各种体系结构,通常无需修改即可在不同的体系上运行。
3、大幅降低了为多种计算机开发程序的成本。
FORTRAN,由约翰·巴库斯领导的一个小组开发,最早的一门高级语言。
第二个主要高级语言是COBOL,专门针对商业数据处理的语言,适合表达库存管理、开发票、做工资等方面的计算。
BASIC,学习编程的入门语言,由约翰·凯梅尼和汤姆·库尔茨在1964年开发。
C、C++,专门为“系统编程”开发的语言。
Java、JavaScript,编程更加高效,便捷。
5.3软件开发
5.3.1库、接口和开发工具包
5.3.2 bug
5.4软件资产
5.4.1知识产权
知识产权指的是有个人经过发明或创作等创造性劳动得到的各种无形资产。有一些保护知识产权的法律适用于软件,这些法律涉及商业秘密、版权、专利和许可。
5.4.2标准
标准时对某些产品如何制造或者应该具有什么用途的准确、详细的说明。
5.4.3开放源代码
程序员编写的代码,无论使用的是汇编语言还是(更可能的)某种高级语言。
开放源代码则是指另一种做法,即源代码可以被任何人自由阅读、研究和改进。
总结:这两章的内容主要讲了算法与编程语言。无论是算法,还是编程语言都有着很多硬性知识点需要自己去背去记。就我而言,算法一章要比编程语言一章好记多了,二分搜索和二分法很像,排序就更不用说了。不过到后面的“P”问题和“NP”问题,我就有一点转不过弯,但是我会继续想这两个问题和多项式时间的。第五章编程和编程语言的第二节中有写几种高级语言的代码,不过我没有看明白,希望能在学这门课时,可以看懂他们。