Re: [問題] 環狀排列演算法

看板Prob_Solve作者 (喲)時間12年前 (2012/01/23 20:32), 編輯推噓1(102)
留言3則, 3人參與, 最新討論串2/3 (看更多)
※ 引述《EdisonX (閉上眼的魚)》之銘言: : 目的是要窮舉所有可能之環狀排列, : 一般排列 P(n,m),可用遞迴或旋轉法完成, : 但若只需環狀排列時,個數是 P(n,m)/n, : 目前小弟之作法為過程中先紀錄結果至一集合 : 再針對產生之排列去檢查集合是否重覆, : 如此不但速度慢,又吃記憶體, : 不知這問題目前是否已有演算法可產生所有環狀排列之可能? : 感謝各位! 1234這一列數字有六個間隔,如果視為環狀則有五個間隔. 加入一個數字5,則在視為環狀時, 51234 與 12345 是同一組環狀排列. 所以,在1234加入5應該產生 15234, 12534, 12354, 12345. 1只有一種環狀排列. 1,加入2,也只有一種環狀排列,由只將2放到1後面產生. 12,加入3,則是 132, 123. 產生1234的環狀排列,是在123環狀排列{123,132}中加入4. 123加入4產生 1423, 1243, 1234; 132加入4產生 1432, 1342, 1324. 所以1234的環狀排列是{1423,1243,1234,1432,1342,1324}. 這樣應該可以處理掉這個問題吧. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.231.65.98

01/23 20:55, , 1F
不如1擺第一個,剩下全排列,像上篇推文那樣...
01/23 20:55, 1F

01/23 21:23, , 2F
上面那推文我沒看懂。至少自己知道怎麼做
01/23 21:23, 2F
※ 編輯: yauhh 來自: 61.231.65.98 (01/23 21:38)

01/24 08:37, , 3F
謝謝 y 大指導,此法可正常生成無誤。
01/24 08:37, 3F
文章代碼(AID): #1F7LD81Y (Prob_Solve)
文章代碼(AID): #1F7LD81Y (Prob_Solve)