必威体育Betway必威体育官网
当前位置:首页 > IT技术

排列组合算法

时间:2019-10-16 20:13:18来源:IT技术作者:seo实验室小编阅读:86次「手机版」
 

排列组合怎么算

题目:求(1)一组数字的全排列(2)一组数字中某几个数字的组合

一、排列算法

全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。现以{1, 2, 3}为例说明如何编写全排列的递归算法。 如下图所示:

上图中,第一层S1表示第一个数分别与第1、2、3个数交换位置,如123是1和第一个数1交换,213是1和第二个数2交换,321是1和第三个数交换。第二层S2是第二个数分别与第2、3个数交换位置。则最后一层的所有叶子节点,即为全排列的所有结果。第k层中的节点Sk就是父节点中的第k个数,分别与第k、k+1...n个数交换位置。

递归算法代码

#include <stdio.h>

int n = 0;

void swap(int *a, int *b) {

int m;

m = *a;

*a = *b;

*b = m;

}

void perm(int list[], int k, int m) {

int i; 

if(k > m) { 

for(i = 0; i <= m; i++)

printf("%d ", list[i]);

printf("\n");

n++;

}

else {

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

swap(&list[k], &list[i]);

perm(list, k + 1, m);

swap(&list[k], &list[i]);

}

}

}

int main() {

int list[] = {1, 2, 3, 4, 5};

perm(list, 0, 4);

printf("total:%d\n", n); return 0;

}

二、组合算法:

组合就是从n个数中选m个数的所有组合。(n>=m)

利用递归的思想,假设从n=4,m=2,数组a{1,2,3,4},则算法思想如下图所示:

上图中,第一层S1中的节点是数组中的所有数字,第二次S2中的节点是分别从父节点的下一个位置开始。因为这个例子中m=2,所以共有2层。从第一层到第二层,深度遍历这颗树,即可得到所有组合。

递归算法代码:

#include <vector>

#include <iOStream>

using namespace std;

void Comb(int index,int begin,int len,int n,int *A,int *C);

int main(){

int A[5]={1,2,3,4,5};

int len=5,n=3;

int *C=new int[n+1];

Comb(0,0,len,n,A,C);

delete []C; return 0;

} //递归组合

void Comb(int index,int begin,int len,int n,int *A,int *C){

// index表示某个组合中的索引,begin表示从数组A中begin位置开始寻找, // len表示数组A长度,n表示组合中个数,A表示原数组,C表示组合数组  

if(index==n) {

for(int i=0;i<n;i++)

cout<<C[i]<<" ";

cout<<endl;

return;

}

for(int j=begin;j<=len-n+index;j++) {

C[index]=A[j]; Comb(index+1,j+1,len,n,A,C);

}

}

相关阅读

【华为2018年校园招聘】算法岗笔试题

我的个人微信公众号:Microstrong 微信公众号ID:MicrostrongAI 公众号介绍:Microstrong(小强)同学主要研究机器学习、深度学习、计算

排序算法:冒泡排序

冒泡排序是一种交换排序。 什么是交换排序呢? 交换排序:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序

BP神经网络的Matlab实现——人工智能算法

这几天在各大媒体上接触到了人工智能机器学习,觉得很有意思,于是开始入门最简单的机器算法——神经网络训练算法(Neural Network Tra

十大经典排序算法总结(Java语言实现)

最近在看排序算法,对此做个总结。参考文章:https://www.cnblogs.com/onepixel/articles/7674659.htmlhttps://www.cnblogs.com/guoy

遗传算法(GA)

遗传算法(Genetic Algorithm) 一个讲得很清楚的博客:非常好理解的遗传算法的例子 简单理解: 用计算机模拟人类进化,适应环境(符合条

分享到:

栏目导航

推荐阅读

热门阅读