算法就是一组有穷的规则,它规定了解决某一特定类型问题的一系列运算。
算法是一系列解决问题的明确指令,也就是说,对于符合一定规范的输入,能够在有限时间内获得要求的输出。
算法的基本特性:
- 有穷性:必须在有限步骤之后终止
- 确定性:每个步骤必须精确定义,无歧义
- 输入:0个或多个输入(输入是从特定的对象集合中取出)
- 输出:一个或多个输出
- 可行性:它的所有运算都是基本的运算,理论上可用纸和笔在有限时间内精确完成
算法学习的基本内容
- 设计算法:基本设计策略
- 表示算法:用语言表示出来
- 确认算法:合法输入后能够输出正确答案
- 分析算法:占用CPU的时间和占用存储器的空间
- 测试程序:调试
为什么分析算法?
可以知道该算法的好坏、促进设计出更好算法。
运行时间的度量单位:
- 找出算法中最重要的操作(对总运行时间贡献最大的操作)--基本操作
- 然后计算在该算法中基本操作运行的次数
计算时间的渐进表示
n:问题的规模 f(n):算法的计算时间 g(n):形式简单的函数
以下三种符号表示g(n)对f(n)的渐进:
- O:如果存在两个正常数c和n0,对于所有的n≥ n0,有|f(n)|≤ c| g(n) |,则记做f(n)=O(g(n))--->g(n)是f(n)的一个上界函数
- Ω:如果存在两个正常数c和n0,对于所有的n≥ n0,有|f(n)|≥ c | g(n) |,则记做f(n) =Ω(g(n)).
- :如果存在正常数c1, c2和n0,对于所有的n≥n0,有c1 |g(n)|≤|f(n)|≤c2 |g(n)|,则记做f(n)= (g(n)).
以上三个符号具有以下性质:
- 传递性:比如:f (n)= O(g(n)),g(n)=O(h(n)) Þ f (n)=O(h(n))
- 反身性:比如:f(n)=O(f(n))
- 对称性:f(n)= (g(n)) <=> g(n)= (f(n)) 只有这一条
- 互对称性:f(n)=O(g(n)) <=> g(n)=Ω(f(n)) 只有这一条