关于软件
能让计算机完成各种任务的指令序列通称软件
关于算法
算法的关键属性是效率,即对于给定的数据量,它的处理速度怎么样?花费的时间大概是多少?书上介绍了以下3种算法:
- 线性算法
即计算时间与数据量成正比,当对某些数据的基本操作是相同的,那么工作量(计算时间)会与数据量同比例增加
- 二分法
对于线性算法的改进,如果在最开始数据是按照一定的规则排列的,那么就可以大大节省时间。
例如若有1000个数据,那么为了找到其中任何一个大概找10次左右(因为2的10次方等于1024;若有2000个数据(比1000翻了一倍),大概找11次左右(因为2的11次方的2048);若有1,000,000个数据,则大概找20次;
好处很显然,数据量的大幅增长只会带来工作量的微小增长。
2的幂次方 | 10的幂次方 |
---|---|
2的10次方=1024 | 10的3次方=1000 |
2的20次方=1,048,576 | 10的6次方=1,000,000 |
2的30次方=1,073,741,824 | 10的9次方=1,000,000,000 |
2的40次方=1,099,511,627,776 | 10的12次方=1,000,000,000,000 |
2的50次方=1,125,899,906,842,624 | 10的15次方=1,000,000,000,000,000 |
- 排序
选择排序:每个数据都去与未和自己比较的数据进行比较,共需要N(N+1)/2,但是由这个式子可以发现工作量的增长比数据量的增长要快得多(特别是当数据很大时)
快速排序:由二分法可以知道,任意一个数值被找到需要logN次(以2为底数),所以对于N个数据而言,就需要NlogN次。虽然当N很大时,这个数也不小,但是相比于选择排序而言就好很多了。
关于编程与编程语言
- 汇编语言
与具体的计算机有关,对于不同的处理器,就算执行同一件事,但是写出来的语句也是不同的,这是很麻烦的。
- 高级语言
从上图可明显得知,尽管编译的结果并不相同,但是对于程序员而言写的句子是一样的(例如就是Z=X+Y)