目录
程序=数据结构+算法
算法(
Algorithm
)是
对特定问题求解步骤的一种描述
,它是指令的有限序列,其中的每条指令
表示一个或多个操作
做炒土豆丝,土豆丝是数据结构,炒这个方法就是算法(求解问题的步骤)
例子
a.18岁 b.23岁c.45岁d.45岁e.56岁
算法:将线性表按照年龄递增排序
Step 1
:扫描
5
个元素,找到年龄最小的一个元素,插入到第
1
个位置
Step 2
:扫描剩下的
4
个元素,找到年龄最小的一个元素,插入到第
2
个位置
Step 3
:扫描剩下的
3
个元素,找到年龄最小的一个元素,插入到第
3
个位置
Step 4
:扫描剩下的
2
个元素,找到年龄最小的一个元素,插入到第
4
个位置
一,算法的特性
1.有穷性。一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。
用有限步骤解决某
注:
算法
必须是
有穷
的,而
程序
可以是
无穷
的
比如,微信是一个程序,但不是一个算法
2.确定性。算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。
输入相同的程序,但如果一次运行是一个结果,第二次又是另一个结果,那这样就没有确定性
回头看例子的话,会发现其实例子的算法中没有确定性,因为有两个年龄一样的人,所以其实也不算是算法
3.可行性。算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。
4.输入。一个算法有零个(helloworld没有输入)或多个输入,这些输入取自于某个特定的对象的集合。
输出。一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。
二,好算法的特质
1
)正确性。算法应能够正确地解决求解问题。(但没解决问题的也是算法)
2
)可读性。算法应具有良好的可读性,以帮助人们理解(和同事之间要保证能看懂,更重要的是自己能看懂)
3
)健壮性。输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果(在有负数输入时能有一定反应,有应对方法)
4)高效率(花的时间少,时间复杂度低)与低存储量需求(不费空间,空间复杂度低)
三,如何评估程序的时间开销?
能不能让算法先运行,
事后统计
运行时间?
不能
存在什么问题?
•
和机器性能有关,如:超级计算机
v.s.
单片机
•
和编程语言有关,越高级的语言执行效率越低
•
和编译程序产生的机器指令质量有关
•
有些算法是不能事后再统计的,如:导弹控制算法