什么是更好的BigO log(m * n)或(m + n)?

时间:2015-05-18 14:59:14

标签: algorithm big-o

mn是2D矩阵的两个维度,使用givens Big-O的搜索算法被认为更快:

  • log(m*n)
  • (m+n)
  • log(m)*log(n)

4 个答案:

答案 0 :(得分:4)

以上简化的解释如下:

  1. O(log(m * n))相当于 O(log m + log n)

  2. O(m + n) O(log(m)* log(n))本身就是缩减形式

  3. 数字的对数小于数字。因此订单将

    O(log(m * n))< O(log(m)* log(n))< O(M + N)

    即log(m * n)效率最高。

    记住这是一个大事。如果你考虑所有可能的输出会更好。

答案 1 :(得分:3)

在特定应用程序的上下文之外,两者都不是“最佳”。请注意,O(f(x))表示算法处理大小为x的输入所花费的时间与<{em>成比例f(x),而没有指示该比例是多少。如果你有一个算法O(n)(即线性),但有一个常数乘法因子,比如10^4,第二个算法是O(n^2),但只有一个乘法系数为1,那么第二种算法对于最大10^4的问题大小会更好。如果您的实际问题域保证永远不会有大小超过10^2的输入,那么您没有理由选择第一个算法。这无疑是一个极端的例子,但重点是您需要知道您的问题域和您希望必须处理的输入,以及您正在评估的不同算法和相关成本,以便选择最佳算法你的计划。有许多现实世界的情况,在数学上选择最有效(对于极大规模的问题)算法不是正确的选择,并且实际上可能导致性能问题,因为您的输入从未大到足以实现节省理论上可行的效率。

在您的具体情况下,随着问题规模的扩大,O(log(m*n))绝对是最有效的,但如果您从未在较大问题集的领域中运营,那么其他人可能实际上是“最适合您的具体用途。

答案 2 :(得分:2)

最好的是 - log(m*n)(相当于log(m) + log(n)
然后 - log(m)*log(n)
然后 - m+n

答案 3 :(得分:2)

将第一个写为log m + log n。这明显优于m + n。它也比log(m) * log(n)好。

所以答案是log (m * n)是最好的。