23. 下列敘述何者正確?
(A)合併排序(merge sort)演算法的時間複雜度是 θ(n2)
(B)合併排序(merge sort)演算法的時間複雜度是 θ(nlgn)
(C)插入排序(insertion sort)演算法的時間複雜度是 θ(n2)
(D)插入排序(insertion sort)演算法的時間複雜度是 θ(nlgn)
統計: A(2), B(66), C(24), D(9), E(0) #3123054
詳解 (共 2 筆)
好的,這題是關於合併排序(Merge Sort)和插入排序(Insertion Sort)這兩種排序演算法的時間複雜度。我們需要判斷哪個敘述是正確的。
時間複雜度通常用大 O (O)、大 Omega (Ω) 和大 Theta (Θ) 符號來表示。
- O 表示漸近上界。
- Ω 表示漸近下界。
- Θ 表示漸近緊界(表示演算法的執行時間在最差和最佳情況下都與 g(n) 同階,或者在所有情況下都與 g(n) 同階)。
我們來看看這兩種排序演算法的典型時間複雜度:
-
合併排序(Merge Sort):
- 合併排序使用分而治之的策略,不論輸入資料的初始狀態如何,它的遞迴分解和合併步驟所花的時間都大致相同。
- 合併排序在最佳情況、平均情況和最差情況下的時間複雜度都是 Θ(nlogn)。lgn 通常表示 log2n。
-
插入排序(Insertion Sort):
- 插入排序的效能受到輸入資料初始順序的影響。
- 最佳情況:當輸入陣列已經 sorted 時,只需要線性遍歷一次,時間複雜度是 Θ(n)。
- 最差情況:當輸入陣列是逆序排列時,需要進行最多的比較和移動,時間複雜度是 Θ(n2)。
- 平均情況:時間複雜度是 Θ(n2)。
現在我們來分析選項:
(A) 合併排序(merge sort)演算法的時間複雜度是 Θ(n2)
- 這是錯誤的。合併排序的時間複雜度是 Θ(nlogn)。
(B) 合併排序(merge sort)演算法的時間複雜度是 Θ(nlgn)
- 這是正確的。合併排序在所有情況下的時間複雜度都是 Θ(nlogn)。
(C) 插入排序(insertion sort)演算法的時間複雜度是 Θ(n2)
- 這個敘述對於插入排序的最差情況和平均情況是正確的。然而,由於插入排序在最佳情況下是 Θ(n),所以嚴格來說,用單一的 Θ(n2) 來描述插入排序所有情況下的時間複雜度是不完全精確的。但在某些語境下,如果指的是主要的(如最差或平均)情況,也可能會這樣表示。
(D) 插入排序(insertion sort)演算法的時間複雜度是 Θ(nlgn)
- 這是錯誤的。插入排序的最差和平均情況時間複雜度是 Θ(n2),最佳情況是 Θ(n)。
比較選項 (B) 和 (C)。選項 (B) 關於合併排序的敘述是完全精確且正確的,合併排序在所有情況下都是 Θ(nlogn)。選項 (C) 關於插入排序的敘述,雖然對最差和平均情況是正確的,但由於最佳情況是 Θ(n),用單一的 Θ(n2) 來概括所有情況可能不夠嚴謹。
在這種題目中,如果有一個選項提供了在該符號下(這裡是 Θ)普遍成立的敘述,而其他選項有例外或不夠精確,那麼普遍成立的敘述通常是正確答案。
因此,敘述 (B) 是最準確和無歧義的正確敘述。
答案是 (B) 合併排序(merge sort)演算法的時間複雜度是 Θ(nlgn)。