广泛的实验 -> 基础的实验
深入的(数学)分析 -> 近似的(数学)分析
实际上, 用实际的设计语言经过仔细构造的程序可以提供表示算法的高效手段.
当构建真正的系统时可能利用更保守的程序设计风格, 要对错误进行检查并报告,
实现的程序修改起来要容易, 其他的程序员可以快速阅读和理解, 与系统其他部分
的接口友好, 并且能够方便地移植到其他环境中.
快速算法常常比蛮力算法复杂, 实现者常常宁愿接受一个慢速算法, 也不愿处理更
复杂的算法, 而当我们处理大规模问题时, 我们别无选择, 只能寻求更好的算法.
为什么有一些算法的性能目前无法被分析:
1. 也许是他们的分析导致不可解的数学问题.
2. 也许是已知的实现太复杂, 不适于详细分析.
3. 或者,最可能的也许是不能准确地表征它们遇见的输入类型.
算法分析中有哪些不可控因素?
1. 精确知道执行一条C语句到底花费多长时间是一件很难的任务(尤其是在资源共享的环境中)
2. 许多程序对输入数据十分敏感, 因而性能可能大大受到输入数据的影响.
3. 许多感兴趣的问题并没有很好地被理解, 某个数学结果可能不能用.
4. 两个程序可能根本就不能比较: 一个程序可能运行在某种输入才会更高效,而另一个在其他条件才能高效运行。
怎样利用输入数据和模型fenxi算法?
1. 假设输入是随机的,并研究程序的平均情况(average-case)下的性能;
2. 寻求伪输入,并研究程序的最坏情况(worst-case)下的性能。
平均情况可能是数学的一种理想状态,并不代表程序所使用的数据. 最坏情况可能是构造出来的异常情况, 可能永远不会出现在实际中. 我们可以比较分析结果与实验结果, 如果两者一致,women就会增加对两者的信心;如果不一致,就要通过研究它们的差别加深对算法和模型的理解.
阅读(2001) | 评论(0) | 转发(0) |