记住重要的算法,如二进制搜索

时间:2010-02-01 23:57:57

标签: algorithm

你是否记住二进制搜索/快速排序等等算法。如果是这样,你有这样的伎俩吗?

7 个答案:

答案 0 :(得分:6)

总是更好地找到理解这些算法的基本原理而不是记住它们的方法。例如 - 快速排序使用Divide and Conquer范例(这是一种解决某类问题的设计技巧)。

Wiki是解剖新主题的一个非常好的起点。您可以通过观看视频讲座深入挖掘(在Video Lectures上找到这篇关于SO的好帖子)和其他特定材料,如相关的研究论文。

制定示例还将更好地阐明算法。

我希望这会有所帮助。

欢呼声

答案 1 :(得分:6)

我不记得代码或pseucode的死记硬背,但我总是可以编写二进制搜索和快速排序,因为我知道逻辑是如何工作的。这来自于研究算法,我绝对推荐。

答案 2 :(得分:6)

我认为值得记住重要算法和数据结构背后的概念。但是对于实现方面,如果可能的话,我会争论使用库函数。当你记下算法时很容易忘记边界情况 - 如果你进行单元测试,你很可能不会想到它们。因此,即使像二进制搜索这样简单的算法也可能被打破:

  

我生动地记得Jon Bentley在CMU的第一次算法讲座,在那里他问我们所有的博士。学生写一个二进制搜索,然后在课前解剖我们的一个实现。当然它和我们的大多数实现一样都被打破了。

来自Google Research blog。文本的其余部分也是值得推荐的,但它不是关于记忆算法。

答案 3 :(得分:2)

寻求理解而不是记忆。我发现它可以帮助我通过算法的证明来获得正在发生的事情的内部运作,并且这通常被证明是良好的助记策略。

答案 4 :(得分:1)

您应该了解这些算法背后的一般原则,因为它们是编程的基础,它可以让您深入了解它们应该在何处使用。例如,你应该理解快速排序,以便理解为什么在病理情况下它可以是O(N ^ 2)。

但是,记住足够的细节绝对没有意义,能够在第一次尝试时编写这些算法的生产质量实现。这就是图书馆的用途。例如,如果您记得的是快速排序的规范3行版本,并且您不记得如何实现一个不容易找到O(N ^ 2)个案并进行排序的那个,那就没有错那个。

答案 5 :(得分:0)

我永远不会冒险记住这些 - 总是试图找到一个处理它的库函数。

答案 6 :(得分:0)

不,这就是互联网的用途。我宁愿要求页面提供那种知识,而不是让它占用更多有用的空间。