到目前为止,我主要集中在如何正确设计代码,使其尽可能易读和可维护方面。因此,我始终选择了解编程的高级细节,例如类交互,API设计等。
我从未真正发现特别有趣的算法。结果,即使我可以为自己的程序设计出一个好的设计,即使我可以为给定的问题提供解决方案,它也很少是最有效的。
有没有一种特殊的思考问题的方式可以帮助您提出尽可能有效的解决方案,或者仅仅是练习和/或记忆而已?
另外,您可以推荐哪些在线资源来教您各种有效的算法来解决不同的问题?
数据占主导 。如果围绕正确的抽象数据结构(ADT)设计程序,则通常会获得简洁的设计,算法自然遵循,并且在缺乏性能的情况下,您应该能够“插入”更高效的算法。
强大的数学和逻辑背景可以为您提供帮助,因为它可以让您以高度可视化的方式查看程序,包括函数,集合,图形,序列等之间的交互。然后,您可以决定是否需要对集合进行排序(平衡的BST,是否执行O(lg n)操作(哈希表,O(1)操作),序列需要支持哪些操作(类矢量或类列表)等。
如果您想学习一些算法,请读一本好书,例如Cormen等。并尝试实现主要数据结构:
int