1

“为给定的应用程序设计正确的算法是一项艰巨的工作。它需要一个重大的创造性行为,解决一个问题并从以太中提取解决方案。这比接受别人的想法并修改或调整它要困难得多让它变得更好一点。你在算法设计中可以做出的选择空间是巨大的,足以让你有足够的自由来上吊。”

我研究了几种基本的算法设计技术,如分而治之、动态规划、贪心、回溯等。

但是当我遇到某些编程问题时,我总是不知道应该应用什么原则。我想掌握算法的设计。

那么任何人都可以提出一个最好的地方来深入了解算法设计的原则......

4

3 回答 3

1

你不能仅仅通过阅读书籍来学习算法设计。当然,书籍可以提供帮助。另一个答案中建议的编程珍珠之类的书很棒,因为它们会给您带来工作问题。每个问题都迫使您思考如何解决特定类型的问题。

这个想法是让您自己接触许多不同类型的问题及其解决方案。通过这样做,您将学习如何检查问题并查看它是否与您已经看到的问题有任何共同之处。在这方面,这与您在数学课上学习如何解决“文字问题”的方式并没有太大的不同。诚然,大多数算法问题比必须弄清楚两列火车在轨道上的哪个位置相撞更复杂,但你学习如何解决问题的方法是相同的。你学习用于解决简单问题的常用技术,然后结合这些技术来解决更复杂的问题,等等。

阅读、练习、起泡、冲洗、重复。

除了诸如Programming Pearls 之类的书籍之外,还有一些在线网站发布了不同的编程挑战,您可以在上面进行测试。如果您的朋友或同事也对算法感兴趣,这会有所帮助,因为您可以相互交流想法并提出有趣的挑战,或者一起提出问题的解决方案。

我有没有提到它需要练习?

“掌握”任何事情都需要时间。很长时间。一个流行的理论是,要成为任何事情的专家都需要 10,000 小时的练习。对于特定的努力存在一些争议,但总的来说这是真的。你不会在一夜之间掌握任何东西。你必须学习。并练习。并阅读其他人所做的事情。多学习,多练习。

于 2013-09-24T15:10:06.280 回答
1

我推荐 Jon Bentley 的 Programming Pearls,第 2 版。他谈了很多算法设计技术,并提供了现实世界问题的例子,它们是如何解决的,以及不同的算法如何影响运行时。

在整本书中,您将学习算法设计技术、程序验证方法以确保您的算法是正确的,并且您还学习了一些关于数据结构的知识。这是一本非常好的书,我推荐给任何想掌握算法的人。去亚马逊阅读评论:http: //www.amazon.com/Programming-Pearls-2nd-Edition-Bentley/dp/0201657880

您可以在这里查看本书的一些内容:http: //netlib.bell-labs.com/cm/cs/pearls/

享受!

于 2013-09-24T10:16:59.740 回答
0

Kleinbeg Tardos是一本关于算法设计的好书。每种设计技术都取决于您要解决的问题。做算法书中的练习并从老师那里得到反馈是非常重要的。

如果存在局部最优选择而带来全局最优解,则可以使用贪心算法。

如果问题具有最优子结构,则可以使用动态规划。

于 2013-09-24T08:28:35.573 回答