Algorithm 根据输入大小找出算法中的时间步数
假设您运行一个输入大小为1000的O(logn)算法,该算法需要110 操作。当您将输入大小加倍到2000时,该算法现在需要120次操作。是什么Algorithm 根据输入大小找出算法中的时间步数,algorithm,math,Algorithm,Math,假设您运行一个输入大小为1000的O(logn)算法,该算法需要110 操作。当您将输入大小加倍到2000时,该算法现在需要120次操作。是什么 当您再次将输入大小加倍到4000时,您对所需操作数的最佳猜测?大O符号用于指示算法在最坏情况下相对于输入大小的运行时间。它不能预测实际的操作次数。它不考虑低阶项和常数因子。让f(n)作为运算次数的估计,只需将您的问题放入方程中: f(n) = c * log(n) // O(log n) algorithm f(1000) = 110 f(2000)
当您再次将输入大小加倍到4000时,您对所需操作数的最佳猜测?大O符号用于指示算法在最坏情况下相对于输入大小的运行时间。它不能预测实际的操作次数。它不考虑低阶项和常数因子。让
f(n)
作为运算次数的估计,只需将您的问题放入方程中:
f(n) = c * log(n) // O(log n) algorithm
f(1000) = 110
f(2000) = 120
f(4000) = ?
找到c
你就会找到你的答案。但当然,这只是基于给定数据和f
的限制行为的最佳猜测估计
由于多种原因,这将不是一个准确的预测:
- 大O符号只给出了算法复杂性的限制行为,而不是实际的复杂性公式
- 操作的数量可能很大程度上取决于数据的性质,而不仅仅是多重性
n
- 极限性能是在可能数据的特定情况下(通常是最坏情况)计算的
如果你想做一般化的预测,你可以继续显式地求解常数,但基于两点这样做是相当可疑的。O.O hmmmm,什么是?:OOne提示:O(logn)表示c*logn;现在解这个方程;c在两次算法运行中都保持不变。我们无法计算O(logn)算法的运算次数。O(logn)不等于logn。我们不知道常数,也不知道低阶项。@Kunal它只是一个近似值,一个数量级,而不是实际的运算次数。请注意,如果“它不能预测运算次数”,大O给出了算法运行时间的渐近上界。因此,您是对的,它没有预测任何关于确切运行时的信息。这就是为什么我在回答中说了最坏的情况。