Big-O和Omega符号

时间:2017-09-09 10:04:32

标签: algorithm sorting time-complexity big-o

我正在阅读这个问题Big-O notation's definition 但我的评论声誉不到50,所以我希望有人帮助我。

我的问题是关于这句话:

  

有许多算法没有单一函数g,因此复杂度都是O(g)和Ω(g)。例如,插入排序具有O(n²)的Big-O下界(意味着您找不到小于n²的任何值)和Ω(n)的Ω上界。

对于大n,O(n²)是上限,Ω(n)是下限,或者我可能误解了? 有人能帮帮我吗?

enter image description here

2 个答案:

答案 0 :(得分:2)

  

也许我误解了?

不,你是对的。

通常,Big-O用于上限,big-Ω用于下限。

对于插入排序最坏的情况,上限是O(n 2 )。 Ω(n)是下限。

好像你在另一个答案中发现了一个错误。

答案 1 :(得分:2)

  

具有O(n²)

的Big-O下界

我真的不同意这种措辞令人困惑的方式(因为big-O本身就是一个上限),但我在这里读到的是以下内容:

Big-O是一个上限。

也就是说,f(n) ϵ O(g(n))如果|f(n)| <= k|g(n)|n趋于无穷大(by definition),则f(n) = n2为真。

所以我们假设我们有一个函数n2 ϵ O(n2)(如果我们忽略常数因素,那么插入排序的最坏情况)。我们可以说n2 ϵ O(n3),但我们也可以说n2 ϵ O(n4)n2 ϵ O(n5)g(n)或......

所以我们找到的最小n2if let dateString = dict["dateScanned"] as? String { let strTime = dateString // 9/5/2017 12:00:00 AM let formatter = DateFormatter() formatter.dateFormat = "MM/dd/yyyy HH:mm:ss" let myDate = formatter.date(from: strTime) // myDate = nil print(myDate) }

但是你所链接的答案总的来说是错误的 - 插入排序本身没有上限或下限,而是它有最佳,平均和最差的情况,它们有上限和下限。

请参阅我在那里发布的答案。