我試圖理解Batcher Sort的概念。然而,我在網上找到的大多數資源都完全集中在證明或低級僞代碼上。在查看證據之前,我想了解Batcher Sort的工作原理。有人可以給出關於Batcher Sort如何工作(特別是合併)的高層次概述,而不需要過度冗長的僞代碼(我想知道Batcher Sort背後的想法,而不是實現它)?謝謝!Batcher Merge如何在高層次上工作?
1
A
回答
1
計時器的排序是與Batcher的合併合併。
要合併兩個數組A和B,Batcher的合併將A以正向順序與B按相反順序連接,從而創建一個雙音素數組。然後它應用了Batcher的雙向排序。
巴特爾的雙聲道排序是快速排序的表親。它將數組分成兩部分,進行一些交換以確保前半部分中的元素不會比第二部分中的元素大,然後遞歸地對半部分進行排序。
如果數組可以旋轉以使其元素增加然後減小,則該數組是可調的。通過不知情的排序的零一原則,足以證明零一輸入的正確性,現在我們做出這個假設。的可能性是
0^a 1^b 0^c = 0 ... a copies ... 0 1 ... b copies ... 1 0 ... c copies ... 0 (rotate right by c positions)
和
1^a 0^b 1^c (rotate left by a positions)
其中a,b,c是非負整數。所述雙調排序第一分割此陣列中的兩個大小相等的半部A和B有幾個可能性:
A = 0^w
B = 1^x 0^y 1^z
或
A = 0^w 1^x
B = 1^y 0^z
或
A = 0^w 1^x 0^y
B = 1^z
或其它三個零和一個互換。 Batcher的見解是,通過對A [i],B [i]應用一個比較器,A是全零,B是雙音的,或者A是雙音的,而B是全1。無論如何,滿足遞歸排序的前提條件。
唯一的非平凡的情況是
A = 0^w 1^x
B = 1^y 0^z
及其補充。如果w> = y,則A,B變成
A = 0^(w+x)
B = 1^y 0^(w-y) 1^x
所以A是全零和B是雙音的。如果w < y,則
A = 0^w 1^(y-w) 0^z
B = 1^(y+z)
因此B是全部1,並且A是雙音速的。如果我們對A和B進行遞歸排序,那麼它們的連接就是已排序的數組。
相關問題
- 1. ninject如何在高層次上工作,它如何攔截對象實例?
- 2. 「.merge(實體)」如何工作?
- 3. 如何讓YTD在多個層次結構上工作
- 4. arrayformula似乎只能在頂層嵌套層次上工作
- 5. 在高層次上,我將如何構建圖像傳送帶?
- 6. merge_sort()中的merge()如何工作?
- 7. 工作項目樹層次
- 8. MERGE語句後2年以上工作
- 9. 在高層,struts2是如何工作的?我來自mvc背景
- 10. Grails排除不能在更深層次上工作
- 11. IDENTITY INSERT不MERGE工作
- 12. 提高徵求意見2層層次
- 13. 你是如何從高層次走向低層次的用例圖的?
- 14. <merge>標籤如何在內部工作
- 15. 如何在git merge commit中不失工作
- 16. 如何在整個層次
- 17. 如何在畫面層次
- 18. 如何SETF在底層工作的?
- 19. BackgroundWorker如何在底層工作?
- 20. GCM如何在網絡層中工作?
- 21. 平鋪層如何在keras中工作?
- 22. NSOperation層次結構,工作單元
- 23. 分層窗格一次後不工作
- 24. 如何設置一個多層次的git工作流程
- 25. DataContract屬性層次結構如何工作?
- 26. Android查看層次結構如何工作
- 27. 如何在DOM中創建更高層次的元素?
- 28. 如何找到哪個元素在DOM層次中更高?
- 29. impl和traits如何在較低的層面上工作?
- 30. 實際鑄件在CLR層面上如何工作?