算法就是一系列的计算步骤,用来将输入数据转换成输出结果,一个输入序列称为该排序问题的一个实例(instance)。对于一项特定的应用来说,如何选择最佳的排序算法主要考虑如下问题:
- 考虑待排序的数据项数;
- 这些数据项已经排好序的程度;
- 对数据项取值的可能限制;
- 打算采用的存储设备的类型。
算法可以解决哪些类型的问题:
- 生物问题,DNA排序及分析;
- 搜索引擎,海量数据管理和操纵;
- 电子商务,加密和数字签名技术;
- 商业应用,稀有资源分配和调度;
- 实际问题,两地路径最短,路由最短。
效率是不同算法问题产生的根本,随着问题规模的增长,差距会变的不可跨越。算法就像计算机硬件一样,是一种技术,总体的系统性能不仅依赖于选择快速的硬件,还依赖于选择有效的算法。
对于下表中的每一个函数f(n)和时间t,求出可以在时间t内被求解出来的问题的最大规模n。假设解决该问题的算法解决该问题需要f(n)毫秒。
1秒 | 1分钟 | 1小时 | 1天 | 1个月 | 1年 | 1个世纪 | |
lgn | 2^1000 | 正无穷大 | 正无穷大 | 正无穷大 | 正无穷大 | 正无穷大 | 正无穷大 |
Sqrt(n) | 10^6 | 4.29E+9 | 1.76E+13 | 9.01E+15 | |||
n | 10^3 | 6E+4 | 3.6E+6 | 8.64E+8 | |||
nlgn | 141 | 4896 | 204095 | 3.94E+6 | |||
n^2 | 32 | 245 | 1898 | 9296 | |||
n^3 | 11 | 40 | 154 | 443 | |||
2^n | 10 | 16 | 22 | 27 | |||
n! | 7 | 9 | 10 | 12 |
命运负责洗牌,但是玩牌的是我们自己!