数据结构+算法=程序
逻辑结构:集合、线性、树、图
物理结构:
顺序、链式
算法分析:
- (渐进)时间复杂度:
基本语句的执行次数
(基本语句:执行次数与整个算法执行次数成正比的语句,通常是最内层循环的循环体)
- 非递归:找执行次数最大的基本语句放入大O;
- 递归:(迭代法)可迭代的展开方程的右边,直到没有可以迭代的项为止,这时通过对右边的和进行估算来估计方程的解http://www.cnblogs.com/python27/archive/2011/12/09/2282486.html
最好情况、最坏情况、平均情况(概率)
常见时间复杂度:
- (渐进)空间复杂度:
算法执行时
临时开辟的辅助空间
(
关于时间与空间复杂度A
)ACM的一些注意点:
- 时间复杂度:
重要的事实:当代计算机1s内可做10^7左右次计算;
配置好的机器可到k*10^7~10^8。
在这个限制下时间复杂度一定的算法存在能处理的规模上限:
- 空间复杂度:
当代32位PC上空间最大限制一般是10^7Byte≈10MB,比如你可以开几个大小为10^6的整型数组: int A[10^6]; 开更大的数组,比如A[10^7]一般会遇到Memory Limit Exceed; 即使不超内存根据前面的运算次数限制可知时间复杂度也不会好:
空间复杂度(两种常见空间溢出错误):
1、栈溢出(递归程序):
递归程序很常见;
大多数情况下你不必担心栈溢出的问题
2、在函数里面开很大的数组:
解决方案 开成全局数组