【问题标题】:Help In Learning Algorithm Basics [closed]帮助学习算法基础[关闭]
【发布时间】:2011-04-30 10:25:05
【问题描述】:

我正在学习算法,需要你们帮助我。我是初学者,如果我的问题不清楚,请原谅我。在学习的同时,我看到了 NlogN、N^2 等类似的东西。

在使用这些符号检查不同算法的效率/性能时,我并不是很清楚。我非常了解对数,但它们用于检查算法性能的方式让我很生气。

我在问是否有人可以向我指出一个解释此类符号的教程,以便我可以很好地掌握基础知识。我真的很想了解他们并愿意学习。

感谢您的帮助。

卡普。

【问题讨论】:

标签: algorithm complexity-theory big-o


【解决方案1】:

您所描述的称为big O notationHere 是一个解释它的指南。

需要注意的重要一点是符号忽略了无关紧要的术语。如果您的算法需要 6X^2 + 3X + 12 秒来执行,其中 X 是正在处理的数据点的数量,只需将其称为 O(X^2),因为当 X 变大时,6 不会真正产生影响, 3 和 12 也不会。

【讨论】:

  • 家长提供的精彩链接。记住排序算法:如何对无序集进行排序?如果你不聪明地做,你最终会得到 O(n^2),如果使用更复杂的算法,你可以在 O(log n) 内完成。
【解决方案2】:

购买Introduction to Algorithms。您可以以实惠的价格获得二手版本。

和/或查看这些来自麻省理工学院的great online video lectures 围绕上述书籍构建。

通过观看这些讲座,您将了解一些算法如何具有对数时间复杂度,而另一些具有指数时间复杂度等。

【讨论】:

    【解决方案3】:

    这些只是函数,接收输入中的项目数,并返回完成算法所需的操作数(通常它们返回算法的限制因素,而不是特定函数.. 更多信息 - @ 987654321@)。

    【讨论】:

    • 感谢您的回复。我很感激。
    【解决方案4】:

    http://www.amazon.com/Structures-Algorithm-Analysis-Allen-Weiss/dp/0805390529 是最好的书籍之一,它将以出色的方式解释算法。

    --干杯

    【讨论】:

      【解决方案5】:

      您在谈论 Big-O 表示法。这种表示法是一种将算法的最坏可能运行时间描述为其输入大小的函数的一种方式。

      O(n^2) 表示如果输入的大小为 n (例如其中有 n 个元素的列表),算法将需要 n^2 次通过才能执行最坏的情况(Big-O 是最坏的情况;还有其他表示最佳情况和平均情况的符号)。如果你有一个 for 循环嵌套在另一个循环中,并且都从 1 运行到 n,就会发生这种情况。

      O(nlogn) 是类似的。当您遍历树结构(例如二叉树)时,通常会发生这种情况。

      请注意,您可能永远不会看到像 O(3n) 这样的东西,因为对于非常大的 n 值,常数 3 并不重要,所以它会被简化为 O(n)。

      许多其他人已经发布了很好的阅读链接。

      【讨论】: