排列演算法及組合演算法(C )

2021-08-10 11:59:29 字數 1474 閱讀 9892

演算法分析(遞迴方式)

template

inline

void swap(type &a, type %b)

template

void perm(type list, int k, int m)

}

1).演算法分析(遞迴方式)
/*從陣列a[0...n-1]中選取m個數的所有組合

a[0...n-1]表示候選集,n表示候選集大小,其中n>=m>0

b[0...m-1]用來儲存當前組合中的元素(這裡儲存的是元素的下標)

常量m表示乙個組合中的元素個數,初始時m=m,引數m僅用來輸出結果

*/void combination(int a, int n, int m, int b, const

int m)}}

2).演算法分析(01轉換法)

例如求5中選3的組合:

111

00//1,2,311

010//1,2,410

110//1,3,401

110//2,3,411

001//1,2,510

101//1,3,501

101//2,3,510

011//1,4,501

011//2,4,500

111//3,4,5

n個數中求出m個數的組合和排列

源**如下

// permutation and combination.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include

using

namespace

std;

/*analysis*/

/*以在n個數中選取m(0void swap(int &a, int &b)

//產生list[k:m]的所有排列;初始k等於0,m等於末標

void permuation(int a, int

list, int k, int m)

else

for (int i = k; i <= m; i++)

}/*從陣列a[0...n-1]中選取m個數的所有組合

a[0...n-1]表示候選集,n表示候選集大小,其中n>=m>0

b[0...m-1]用來儲存當前組合中的元素(這裡儲存的是元素的下標)

常量m表示乙個組合中的元素個數,初始時m=m,引數m僅用來輸出結果

*/void combination(int a, int n, int m, int b, const

int m)

}}int main()

執行測試結果如下

c 排列組合演算法

combinatorics.cs 清單 usingsystem usingsystem.collections usingsystem.data 組合數學函式集 publicclasscombinatorics returndt 連乘積函式 publicstaticintproduct intsta...

排列 組合 演算法 C

class b c list,3 console.writeline a list,0,4 對陣列進行組合操作,選取selectcount個元素進行組合 即將進行組合操作的陣列 選取的元素的個數 static void c listlsarray,int selectcount while true...

排列組合演算法

在開發的過程中很難免會到排列組合,剛開始通過for迴圈來搞定。但是對於工作了近五年的我而已,不能像 新人那樣做了。如果所要組合的集合大於40,你不可能寫40個for迴圈吧!這裡使用了數學的演算法,到底是啥演算法,高人也沒說!不過我把它的思想提公升了一下。如下 ifndef combination h...