[爆卦]permutation演算法是什麼?優點缺點精華區懶人包

為什麼這篇permutation演算法鄉民發文收入到精華區:因為在permutation演算法這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者sam7708909 (yett)看板Grad-ProbAsk標題[理工] 100清大 計算機科...


http://i.imgur.com/U7PGYgQ.jpg
大家好,想請問這題要怎麼寫
我卡住的地方有兩個
1. 他亂序給 perm(str, str+strlen(str)-1) 跟 perm(0,3)是一樣的意思嗎(排序陣列st
r[0]~str[3])
2. 他的輸出是 231,321,312,132,213,123要如何照個形式輸出呢?


--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 110.30.196.218
※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1483520958.A.99A.html
yupog2003: http://imgur.com/8bRNlCY 先給答案我慢慢打想法 01/04 18:04
yupog2003: swap的部份,須注意x為記憶體位址,*x才是該位址所指向 01/04 18:06
yupog2003: 的內容,我們這邊是要在陣列上面交換元素,所以應該要 01/04 18:06
yupog2003: 用*x, *y才對 01/04 18:07
yupog2003: 由題目可以看出兩兩最後一個元素是相同的 01/04 18:08
yupog2003: (231,321),(312,132),(213,123),顯然他的交換是每次 01/04 18:09
yupog2003: 先固定最後一個元素,然後遞迴下去算前面n-1個元素的 01/04 18:10
yupog2003: permutation 01/04 18:10
yupog2003: 所以permutation(start, end-1); 01/04 18:13
yupog2003: 那麼每次固定最後一個元素要怎麼挑是哪個元素呢? 01/04 18:13
yupog2003: 就是for迴圈在做的事情,想法是依序從第一個挑到 01/04 18:14
yupog2003: 倒數第二個拿來跟最後一個交換,接著permutation 01/04 18:15
yupog2003: 但是permutation結束之後不要忘了把他們交換回來,如此 01/04 18:15
yupog2003: 一來才可以接著下一輪的交換,不然會亂掉 01/04 18:16
yupog2003: 遞迴的中止條件就是當第一個元素等於最後一個元素,也 01/04 18:17
yupog2003: 就是start=end時,就該把他print出來了 01/04 18:18
yupog2003: 這樣想好了,每次遞迴都把end減1,減到end=start時就可 01/04 18:18
yupog2003: 以不用再減了 01/04 18:19
yupog2003: 這題配分只有10分又挖那麼多空格,除非剛好有看過 01/04 18:21
yupog2003: permutation的演算法,不然最後再來想這題就好 01/04 18:21
yupog2003: 另外提醒一點'\0'是terminate的符號,strlen在計算的 01/04 18:25
yupog2003: 時候不會把他算進去,以這個case來說strlen(str)會回傳 01/04 18:25
yupog2003: 3,所以應該是perm(0,2)才對 01/04 18:26
sam7708909: 嗚嗚我終於看懂了 01/04 19:44
sam7708909: 謝謝你這麼詳細的解答! 01/04 19:44
beargg0305: 這題沒有事先看過真的很難現場想出來@@ 01/04 22:07

你可能也想看看

搜尋相關網站