我正在阅读这个问题Big-O notation's definition 但我的评论声誉不到50,所以我希望有人帮助我。
我的问题是关于这句话:
有许多算法没有单一函数g,因此复杂度都是O(g)和Ω(g)。例如,插入排序具有O(n²)的Big-O下界(意味着您找不到小于n²的任何值)和Ω(n)的Ω上界。
对于大n,O(n²)是上限,Ω(n)是下限,或者我可能误解了? 有人能帮帮我吗?
答案 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)
或......
所以我们找到的最小n2
是if 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)
}
。
但是你所链接的答案总的来说是错误的 - 插入排序本身没有上限或下限,而是它有最佳,平均和最差的情况,它们有上限和下限。
请参阅我在那里发布的答案。