難道有人請澄清A-sort(不是asort())的運行方式,它使用(a,b)樹來對部分排序的序列進行排序?A-sort如何工作?
3
A
回答
10
算法本身非常簡單 - 基本上你可以在樹中插入所有元素,然後遍歷樹來按順序讀取元素。
要獲得幾乎已經排序序列更好的性能,它採用了以下修改:
- 樹必須與的(A,B)樹,有
O(1)
攤銷插入再平衡時間。 - 在樹中對同一級別的節點的兄弟姐妹鏈接(在整個樹)
要利用O(1)
插入的時候,你就必須迅速找到下一個元素所屬的地方,假設序列幾乎是排序的(所以它不會遠離前一個元素插入的位置)。這是如下大致完成:
- 你開始在插入
- 你檢查下一個元素不屬於此節點或該節點的任何樹的一個元素;如果沒有,你看兄弟姐妹(假設新元素是小,因此這將是左兄弟)
- 如果兄弟姐妹的值仍然過大,你去了一個水平,如果新的元素重複
- 屬於兄弟姐妹的子樹,你從那裏做一個正常的搜索
- 如果新的元素屬於兄弟姐妹和這個節點之間,你去到最左邊的孩子並重復搜索直到找到適當的子樹
這樣,你可以遍歷a^k
這棵樹的元素在k
的步驟,因此,它會花費你可以在O(log(distance(current, previous))
時間找到適合新元素的位置。給定攤銷O(1)
重新平衡,你幾乎排序序列的時間比O(n log n)
好,同時保持O(n log n)
最壞的情況。
+0
謝謝,這非常有幫助。 – Inos 2012-02-05 23:27:47
相關問題
- 1. PHP的asort不能正常工作?
- 2. 爲什麼多維數組ASORT工作?
- 3. 與ASORT時間()排序數組不能正常工作
- 4. 需要ASORT功能
- 5. PHP ASORT,重新分配鍵
- 6. PHP ASORT陣列錯誤
- 7. PHP數組ASORT問題
- 8. PHP排序問題,arsort vs asort + array_reverse
- 9. ASORT PHP陣列,並保持在頂部
- 10. Ajax如果不工作。如何工作?
- 11. 如何工作
- 12. `===`如何工作?
- 13. 如何工作?
- 14. 如何工作?
- 15. 如何:(){:| :& } ;:工作
- 16. hgearman工人如何工作?
- 17. PHP如何移動數組的子集來做類似asort的事情?
- 18. 如何在工作中安排工作
- 19. 工作目錄是如何工作的?
- 20. 如何工作正在工作
- 21. set_error_handler不工作我想如何工作
- 22. Haskell的工作方式如何工作:
- 23. Linux工作隊列如何工作?
- 24. Netty - 工作線程如何工作
- 25. WebDriver操作如何工作
- 26. 如何工作作曲家?
- 27. Collections.binarySearch如何工作?
- 28. Range如何工作?
- 29. searchvim如何工作?
- 30. sendmsg如何工作?
您能提供一個鏈接到A-sort的定義嗎? – templatetypedef 2012-02-05 22:56:00
@templatetypedef奇怪的是,我一直沒能在網上找到任何有關此類信息。 – Inos 2012-02-05 23:22:19