使用快速排序和二分搜索的集合差异的复杂性是什么?

时间:2013-07-02 14:09:59

标签: algorithm complexity-theory

我们有两个集合A,B,我们想要计算集合差异A - B,我们将使用具有平均复杂度O(n * log n)的快速排序对B的第一个元素进行排序,并且在我们从A中搜索每个元素之后B具有复杂度为O(log n)的二元搜索,整个集合差异算法描述了哪些复杂性将具有?如果我们认为我们使用qucksort和二分搜索。我尝试按照以下方式使用此算法计算集合差异的复杂度:O(n * log n)+ O(log n)= O(n * log n + log n)= O(log n *(n + 1)) = O((n + 1)* log n)。这是对的吗?

2 个答案:

答案 0 :(得分:1)

首先,常量并不真正计入面向多项式的O符号,该多项式的增长速度比常量快,因此1将归n所有,这意味着O((n + 1)* log n)只是O(n * log n)。

现在重要的问题 - 假设A有m个元素,你需要进行m二进制搜索,每个都有复杂度O(log n)。总的来说,复杂性应该是O(n * log n)+ O(m * log n)= O((n + m)* log n)。

答案 1 :(得分:0)

O (n * log n) + O (log n) = O (n * log n)

http://en.wikipedia.org/wiki/Big_O_notation#Properties

  

如果一个函数可能被n中的多项式所限制,则n倾向于   无穷大,人们可以忽略多项式的低阶项。