我正在努力尋找有效的算法來計算排列的秩,反之亦然(給定排名的排列)。有人可以提供一些建議嗎?置換秩算法
置換秩算法
回答
你有沒有重複元素的數組?
如果有只有獨特的元素,以下遞歸計算X[m:n]
秩爲長度n-m+1
的置換:
秩(X,M:N)= RankOfElement(X [M],從零開始N)
兩個Rank
和RankOfElement
是(從0開始): - :X(M)+排名(X,第(m + 1 N)[m×n個)*階乘。
基本上,Rank(permutation) = Rank(first permutation starting with first letter of permutation) + Rank(permutation with first letter deleted)
,例如,對於字符串EDCBA
這意味着Rank(EDCBA) = Rank(EABCD) + Rank(DCBA)
。
這可以通過改變第一項被擴展到非唯一案件:
秩(X,M:N)=秩(X,(M + 1):N)+Σ在(Y∈X [M:N],Y < X [M])的組合的數量的{X [M:N]} - {Y}。
編輯
我剛纔看到你的評論。漂亮的圖形!正確的你想要的是樹遍歷。
請注意您的排列中的每個位置在樹中的具體級別如何?從根到樹中的葉節點的每條路徑都是可能的排列。
所以這意味着你的'等級'有一定的靈活性。你可以定義它。只要在樹中順序遍歷所需的任何類型(inorder,preorder,postorder,DFS,BFS),就可以讓您在每個葉節點直行時增加葉節點的編號。
所以,只要選擇遍歷和排列的排名,無論你發現什麼最自然或方便您的應用程序。如果你不能選擇,請詢問/ dev/random你應該使用哪個遍歷。
END EDIT
那麼首先它必須被認爲是類似的基座的轉換。每個排列都在一個點上(它是排名)。想想二進制。在n個字符上計算2個字母排列的有效算法是什麼?只要分配等級,你就有了排列。
同樣的事情適用於其他大小的字母。很顯然的事情是,如果你的位置有不同大小的字母比較複雜,但你仍然可以做組合數學:
total possible = pi(|a|_i) for all i in positions
|a|_i alphabet size at position i
and assuming all |a|_i are equal to b you have
rank of permutation = sigma(b**i * a_i)
a_i is actual alphabet character chosen at position i.
So over the 5 alphabet (ABCDE)
The rank of AAAAA = 0 (or 1)
The rank of EEEED = 5**6 - 2
然後擺脫秩排列只使用一個基數公式:我好像記得:
a_i = (P % b**(i+1) - P & (b**i))/(b**i)
如果您從這個組合和基數的角度思考它,即使在更復雜的情況下也不會出錯。只要你想要的級別,並將其轉換爲適合您的字母表的基礎。你可能會對Mixed Radix Conversion on Wikipedia, here感興趣
- 1. 迭代器在置換價值秩序
- 2. 秩和分數計算
- 3. 頁面置換算法 - LRU
- 4. 相互置換算法
- 5. C#中的置換算法
- 6. 是否有算法將LAPACK置換變爲真實的置換?
- 7. 用Laravel 4計算關係和秩序?
- 8. 秩序的NSMutableArray通過計算距離
- 9. Verhoeff算法的正確置換週期
- 10. Knuth置換算法奇怪的行爲
- 11. 置換算法檢查帶限制
- 12. Javascript重疊,設置J秩序的秩序
- 13. 幫我做一個算法來確定一個矩陣的秩
- 14. 如何修改Bresenham的線路算法以保持秩序?
- 15. 計算2 * 2矩陣秩最快的方法是什麼?
- 16. 自定義搜索索引算法「... WHERE字狀的relevace‘AB%’秩序」
- 17. 使用NSE語法計算爲多個列總秩
- 18. 繪製道路的地圖城市之間有秩算法
- 19. 存在算法來計算沒有分支的位矩陣的秩?
- 20. 替換算法
- 21. 轉換,括號,-mosaic和秩序
- 22. 秩序
- 23. 頁切換算法
- 24. 轉換算法,C#
- 25. 串換位算法
- 26. 在python中替換置換的遞歸函數算法
- 27. JOIN語法和秩序多個表
- 28. Shopify API,無法創造秩序
- 29. 無法獲取標籤秩序中NSPopover
- 30. 算法 - 合併多個名單,導致獨特的名單和保持秩序
這裏http://stackoverflow.com/a/8958309/312172我做了一個圖形,說明問題,並給出了一種解決方案。如果您查看右側的「相關」問題列表,您會發現許多重複項。 – 2012-02-19 11:46:12