Re: [問題] array shuffle

看板Programming作者 (ephesians)時間18年前 (2007/07/20 02:58), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串8/9 (看更多)
※ 引述《BaronDavis5 (Baron Davis)》之銘言: : 我也是用這個方法,主要idea是很久以前離散數學學過的一個permutation group : 我猜應該是和前述cycle decomposition類似概念的東西 : 但是我之前把它寫出來後,發現不同長度時,permutation group的量不一定 : 比如在元素長度8時,就存在二個permutation group (註1) : 但是在長度20時,就只存在一個permutation group(皆扣掉頭尾元素) : 目前也想不出有沒有什麼方法可以找出那些沒交集permutation group... : (註1) : index 0 1 2 3 4 5 6 7 : original 1 3 5 7 2 4 6 8 : to 1 2 3 4 5 6 7 8 : permutation group (1 2 4) (3 6 5) : (2 4 1),(6 5 3) 我的想法不很像,而且稍有些降級,是O(n^2)時間複雜度. {1,3,5,7;2,4,6,8} 這個陣列,如果我先將最外圍未正確歸定位的數字做對,就是 3 _ _ {1,2,5,7;2,4,7,8} 6 意思是陣列中存在著左邊{3,5,7}與右邊{2,4,6}子陣列,右子陣列的頭要變成 左邊的頭,左子陣列的尾要變成右邊的尾;因此,2將3擠掉,7將6擠掉. 接著問題是,擠出來的3,6該擺在哪裏呢? 分別擺在原來的2,7位置嗎? 若程式這樣寫的話,得到的結果只是一個很接近答案的陣列,裏頭仍有部份凌亂. 但如果以更小步驟來想,擠出來的3應該把右邊的5往右邊擠過去, 擠出來的6則應該把左邊的4往左邊擠過去, 如果真把這推擠動作編入演算法中,時間就是O(n^2)複雜度. 其實這想法來自於較高階的想法,像俄羅斯娃娃那樣一層一層處理. 像以下陣列 {1,3,5,7,9,11;2,4,6,8,10,12} 先對調第一層子陣列, {1,[2,4,6,8,10];[3,5,7,9,11],12} 再對調第二層子陣列, {1,2,[3,5,7,9];[4,6,8,10],11,12} 再對調第三層子陣列, {1,2,3,[4,6,8];[5,7,9],10,11,12} 如此做下去,一定能得到答案. 但這做法是O(n^2). -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.160.213.154
文章代碼(AID): #16dxHpJH (Programming)
討論串 (同標題文章)
文章代碼(AID): #16dxHpJH (Programming)