今天用到了求解组合序列的算法,并用C++和OCaml做了实现。
问题描述:有数组(链表等)a,长度len,从里面取出n个元素,给出所有的取出序列。
这是排列组合问题,共有C(len,n)个序列,高中学过的。实现的流程其实比较简单,如下:
设当前位置s,则可以先取a[s],然后从余下的元素中取出n-1个元素,一起组成一个序列;
或不取a[s],从余下的元素中取出n个元素作为一个序列
迭代该过程
C++代码
#include#include using namespace std;vector > pick(int l[],int s,int e,int n){ vector > v; if(e-s+1>=n&&n>0) { vector > res1 = pick(l,s+1,e,n-1); int size=res1.size(); if(size>0) { for(int i=0;i