Big o 如何将时间分析转换为O(n)?

Big o 如何将时间分析转换为O(n)?,big-o,Big O,这里是计算机科学新手,有个问题我回答起来有点困难 我有一个树遍历算法,它的时间性能是O(bm),其中b是分支因子,m是树的最大深度。我想知道人们是如何把它转换成标准的渐近时间分析的(即O(n),O(n^2),等等) 同样的问题,我有一个不同的算法,就是O(b^m) 我仔细阅读了我的课本,没有找到一个关于这个问题的明确答案。渐近时间分析通常与输入(n)有关,但我不确定在这种情况下n是什么意思。我想是m吧 一般来说,当您有多个输入时,您会怎么做 谢谢您的时间。您应该从构建重复开始。例如,让我们考虑二

这里是计算机科学新手,有个问题我回答起来有点困难

我有一个树遍历算法,它的时间性能是O(bm),其中b是分支因子,m是树的最大深度。我想知道人们是如何把它转换成标准的渐近时间分析的(即O(n),O(n^2),等等)

同样的问题,我有一个不同的算法,就是O(b^m)

我仔细阅读了我的课本,没有找到一个关于这个问题的明确答案。渐近时间分析通常与输入(n)有关,但我不确定在这种情况下n是什么意思。我想是m吧

一般来说,当您有多个输入时,您会怎么做


谢谢您的时间。

您应该从构建重复开始。例如,让我们考虑二进制搜索。其重现性为:T(n)=T(n/2)+c。当你解决它时,你会得到

T(n) = T(n/2) + c
     = T(n/4) + c + c
     = T(n/8) + c + c + c
     ...
     = T(n/2^k) + kc
当n=2^k或k=log_2(n)时,可解决重复性问题。因此,复杂性是c.log_2(n)

现在,让我们看看另一种情况,输入被分成5部分,结果以线性时间组合。这种复发将是不可避免的

T(n) = 5T(n/5) + n
     = 5^2T(n/5^2) + 2n
     ...
     = 5^kT(n/5^k) + kn
当n=5^k或k=log_5(n)时,此操作将停止。因此,替换上面的,复杂性是:n.log_5(n)


我想从现在起你应该可以接受了。

非常感谢你周到的回答,但我还是感到困惑。在我的特殊情况下,n是什么?n是分支因子还是最大深度?我知道如何为排序算法找到大O,因为n显然是要排序的项目数,但我不知道如何为遍历算法找到大O,其中n不清楚。这就是我想要澄清的。n是你正在操作的元素数。在第一种情况下(二进制搜索),n是正在搜索的元素数。在第二种情况下,n再次是元素的数量,您将其划分为5个元素,并通过进一步细分为5个元素对这些组进行操作。您的大Oh分析将取决于进行分割的时间(常数)、对分割部分进行操作的时间以及合并结果的时间。在第一个例子中,分成两部分的时间是恒定的。您只查看两个分区中的一个(因此是T(n/2)),并且没有额外的时间来组合结果。在第二个示例中,您有五个分区,每个分区1/5,给出5T(n/5),然后遍历每个分区来组合结果(5.n/5>n)。您正在查找树的深度(log_5(n))以及分而治之的时间(每个级别n)。因此,分而治之的时间(在每个级别)乘以级别数(树的深度)就得到了总时间。希望有帮助。