跳转至内容

软件工程师手册/生命周期/设计/选择算法

来自 Wikibooks,开放世界的开放书籍

寻找算法

[编辑 | 编辑源代码]

在许多情况下,问题在于找到或创建任何算法。以下是一些提示,可以帮助你克服算法编写障碍,找到你不知道存在的现有算法,以及找到你已经知道的算法的新方法。

打电话给朋友。
与他人面对面、通过电话或电子邮件详细解释你需要解决的问题,通常可以帮助你产生解决方案。你的朋友也可能有一个解决方案。
阅读算法教科书。
浏览或阅读算法教科书可以产生更多用于网络搜索的术语,以及可能使用此算法的领域。你可能会偶然发现答案。
在其他领域搜索。
如果你可以将你的问题表达为其他领域的问题,例如计算机图形学,那么其他资源就变得可行。
尝试新闻组。
很有可能其他人之前也遇到过这个问题。开源解决方案可能已经可用。

选择算法

[编辑 | 编辑源代码]

如果你发现不止一个合适的算法,可以使用以下想法来比较它们对你的应用程序的适用性。

先实现,再优化。
所有可用的算法都可能足够好。
性能
它在你的典型数据上如何运行?它在你的异常数据上如何运行?
易于实现
你能够多快地实现并运行此算法?
可扩展性
算法的阶数(大O表示法)是多少?它随着更多输入如何扩展?它随着更复杂的输入如何扩展?
可维护性
算法有多容易理解和维护?
多处理器兼容性
你有多个处理器可用吗?此算法是否最大化了它们的利用率?
大小
代码大小是否是一个问题?内存/缓存/文件大小是否是一个问题?

这些问题的权重对于不同的应用程序会有所不同。例如,原型可能会强调易于实现而不是其他标准。对大型数据库的搜索可能会强调性能而不是其他标准。

书籍和文章

[编辑 | 编辑源代码]
  • 《算法导论》ISBN 0262032937 由 Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest 和 Clifford Stein 合著,是一本经典的算法教科书。
华夏公益教科书