1. 前言
本文介紹了常用的排列組合算法,包括全排列算法,全組合算法,m個數選n個組合算法等。
2. 排列算法
常見的排列算法有:
(A)字典序法
(B)遞增進位制數法
(C)遞減進位制數法
(D)鄰位對換法
(E)遞歸法
介紹常用的兩種:
(1) 字典序法
對給定的字符集中的字符規定了一個先后關系,在此基礎上按照順序依次產生每個排列。
[例]字符集{1,2,3},較小的數字較先,這樣按字典序生成的全排列是:123,132,213,231,312,321。
生成給定全排列的下一個排列 所謂一個的下一個就是這一個與下一個之間沒有字典順序中相鄰的字符串。這就要求這一個與下一個有盡可能長的共同前綴,也即變化限制在盡可能短的后綴上。
算法思想:
設P是[1,n]的一個全排列。
P=P1P2…Pn=P1P2…Pj-1PjPj+1…Pk-1PkPk+1…Pn , j=max{i|Pi<Pi+1}, k=max{i|Pi>Pj} ,對換Pj,Pk,將Pj+1…Pk-1PjPk+1…Pn翻轉, P'= P1P2…Pj-1PkPn…Pk+1PjPk-1…Pj+1即P的下一個
例子:839647521的下一個排列.
從最右開始,找到第一個比右邊小的數字4(因為4<7,而7>5>2>1),再從最右開始,找到4右邊比4大的數字5(因為4>2>1而4<5),交換4、5,此時5右邊為7421,倒置為1247,即得下一個排列:839651247.用此方法寫出全排列的非遞歸算法如下
該方法支持數據重復,且在C++ STL中被采用。
(2) 遞歸法
設一組數p = {r1, r2, r3, … ,rn}, 全排列為perm(p),pn = p 主站蜘蛛池模板: 免费成人av | 日本全黄裸体片 | 国内成人精品2018免费看 | 免费黄色在线 | 日本午夜一区二区 | 男女免费在线观看视频 | 91精品综合久久久久久五月天 | 亚洲男人天堂网 | 欧美狠狠操| 国产精品视频一区二区三区不卡 | 免费a爱片猛猛 | 午夜网址 | 波多野结衣一区二区三区高清 | 999国产一区二区三区四区 | 成人免费毛片高清视频 | 免费看黄网址 | 免费av电影观看 | 成人欧美一区二区三区在线湿哒哒 | 欧美二区三区 | 在线免费av观看 | 欧美日韩一区免费 | 成人免费视频一区二区 | 免费在线观看av的网站 | 国产精品久久久久久一区二区三区 | 91精品国产91久久久久久久久久久久 | 伊人小视频 | 中文字幕免费看 | 国产午夜精品久久 | 久久久精品网站 | 欧美日韩综合一区 | 激情av| 日韩亚洲精品在线观看 | 成年人免费看 | 久久人人爽人人爽 | 91高清视频 | 成人午夜视频在线观看 | 三级在线视频 | 91精品国产色综合久久不卡98口 | 国产精品一区二区三区不卡 | 亚洲性片 | 欧美天堂在线观看 |