日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

全排列算法实现

發布時間:2023/11/30 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 全排列算法实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/summerxiachen/article/details/60579623

1.全排列的定義和公式:

從n個數中選取m(m<=n)個數按照一定的順序進行排成一個列,叫作從n個元素中取m個元素的一個排列。由排列的定義,顯然不同的順序是一個不同的排列。從n個元素中取m個元素的所有排列的個數,稱為排列數。從n個元素取出n個元素的一個排列,稱為一個全排列。全排列的排列數公式為n!,通過乘法原理可以得到。

2.時間復雜度:

n個數(字符、對象)的全排列一共有n!種,所以全排列算法至少時間O(n!)O(n!) 的。如果要對全排列進行輸出,那么輸出的時間要O(n?n!)O(n?n!) ,因為每一個排列都有n個數據。所以實際上,全排列算法對大型的數據是無法處理的,而一般情況下也不會要求我們去遍歷一個大型數據的全排列。

3.列出全排列的初始思想:

解決一個算法問題,我比較習慣于從基本的想法做起,我們先回顧一下我們自己是如何寫一組數的全排列的:1,3,5,9(為了方便,下面我都用數進行全排列而不是字符)。
【1,3,5,9】(第一個)
首先保持第一個不變,對【3,5,9】進行全排列。
同樣地,我們先保持3不變,對【5,9】進行全排列。
保持5不變,對9對進行全排列,由于9只有一個,它的排列只有一種:9。
故排列為【1,3,5,9】
接下來5不能以5打頭了,5,9相互交換,得到
【1,3,9,5】
此時5,9的情況都寫完了,不能以3打頭了,得到

1,5,3,9 1,5,9,3 1,9,3,5 1,9,5,3
  • 1
  • 2
  • 3
  • 4

這樣,我們就得到了1開頭的所有排列,這是我們一般的排列數生成的過程。再接著是以3、5、9打頭,得到全排列。

我們現在做這樣的一個假設,假設給定的一些序列中第一位都不相同,那么就可以認定說這些序列一定不是同一個序列,這是一個很顯然的問題。有了上面的這一條結論,我們就可以同理得到如果在第一位相同,可是第二位不同,那么在這些序列中也一定都不是同一個序列。
那么,這個問題可以這樣來看。對

T=T=【 x1,x1, x2,x3,x4,x5,........xn?1,xnx2,x3,x4,x5,........xn?1,xn】

我們獲得了在第一個位置上的所有情況之后(注:是所有的情況),對每一種情況,抽去序列TT 中的第一個位置,那么對于剩下的序列可以看成是一個全新的序列

T1=x2,x3,x4,x5,........xn?1,xnT1=【x2,x3,x4,x5,........xn?1,xn】

序列T1T1 可以認為是與之前的序列毫無關聯了。同樣的,我們可以對這個T1T1 進行與TT 相同的操作,直到TT 中只一個元素為止。這樣我們就獲得了所有的可能性。所以很顯然,這是一個遞歸算法。

第一位的所有情況:無非是將x1x1 與后面的所有數x2,x3,.......xnx2,x3,.......xn 依次都交換一次

示意圖如下:



4.全排列的非去重遞歸算法

算法思路:全排列可以看做固定前i位,對第i+1位之后的再進行全排列,比如固定第一位,后面跟著n-1位的全排列。那么解決n-1位元素的全排列就能解決n位元素的全排列了,這樣的設計很容易就能用遞歸實現。

【附代碼段:】

#include<iostream> using namespace std; int arr[5]={0,1,2,3,4}; void swap(int x,int y)//用于交換數組的兩個數 {int temp=arr[x];arr[x]=arr[y];arr[y]=temp; } int resove(int n)//遞歸函數 {if(n==5)//當嘗試對不存在的數組元素進行遞歸時,標明所有數已經排列完成,輸出。{for(int i=0;i<5;i++)cout<<arr[i]; cout<<endl;return 0;}for(int i=n;i<5;i++)//循環實現交換和之后的全排列 {//i是從n開始 i=n;swap(n,i)相當于固定當前位置,在進行下一位的排列。swap(n,i);resove(n+1);swap(n,i); }} int main() {resove(0); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

排列模板

void permutation1(char* str,int sbegin,int send) //全排列的非去重遞歸算法 { if( sbegin == send) //當 sbegin = send時輸出 { for(int i = 0;i <= send; i++) //輸出一個排列 cout << str[i]; cout << endl; } else { for(int i = sbegin; i <= send; i++) //循環實現交換和sbegin + 1之后的全排列 { swap(str[i],str[sbegin]); //把第i個和第sbegin進行交換 permutation1(str,sbegin + 1,send); swap(str[i],str[sbegin]); //【注1】交換回來 } } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18


【注1】swap(str[i],str[sbegin])//交換回來
我們來仔細推敲一下循環體里的代碼,當我們對序列進行交換之后,就將交換后的序列除去第一個元素放入到下一次遞歸中去了,遞歸完成了再進行下一次循環。這是某一次循環程序所做的工作,這里有一個問題,那就是在進入到下一次循環時,序列是被改變了。可是,如果我們要假定第一位的所有可能性的話,那么,就必須是在建立在這些序列的初始狀態一致的情況下,所以每次交換后,要還原,確保初始狀態一致。

轉載于:https://www.cnblogs.com/xuxinstyle/p/9742851.html

總結

以上是生活随笔為你收集整理的全排列算法实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 奇米影视在线播放 | 国产精品 日韩 | 综合另类| 午夜小福利 | 亚洲丝袜一区 | 公侵犯人妻中文字慕一区二区 | 男阳茎进女阳道视频大全 | 中文在线日本 | 国产污污在线观看 | 免费超碰在线观看 | 日本一区二区精品 | 青青久视频 | 久91| 韩日精品在线观看 | 激情五月综合色婷婷一区二区 | 亚洲女同在线 | 久久久精品久久久 | 日日操日日碰 | 一二三区免费视频 | 天天插天天狠天天透 | 无码无遮挡又大又爽又黄的视频 | 日韩有码视频在线 | 亚洲天堂视频网 | 日韩视频在线免费播放 | 东北少妇不带套对白 | 国产精品色在线 | 国内精品久久久久久久影视简单 | jizz亚洲女人高潮大叫 | 夜夜夜网站 | 日韩色吧 | 欧洲一二三区 | 狠狠撸在线观看 | japanese av在线 | 亚洲乱码国产乱码精品精软件 | 欧美色图五月天 | 亚洲国产无码久久 | 一区二区免费在线 | 亚洲欧美日韩精品 | 国产精品二区视频 | 国产精品69av | 亚洲国产果冻传媒av在线观看 | 中文永久免费观看 | 老色驴综合网 | 亚洲涩网 | 大乳丰满人妻中文字幕日本 | 三年中文在线观看免费观看 | 日日干日日爽 | 我们的2018在线观看免费高清 | 91精品人妻一区二区三区蜜桃2 | 日本一区二区三区视频免费看 | 亚洲熟妇无码一区二区三区导航 | 亚洲美女av网站 | 热久久91| 优优色综合 | 高潮毛片无遮挡高清免费 | 成人激情视频在线 | 人人澡人人爱 | 久久综合久久88 | av在线收看| 久久久久亚洲AV成人无码国产 | 911国产视频 | 69久久夜色精品国产69 | 日本妈妈3 | 日本a级片在线播放 | 秋霞福利视频 | 日日摸夜夜添狠狠添欧美 | 亚洲熟伦熟女新五十路熟妇 | 日日干夜夜草 | 蜜臀av夜夜澡人人爽人人 | 极品探花在线播放 | 久久人人爽人人 | 日韩久久一区二区 | 国产 第1190页 | 亚洲一区二区欧美 | 中文字幕精品视频 | 成人爱爱免费视频 | jizzjizz日本免费视频 | 欧美精品在线免费 | 欧美一级专区免费大片 | 成人性免费视频 | 午夜啪啪网站 | 91色偷偷| 草逼国产| 最新地址在线观看 | 国内老熟妇对白hdxxxx | 不卡福利视频 | 精品人伦一区二区三 | av网在线播放 | 黄色成人在线免费观看 | 久久久夜夜 | 日韩av成人在线观看 | 老司机av福利 | 国产色综合天天综合网 | 中文字幕av网 | 成人av片在线观看 | 久久色网 | 欧美一区二区三区在线视频 | 久久精品99国产国产精 | 成人香蕉视频在线观看 |