c STL演算法與應用 一 字典序列與全排列

2021-08-22 06:16:46 字數 1112 閱讀 9218

在資料結構中,所謂的字典序列其實很簡單;就是元素根據英文本母的順序排列,就叫字典序列;比列就是乙個字典序列;

對於集合在資料結構中我們用std::set來管理和使用它,需要注意的是集合中不能有相同元素,就和高數一樣的。所以std::set中的元素必須有"

比如像這樣的乙個集合,排列順序的話有4*3*2*1=24種情況;在c++中已經有現成的std::next_permutation演算法可以實現了。它用來生成乙個序列的下乙個序列;下乙個序列是什麼意思呢?

std::set容器中字典序列是乙個沒有上乙個序列的序列,意思就是起始端,元素都是像字母大小順序一樣從左往右排的公升序排列;最後乙個序列則是每個元素都是探幽字母的降序排列,沒有下乙個排列了。中間的那些排列就都是一步步的向最後乙個排列過渡了。

由於是字典序列,所以要生成全排列,我們可以起乙個迴圈,一直取它的下乙個序列,直到沒有下乙個序列為止。

#include #include #include #include int main()

; int count = 0;

do while (std::next_permutation(range.begin(),range.end())); //沒有下乙個序列時,會返回false

return 0;

}

輸出結果如下

同時,stl也提供了前乙個序列,意思和上面相反了;如果要得到它的全排列,我們可以這樣

#include #include #include #include int main()

; int count = 0;

do while (std::prev_permutation(range.begin(),range.end())); //沒有上乙個排列返回false

return 0;

}

輸出結果如下

如果起始序列不是乙個字典公升序列或降序列的話,得到的就不是全排列了。

排列的演算法(一) 字典序演算法

從n個不同元素中取出n個元素的排列,稱為n個不同元素的全排列。可以證明,n個元素的全排列的總數是n!全排列的生成演算法就是對於給定的元素集合,用有效的方法將所有可能的全排列無重複無遺漏地列舉出來。n個不同元素的排列都可以與n個自然數1 2 n的排列一一對應,所以,這裡就以n個數字的排列為例說明排列的...

python學習之旅(一) 字典

資料結構之字典學習 參考書籍 python基礎教程 問題 字典是一種什麼型別?問題 對映是什麼結構?回答 對映是一種通過名字引用值的資料結構 字典的一些特點 1.字典中的值並沒有特殊的順序,但是都儲存在乙個特定的鍵 key 中 鍵可以是數字 字串 元組 2.字典可以通過某個特定的詞語 key 從而找...

4 字典與字典練習

python中字典 dict 的詳解 python中的字典是python的一種資料結構,它的本質是key和value以及其對應關係的一種集合,乙個key可以對應乙個多個value。合理的使用字典能給我們程式設計帶來很大的方便。字典的 key 不能變 vaues 可變 字典 是雜湊表 無序的。字典的方...