當分區大小之比爲5:n-5或類似於1:19的東西時,你如何發現快速排序的複雜性?我不太瞭解如何在這些情況下計算算法的複雜性。如果split是5:n-5,那麼時間複雜度會是多少?
1
A
回答
4
一般來說,記住以下:
如果拆分的陣列到由一些固定的比率定義的兩個部分:b。在每個點,O-後(log n)的分裂,所述子陣列將下降到大小爲0
如果拆分的陣列分成兩片,其中一個的大小是一個常數k,將採取Θ(N/K)分割來獲得子陣列的尺寸下降至0。
現在,考慮一下quicksort在遞歸的每個級別所做的工作。在每一層,它需要按照圖層中元素的數量進行工作。如果你使用第一種方法,並且像1/20:19/20分割那樣,那麼每層最多隻有n個元素,但只有O(log n)層,因此所做的總工作將是O(n log n),這很好。
另一方面,假設您總是拉出五個元素。那麼每個步驟中的較大陣列將具有n,n - 5,n - 10,n - 15,...,10,5,0的大小。如果您計算出數學並對其進行求和,則可得出結果爲Θ (n )全部工作,這不是非常有效。
一般來說,儘量避免在快速排序中一次拆分固定數量的元素。這給了你需要擔心的退化情況。
相關問題
- 1. Collection.toArray()的時間複雜度是多少?
- 2. 如果T.Index是RandomAccessIndexType,countElements的運行時複雜度是多少?
- 3. 這段代碼的時間複雜度是多少?爲什麼?
- 4. 分時排序算法的時間複雜度是多少?
- 5. 以下是什麼時間複雜度?
- 6. 減少時間複雜度
- 7. 樹遍歷的時間複雜度是多少?
- 8. 以下代碼的時間複雜度是多少?
- 9. 爬山算法的時間複雜度是多少?
- 10. 代碼的時間複雜度是多少?
- 11. 以下循環的時間複雜度是多少
- 12. unordered_set <int> :: iterator it + n的時間複雜度是多少?
- 13. 這個函數的時間複雜度是多少?
- 14. 整個算法的時間複雜度是多少?
- 15. 這段代碼的時間複雜度是多少(來自leetcode)?
- 16. Bogosort的平均時間複雜度是多少?
- 17. 添加n個數字的時間複雜度是多少
- 18. heapify堆的時間複雜度是多少
- 19. 劃分兩個數字的時間複雜度是多少?
- 20. 這個算法的時間複雜度是多少?
- 21. 梅森扭紋機的時間複雜度是多少?
- 22. 下面的遞歸函數的時間複雜度是多少
- 23. 這個算法的時間複雜度是多少?
- 24. 這個程序的時間複雜度是多少?
- 25. list.index(obj)方法的時間複雜度是多少?
- 26. 方案中'assoc'函數的時間複雜度是多少?
- 27. std :: map的時間複雜度是多少:: map
- 28. Python中collections.Counter()的時間複雜度是多少?
- 29. Ruby中Array#uniq方法的時間複雜度是多少?
- 30. DataRow索引器的時間複雜度是多少?
你可以修復你的問題中的文字,因爲我不知道你到底在問什麼。 – gnasher729
如果您問「如果我從某個位置以外的某個位置選擇了一個元素,快速排序的複雜性是否會改變?」然後查看[快速排序#選擇數據透視](https://en.wikipedia.org/wiki/Quicksort#Choice_of_pivot) – Kevin