算法;
数据结构与算法的关系:
算法是什么?指令的有限序列,每条指令表示一个或多个操作。算法能输入输出,能自动结束不会无限循环,而且每一个步骤在可接受的时间内完成。
好的算法什么正确可读健壮都不算什么,最重要的是时间效率高和存储量低。
怎么衡量算法的效率啊?
事前分析估算的方法 :时间取决于算法采用的策略、方法。编译产生代码的质量,问题的输入规模。 机器执行指令的速度。
测定运行时间最可靠的方法就是计算对运行时间有消耗操作的执行次数。
函数的渐进增长:给定两个函数f和g 如果存在一个整数N 使得对于所有的n>N f总是增长比g大,那么我们说f的增长渐进快于g
与最高次项相乘的常数并不重要。
最高次项的指数大的,函数随着n的增长,结果也会变得增长的特别快
判断一个算法的效率的时候,函数中的常数和其他次要项常常可以忽略,而更应该关注主项的阶数。
这个都只是简单的初步判断,需要进一步计算算法时间复杂度。
用大O记法。
怎么推导大O阶方法:就看运行几次计算,如果是常数次 那就回O(1)
首先用常数1取代运行时间中的所有加法常数
然后在修改后的运行次数函数中,只保留最高阶项
如果最高阶项存在并且不是1,则去除与这个项相乘的常数
常见时间复杂度所消耗的时间从小到大依次是:
O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)
我们总是说算法的时间复杂度,但是我们也需要看算法的空间复杂度,计算公式为:S(n)=O(f(n)) n是问题的规模,f(n)为语句关于n所占存储空间的函数。