算法的五个重要特性
- 有穷性
- 确定性
- 可行性
- 输入
- 输出
算法优劣的基本标准
- 正确性
- 可读性
- 健壮性
- 高效性
算法的时间复杂度
事前分析估算法和事后统计法
事后统计是指让算法在机器上跑完了再去统计运算的时间,可想而知这个时间和机器配置是有强因果关系的
事前分析估算是指算法实际运算前就能在逻辑上去分析计算量的
问题规模和语句频度
问题规模
是算法求解问题输入量的多少,是问题大小的本质表示,一般用整数n表示。问题规模n对不
同的问题含义不同
一条语句的重复执行次数称作语句频度(FrequencyCount)。
设每条语句执行一次所需的时间均是单位时间, 则一个算法的执行时间可用该算法中所有语
句频度之和来度量
时间复杂度的定义
为了客观地反映一个算法的执行时间, 可以只用算法中的 “基本语句" 的执行次数来度量算法的工作量。
所谓 “基本语句” 指的是算法中重复执行次数 和算法的执行时间成正比的语句, 它对算法运行时
间的贡献最大。 通常, 算法的执行时间是随问题规模增长而增长的, 因此对算法的评价通常只需
考虑其随问题规模增长的趋势。 这种情况下, 我们只需要考虑当问题规模充分大时, 算法中基本
语句的执行次数在渐近意义下的阶。(不看现在要看未来)
一般情况下, 算法中基本语句重复执行的次数是问题规模n的某个函数j(n), 算法的时间量
度 记作
T(n) = O(f(n))
它 表示随问题规模n的增大, 算法执行时间的增长率 和 f(n)的增长率相同, 称做算法的渐近时间复杂度, 简称时间复杂度(TimeComplexity)
该定义说明了函数T(n)和f(n)具有相同的增长趋势,并且T(n)的增长至多趋向于函数f(n)的增
长。符号"O"用来描述增长率的上限,它表示当问题规模n>n。时,算法的执行时间不会超过f(n),