“为给定的应用程序设计正确的算法是一项艰巨的任务。它需要一个重大的创造性行为,解决问题并从以太中解决问题。这比采取其他人的想法并修改它更困难或者调整它以使它更好一些。你可以在算法设计中做出的选择空间是巨大的,足以让你有足够的自由来悬挂自己“。
我研究了几种基本的算法,如分而治之,动态编程,贪婪,回溯等。
但是当我遇到某些编程问题时,我总是无法认识到适用的原则。我想掌握算法的设计。
所以任何人都可以建议一个最好的地方来深入理解算法设计的原理......
答案 0 :(得分:1)
我建议编辑珍珠,第2版,Jon Bentley。他谈了很多算法设计技术,并提供了现实世界问题的例子,它们是如何解决的,以及不同的算法如何影响运行时。
在本书中,您将学习算法设计技术,程序验证方法以确保算法正确,并且您还可以了解一些数据结构。这本书非常好,我推荐给任何想要掌握算法的人。去阅读亚马逊的评论:http://www.amazon.com/Programming-Pearls-2nd-Edition-Bentley/dp/0201657880
您可以在此处查看本书的一些内容:http://netlib.bell-labs.com/cm/cs/pearls/
享受!
答案 1 :(得分:1)
您无法通过阅读书籍来学习算法设计。当然,书籍可以提供帮助。像另一个答案中建议的 Programming Pearls 这样的书很棒,因为它们会给你带来问题。每个问题都会迫使您思考如何解决特定类型的问题。
我们的想法是让您了解许多不同类型的问题及其解决方案。通过这样做,您将学习如何检查问题,看看它是否与您已经看到的问题有任何共同之处。在这方面,它与你学习如何解决单词问题的方式并不完全不同。在数学课上。当然,大多数算法问题比必须弄清楚两列火车将在轨道上碰撞的地方更复杂,但你学习如何解决问题的方式是相同的。您将学习用于解决简单问题的常用技术,然后将这些技术结合起来解决更复杂的问题等。
阅读,练习,泡沫,冲洗,重复。
除了 Programming Pearls 等书籍之外,还有一些在线网站可以发布您可以自行测试的不同编程挑战。如果您有对算法感兴趣的朋友或同事,这会有所帮助,因为您可以互相反对意见并提出有趣的挑战,或者共同努力解决问题。
我是否提到需要练习?
"掌握"什么需要时间。很长时间。一个流行的理论是,需要10,000小时的练习才能成为任何专家。对于特定的努力,有一些争议,但总的来说它是真的。你不能在一夜之间掌握任何东西。你必须学习。并且练习。并阅读别人的所作所为。再研究一下,再练习一些。
答案 2 :(得分:0)
关于算法设计的好书是Kleinbeg Tardos。每种设计技巧都取决于您要解决的问题。在算法书中进行练习非常重要,并得到老师的反馈。
如果存在局部最优选择taht带来全局最优解决方案,您可以使用贪婪算法。
如果问题具有最佳子结构,则可以使用动态编程。