数据结构与算法分析(算法分析部分)

来源:互联网 发布:java实现三级联动 编辑:程序博客网 时间:2024/05/14 20:20

1.算法:对于一个问题,某种算法被确定是正确的,还要考虑这个算法的可行性,比如时间和内存。
2.数学基础
时间复杂度:
如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),它是n的某一函数。T(n)称为这一算法的“时间复杂度”,当输入量n逐渐加大时,时间复杂度的极限情形称为算法的“渐近时间复杂度”。
我们常用大O表示法表示时间复杂度
原则:忽略低阶项和常数, 如:T(N)=O(2N^2)或者T(N)=O(N^2+N)简化成
T(N)=O(N^2)即可
最坏运行时间:即按照算法的最长时间来计算
for循环:n
嵌套for循环:n^2
当问题规模即要处理的数据增长时, 基本操作要重复执行的次数必定也会增长, 那么我们关心地是这个执行次数以什么样的数量级增长。所谓数量级可以理解为增长率。这个所谓的数量级就称为算法的渐近时间复杂度, 简称为时间复杂度。如何分析这个数量级呢? 由于基本操作的执行次数是问题规模n 的一个函数T(n), 所以问题就是我们要确定这个函数T(n)是什么, 然后分析它的数量级(增长率), 拥有相同数量级的函数 f(n) 的集合表示为 O(f(n)), O是数量级的标记。如果T(n)的数量级和f(n)同
3.运行时间中的对数:
分析算法最混乱的地方就在对书上面。对数经常出现的规律:如果一个算法用常数时间将问题的大小削减为其一部分,那么该算法就是Olog(N),若是削减到常数,那么该算法就是O(N)的。例如折半查找算法,在一个有序的数组中,查找A[i}=x,若是x大于中间的元素,那么就查找数组的右半部分买否则,查找数组的左半部分。