最佳渐近符号
Best asymptotic notation
如果一个算法最坏情况运行时间是6n^4 + 2,它最好情况运行时间是67+6n^3。什么是最合适的渐近符号。
我正在尝试学习大 O 表示法。
是 Θ(n^2) 吗?
本质上,Big-Oh 时间复杂度分析是针对最佳情况、最坏情况或算法执行的平均操作数定义的。 “是 Θ(n^2) 吗?”那么,您应该指定要查找的案例?或者你的意思是说所有情况下都是 Θ(n^2)
吗? (这显然是不正确的)
话虽如此,我们知道算法在最坏的情况下会执行 6n^4 + 2
操作。所以它有 Θ(n^4)
最坏情况的复杂性。我在这里使用了 theta,因为我确切地知道要执行多少操作。在最好的情况下,它执行 67+ 6n^3
操作。所以它在最佳情况下具有 Θ(n^3)
时间复杂度。
平均时间复杂度如何?好吧,只要我没有提供输入的概率分布,我就不知道。可能 best-case-like 场景很少发生,平均时间复杂度为 Θ(n^4)
,反之亦然。因此,只要我们没有提供输入概率分布、算法本身或递归关系,我们就不能直接从 worst/best 个案例时间复杂度中推断出平均时间复杂度。 (好吧,如果最佳和最差时间复杂度相同,那么我们当然可以得出平均时间复杂度等于它们)
如果提供算法,我们可以计算平均时间复杂度,对输入做出一些非常基本的假设(如等概率分布等)。例如在线性搜索中,最好的情况是 O(1)
。最坏的情况是 O(n)
。假设等概率分布,您可以使用期望公式得出平均时间复杂度为 O(n)
的结论。 [(输入 i 的概率)*(该输入的操作次数)]
最后,您的平均时间复杂度不能是 Θ(n^2)
,因为您的最佳和最差时间复杂度比二次方差。等待这个算法平均执行 n^2 次操作是没有意义的,而它在最好的情况下执行 n^3 次操作。
最好情况的时间复杂度 <= 平均时间复杂度 <= 最坏情况的时间复杂度
如果一个算法最坏情况运行时间是6n^4 + 2,它最好情况运行时间是67+6n^3。什么是最合适的渐近符号。
我正在尝试学习大 O 表示法。
是 Θ(n^2) 吗?
本质上,Big-Oh 时间复杂度分析是针对最佳情况、最坏情况或算法执行的平均操作数定义的。 “是 Θ(n^2) 吗?”那么,您应该指定要查找的案例?或者你的意思是说所有情况下都是 Θ(n^2)
吗? (这显然是不正确的)
话虽如此,我们知道算法在最坏的情况下会执行 6n^4 + 2
操作。所以它有 Θ(n^4)
最坏情况的复杂性。我在这里使用了 theta,因为我确切地知道要执行多少操作。在最好的情况下,它执行 67+ 6n^3
操作。所以它在最佳情况下具有 Θ(n^3)
时间复杂度。
平均时间复杂度如何?好吧,只要我没有提供输入的概率分布,我就不知道。可能 best-case-like 场景很少发生,平均时间复杂度为 Θ(n^4)
,反之亦然。因此,只要我们没有提供输入概率分布、算法本身或递归关系,我们就不能直接从 worst/best 个案例时间复杂度中推断出平均时间复杂度。 (好吧,如果最佳和最差时间复杂度相同,那么我们当然可以得出平均时间复杂度等于它们)
如果提供算法,我们可以计算平均时间复杂度,对输入做出一些非常基本的假设(如等概率分布等)。例如在线性搜索中,最好的情况是 O(1)
。最坏的情况是 O(n)
。假设等概率分布,您可以使用期望公式得出平均时间复杂度为 O(n)
的结论。 [(输入 i 的概率)*(该输入的操作次数)]
最后,您的平均时间复杂度不能是 Θ(n^2)
,因为您的最佳和最差时间复杂度比二次方差。等待这个算法平均执行 n^2 次操作是没有意义的,而它在最好的情况下执行 n^3 次操作。
最好情况的时间复杂度 <= 平均时间复杂度 <= 最坏情况的时间复杂度