演算法筆記03--歸納法之生成排列
生成排列
生成排列即對n個數的全排列,顯然時間複雜度是n指數級的O(n^k)
假定可以生成n-1個數的所有排列,那麼就可以擴充套件生成1,2,.....,n的排列。
例如1的生成排列即1
1,2的生成排列即1,2和2,1
1,2,3的生成排列在1,2的生成排列基礎上可以這樣得到:
1在第1位,2,3的生成排列
2在第1位,1,3的生成排列
3在第1位,2,3的生成排列
那麼推廣到1,2,...,n的生成排列即:
1在第1位,2,...,n的生成排列
2在第2位,1,3,...n的生成排列
....
n在第1位,2,...,n的生成排列
先考慮數字1在第一位,那麼對2,,...,n生成排列,
思路:
1.對0到n-1位置上的數字生成排列,具體做法 從1,,..,n中按序拿出數字i(i從1開始到n)與位置j(j從0開始到n-1)上的數字交換,再對位置j+1到n-1位置上的數字生成排列。
2.對j(j從1開始)到n-1位置上的數字生成排列,具體做法 從2,,..,n中按序拿出數字i(從2開始)與位置j上的數字交換,再對位置j+1到n-1位置上的數字生成排列。
3.......當j = n時,生成一個排列並列印
4. 回溯上一步,拿出數字i+1與j上的數字交換,並對j+1後面的序列生成排序
5. 直到i>n,結束
#include <iostream>
using namespace std;
void permutation(int* array, int iLength, int iCurStep)
{
if(iLength == iCurStep) //若固定位置指標指到最後一個數字列印陣列
{
for(int i=0;i<iLength;i++)
{
cout<<array[i]<<" ";
}
cout<<"\n";
return ;
}
else
{
for(int i = iCurStep ; i<iLength ; i++) //i為從固定指標位置到最後一個數字位置的掃描指標
{
swap(array[iCurStep],array[i]); //固定從iCurStep起每個位置上的數字到iCurStep上
permutation(array,iLength,iCurStep+1);
swap(array[i],array[iCurStep]); //復原array
}
}
}
int main(){
int array[] = {1,2,3,4};
permutation(array, 4, 0);
}
相關文章
- 演算法筆記01--歸納法之整數冪演算法筆記
- 演算法筆記02--歸納法之多項式求值(Horner規則)演算法筆記
- SG學習筆記之RMAN簡單歸納筆記
- 常用Markdown語法歸納
- html標記歸納HTML
- 機器學習筆記之Logistic迴歸演算法機器學習筆記演算法
- 從“數學歸納法”到理解“遞迴演算法”!遞迴演算法
- Dijkstra演算法的思想和數學歸納法演算法
- 【組合數學】組合數學簡介 ( 組合思想 2 : 數學歸納法 | 數學歸納法推廣 | 多重歸納思想 )
- 工具歸納
- 學習筆記歸納 2010-9-5.10-17筆記
- 微軟程式歸納新技術:元程式歸納微軟
- CSS 核心概念歸納之定位和 BFCCSS
- Kotlin知識歸納(一) —— 基礎語法Kotlin
- 決策樹歸納分類演算法理解演算法
- 機器學習-學習筆記(一) --> (假設空間 & 版本空間)及 歸納偏好機器學習筆記
- 【軟考中級筆記】軟體設計師易混知識點歸納筆記
- 生成隨機排列隨機
- Node模板引擎學習(2)--Jade語法歸納
- 演算法筆記04--分治法之尋找最大最小元素演算法筆記
- 機器學習演算法:Logistic迴歸學習筆記機器學習演算法筆記
- oracle段管理歸納Oracle
- 【筆記】歸併排序筆記排序
- 【演算法學習筆記】生成樹問題探究演算法筆記
- Spring歸納小結Spring
- JavaScript核心概念歸納整理JavaScript
- [心得]git使用技巧歸納Git
- 機器學習(課堂筆記)Day04:線性迴歸法機器學習筆記
- 機器學習筆記之Kmeans演算法機器學習筆記演算法
- 私房庫視訊學習筆記-小清新BBS系統開發技術歸納二筆記
- 組合數學筆記-排列與組合筆記
- Redux概念之四: reducer(歸納函式)與純函式Redux函式
- 全排列演算法演算法
- 演算法——全排列演算法
- UVa11054 Gergovia的酒交易(數學歸納法)Go
- 演算法之歸併排序演算法排序
- 機器學習演算法筆記之8:聚類演算法機器學習演算法筆記聚類
- 生成{1,2,...,n}的排列的演算法-組合數學演算法