我们有两个集合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)。这是对的吗?
答案 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倾向于 无穷大,人们可以忽略多项式的低阶项。