首页 > 其他 > 详细

Enumerate Combination C(k, n) in a bitset

时间:2014-08-01 09:19:21      阅读:375      评论:0      收藏:0      [点我收藏+]

Suppose n<=32, we can enumerate C(k, n), with bits representing absence or presence, in the following way:

#include <iostream>
#include <vector>
#include <bitset>
using namespace std;

bitset<32> getComb(const vector<int> &comb) {
	bitset<32> bitcombs;
	for (int i=0; i<comb.size(); ++i) bitcombs.set(comb[i], true);
	return bitcombs;
}

bool nextComb(vector<int> &comb, int n) {
	int k = comb.size(), i = k - 1;
	++comb[i];
	while (i>=1 && comb[i]>=n-k+1+i) ++comb[--i];
	if (comb[0] > n-k) return false; 
	for (++i; i<k; ++i) comb[i] = comb[i-1] + 1;
	return true;
}

int main() {
	int n = 3, k = 2;
	vector<int> comb(k);
	for (int i=0; i<k; ++i) comb[i] = i;
	do {
		cout<<getComb(comb).to_ulong()<<endl;
	} while (nextComb(comb, n));
	return 0;
}


The algorithms works like this when k=4, n=5:

01111->10111->11011->11101->11110

So, could you find the pattern? 



Enumerate Combination C(k, n) in a bitset,布布扣,bubuko.com

Enumerate Combination C(k, n) in a bitset

原文:http://blog.csdn.net/jsc0218/article/details/38330587

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!