算法复杂度:
复杂度计算出来后有什么用?
估计程序能否在规定时间内处理题目指定规模的数据
ACM有时间限制1s
“规模”的举例
1.给N个数排序 规模:N
2.判断字符串P是否是字符串T的子串 规模:串的长度|P|和|T|
3.判断一个整数是否属于整数集合S 规模:|S| 要判断多少次(查询次数)
4.图中某两个点的最短路径/求连通图的最小生成树 规模:顶点数 边数
5.给一个整数集合S,问是否存在S的一个非空子集T,满足T中所有元素的和为零 规模:|S|
算法运算次算:
当代计算机1s内可做10^7左右次计算,配置好的机器可到k*10^7~10^8
在这个限制下时间复杂度一定的算法存在能处理的规模上限
复杂度 | 数量级 | 最大规模 | 复杂度 | 数量级 | 最大规模 |
O(logN) | >>10^20 | 很大 | O(N^3) | 100 | 500 |
O(N^1/2) | 10^12 | 10^14 | O(N^4) | 50 | 50 |
O(N) | 10^6 | 10^7 | O(2^N) | 20 | 20 |
O(NlogN) | 10^5 | 10^6 | O(N!) | 9 | 10 |
O(N^2) | 1000 | 2500 |
|
|
|