這是循序漸進的過程,我發現訂購辭書排列:該算法如何生成下一個字典順序排列的工作?
採取預先印刷排列並找到它的最右邊的字符,這比它的下一個字符小。讓我們稱這個角色爲'第一個角色'。
現在找到'第一個字符'的天花板。 「天花板」是「第一個字符」右側的最小字符,大於「第一個字符」。讓我們稱這個ceil字符爲「第二個字符」。
交換上述2個步驟中找到的兩個字符。
在原始索引'第一個字符'之後對子串(非遞減順序)進行排序。
來源:http://www.geeksforgeeks.org/lexicographic-permutations-of-string/
我已經寫了我的僞代碼,它和我即將開始編程現在它。我明白算法中發生了什麼,但我不確定它爲什麼會起作用。就像步驟2一樣,爲什麼天花板角色必須是「第一個字符」右側的最小字符,大於「第一個字符」「。我明白,如果你不這樣做,它是行不通的,但我不明白爲什麼它在你這樣做的時候起作用。
如果有人可以向我解釋爲什麼你需要在算法中的每一步,這將是偉大的,它會讓我更加舒適的開始我的代碼。
編輯:我應該提到我明白你爲什麼rearange的子成acsending秩序,尋找最小置換,有什麼我不明白的是步驟1和2,爲什麼你換天花板和第一charector
您能否澄清一下本段發生了什麼:因此,從右側開始,對於每個角色A,看起來是否正確,看是否存在較大的角色B.一旦找到一個,就用B代替A,然後把所有東西都固定在右邊。那麼,我們也需要A,否則整個字符串將不再是一個置換,所以用B代替B(所以你剛剛交換過A和B)(我們會改變它,所以它A是什麼並不重要)。 當你說用B代替A,然後把所有的東西都修復到右邊,但他們你在段落中再次交換它們? – entropy
我簡化了一下。 – Dukeling
感謝您的編輯,但我現在唯一不理解的是爲什麼你交換A和B.我理解升序的排列,以便找到最小的排列順序。如果你能用現實世界的例子來解釋交換:abcd,那就太好了。謝謝:) **編輯:**如果我沒有意義,我可以重新澄清我的問題給你。 – entropy