BigO log(m*n) 或 (m+n) 哪个更好?
What is better BigO log(m*n) or (m+n)?
m
和 n
是二维矩阵的两个维度,具有给定 Big-O 的搜索算法被认为更快:
log(m*n)
或
(m+n)
或
log(m)*log(n)
?
最好的是-log(m*n)
(相当于log(m) + log(n)
)
然后 - log(m)*log(n)
然后 - m+n
第一个写成log m + log n
。这明显优于m + n
。也比 log(m) * log(n)
.
好
所以答案是 log (m * n)
是最好的。
以上简化解释为:
O(log(m*n)) 等同于 O(log m + log n)
O(m+n) 和 O(log(m)*log(n)) 是简化形式本身
因为数字的对数小于数字。因此订单将是
O(log(m*n)) < O(log(m)*log(n)) < O(m+n)
即 log(m*n) 效率最高。
记住是bigO。如果你考虑所有可能的输出会更好。
两者都不 "best" 在特定应用程序的上下文之外。请记住,O(f(x))
意味着算法处理大小为 x
的输入所花费的时间是 与 f(x)
成正比的 ,但没有说明是什么比例群岛如果你有一个算法是 O(n)
(即线性),但有一个常数乘法因子,比如 10^4
,而第二个算法是 O(n^2)
,但只有一个乘法因子1
的因子,那么第二种算法对于最大 10^4
的问题规模会更好。如果保证您的实际问题域永远不会有大小超过 10^2
的输入,那么您没有理由选择第一种算法。诚然这是一个极端的例子,但关键是你需要知道你的问题领域和你期望必须处理的输入,以及你正在评估的不同算法和相关成本,以便为选择最佳算法你的程序。在许多现实世界的情况下,选择数学上最有效的(对于极其大规模的问题)算法并不是正确的选择,实际上可能会导致性能问题,因为您的输入永远不会大到足以实现节省理论上可能的效率。
在您的具体情况下,随着问题规模的增长,O(log(m*n))
绝对是最有效的,但是如果您从不在更大的问题集领域中操作,那么其他人之一实际上可能"best" 适合您的特定用途。
m
和 n
是二维矩阵的两个维度,具有给定 Big-O 的搜索算法被认为更快:
log(m*n)
或(m+n)
或log(m)*log(n)
?
最好的是-log(m*n)
(相当于log(m) + log(n)
)
然后 - log(m)*log(n)
然后 - m+n
第一个写成log m + log n
。这明显优于m + n
。也比 log(m) * log(n)
.
所以答案是 log (m * n)
是最好的。
以上简化解释为:
O(log(m*n)) 等同于 O(log m + log n)
O(m+n) 和 O(log(m)*log(n)) 是简化形式本身
因为数字的对数小于数字。因此订单将是
O(log(m*n)) < O(log(m)*log(n)) < O(m+n)
即 log(m*n) 效率最高。
记住是bigO。如果你考虑所有可能的输出会更好。
两者都不 "best" 在特定应用程序的上下文之外。请记住,O(f(x))
意味着算法处理大小为 x
的输入所花费的时间是 与 f(x)
成正比的 ,但没有说明是什么比例群岛如果你有一个算法是 O(n)
(即线性),但有一个常数乘法因子,比如 10^4
,而第二个算法是 O(n^2)
,但只有一个乘法因子1
的因子,那么第二种算法对于最大 10^4
的问题规模会更好。如果保证您的实际问题域永远不会有大小超过 10^2
的输入,那么您没有理由选择第一种算法。诚然这是一个极端的例子,但关键是你需要知道你的问题领域和你期望必须处理的输入,以及你正在评估的不同算法和相关成本,以便为选择最佳算法你的程序。在许多现实世界的情况下,选择数学上最有效的(对于极其大规模的问题)算法并不是正确的选择,实际上可能会导致性能问题,因为您的输入永远不会大到足以实现节省理论上可能的效率。
在您的具体情况下,随着问题规模的增长,O(log(m*n))
绝对是最有效的,但是如果您从不在更大的问题集领域中操作,那么其他人之一实际上可能"best" 适合您的特定用途。