软件工程师手册/生命周期/设计/选择算法
外观
< 软件工程师手册
在许多情况下,问题在于找到或创建任何算法。以下是一些提示,可以帮助你克服算法编写障碍,找到你不知道存在的现有算法,以及找到你已经知道的算法的新方法。
- 打电话给朋友。
- 与他人面对面、通过电话或电子邮件详细解释你需要解决的问题,通常可以帮助你产生解决方案。你的朋友也可能有一个解决方案。
- 阅读算法教科书。
- 浏览或阅读算法教科书可以产生更多用于网络搜索的术语,以及可能使用此算法的领域。你可能会偶然发现答案。
- 在其他领域搜索。
- 如果你可以将你的问题表达为其他领域的问题,例如计算机图形学,那么其他资源就变得可行。
- 尝试新闻组。
- 很有可能其他人之前也遇到过这个问题。开源解决方案可能已经可用。
如果你发现不止一个合适的算法,可以使用以下想法来比较它们对你的应用程序的适用性。
- 先实现,再优化。
- 所有可用的算法都可能足够好。
- 性能
- 它在你的典型数据上如何运行?它在你的异常数据上如何运行?
- 易于实现
- 你能够多快地实现并运行此算法?
- 可扩展性
- 算法的阶数(大O表示法)是多少?它随着更多输入如何扩展?它随着更复杂的输入如何扩展?
- 可维护性
- 算法有多容易理解和维护?
- 多处理器兼容性
- 你有多个处理器可用吗?此算法是否最大化了它们的利用率?
- 大小
- 代码大小是否是一个问题?内存/缓存/文件大小是否是一个问题?
这些问题的权重对于不同的应用程序会有所不同。例如,原型可能会强调易于实现而不是其他标准。对大型数据库的搜索可能会强调性能而不是其他标准。
- 《算法导论》ISBN 0262032937 由 Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest 和 Clifford Stein 合著,是一本经典的算法教科书。
- 选择正确的算法 由 Lagoudakis 等人撰写,讨论了如何选择正确的排序算法
- 选择散列算法 由 McKensie 等人撰写。
- comp.graphics.algorithms 常见问题解答 包含许多算法的链接和讨论