O(logn)和O(nlogn)之间的区别

时间:2019-04-27 00:45:46

标签: big-o

我正在准备进行软件开发面试,但我一直面临着区分O(logn)和O(nLogn)之间差异的问题。任何人都可以通过一些示例向我解释或与我分享一些资源。我没有任何代码可显示。我了解O(Logn),但我不了解O(nlogn)。

1 个答案:

答案 0 :(得分:3)

将其视为O(n*log(n)),即“ log(n)次工作n次”。例如,在长度为n的排序列表中搜索元素为O(log(n))。在n个不同排序列表中搜索元素,每个长度nO(n*log(n))

请记住,O(n)是相对于某些实际数量n 定义的。这可能是列表的大小,或者是集合中不同元素的数量。因此,出现在O(...)中的每个变量都表示要进行交互以增加运行时间的事物。 O(n*m)可以写成O(n_1 + n_2 + ... + n_m),代表着同一件事:“做nm次”。

让我们举一个具体的例子mergesort。对于n个输入元素:在我们的最后一次迭代中,我们有两半输入,每个半数大小为n/2,并且对每个半数进行了排序。我们要做的就是将它们合并在一起,这需要n个操作。在倒数第二次迭代中,大小为n/4的片段(4)的数量是其两倍。对于两对大小为n/4的对中的每对,我们将其合并在一起,这需要对n/2进行一对操作(对中的每个元素一个,就像之前一样),即{{1} }两对的操作。

从这里,我们可以推断出我们的mergesort的每个级别都需要进行n合并操作。因此,big O复杂度是n乘以级别数。在最后一级,我们要合并的块的大小为n。在此之前,它是n/2,在n/4之前,依此类推。您必须将n/8除以2多少次才能得到1n。因此,我们有1个级别。因此,我们的总运行时间是log(n)log(n)个工作O(n (work per level) * log(n) (number of levels))次。