std::next_permutation 實現說明
問題:
是如何實現的std::next_permutation 演算法有效嗎?變數 i、j 和 k 代表什麼,它們的值在執行過程中如何變化?
理解概念:
要理解std::next_permutation,我們可以將排列視為數字,其數字由元素表示。目標是按「升序」順序產生下一個排列,以最大限度地減少數字增加的量。
核心循環:
位於演算法有一個while 循環:
while (true) { It j = i; --i; if (*i < *j) { // ... } if (i == begin) { // ... } }
這個循環從最後一個元素向後迭代到第一個元素向後迭代元素。關鍵的見解是,當右側的所有內容都按降序排列時,我們只需要更改數字的位置。
找到最左邊的降序序列:
如果i 和j 指向的元素按升序排列,我們找到了最左邊的降序。
交換和重新排序:
當我們找到最左邊的降序序列時,我們將i 指向的數字與其右側的「下一個最大」數位交換。這個數字是透過從末尾開始迭代來識別的,當我們找到大於i的數字時停止。
交換後,右邊剩餘的數字已經按降序排列,所以我們簡單地將它們反轉以獲得下一個排列。
特定變數:
以上是「std::next_permutation」演算法如何運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!