前言
编程就是只要你相信你就是你想要成为的那一个人!
其实学习数据结构的必修课就是,不是简单的调用别人编号的APi实现华丽的界面而是使用自己编程,去追求细节的完美。
也就是说,如果想让自己的编程能力有质的飞跃,就不要停留在调用现有的东西,而是去追求更完美的实现。
程序设计 = 数据结构 + 算法
算法效率的度量方法:
前期扫盲知识点;
- 事后计算
- 事前估算的方法:在计算机程序编写之前,依据统计的方发对计算程序进行估算。
经过总结我们发现一个高级语言编写的程序在计算机上运行时所消耗的时间取决于下列因素: - 算法采用的策略方案
- 编译器产生的代码量
- 问题的输入规模
- 机器执行指令的速度
先要确定的一点就是在研究算法的过程中,研究算法的复杂度,侧重的就是研究算法随着输入规模扩张增长量的一个抽象,而不是精确定位需要执行的多杀次,因为这样我能就需要考虑到编译优化的问题,,,,,
函数的渐进增长:给定两个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n>N,f(n)总是比g(n)大,那么我们就说f(n)的渐进增长快于g(n)。
关键知道执行次数 == 时间
因为当主机确定的时候CPU执行的指令的时间是确定的,那么CPU执行固定算法的时间也是确定的;
定义算法复杂度的方法:
- 使用常数1取代运行时间中所有的加法常数
- 在修改后的运行次数函数中,只保留最高阶项
- 如果高阶项存在且不是1,则取出这个项相乘常数
也就是说在算法复杂度中:3n^2 = n^2 - 得到的结果就是大O阶。
常用的时间复杂度所耗费的时间工大到小的排序依次为:
O(1)<O(log(n))<O(n)<O(nlog(n))<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)