서브셋 생성(bit, 귀속, 서브셋 생성)

2083 단어 学习笔记
#include 
#include 
#include 
#include 
using namespace std;
void enumSubSetByRecurion(const string& strInput)
{

}
void enumSubSetByAnd(const string& strInput)
{
	const size_t length = strInput.length();
	size_t totalCount = static_cast(pow(static_cast(2),static_cast(length)));
	cout << "strInput Length\t" << length << endl;
	cout << "strInput totalCount\t" << totalCount << endl;
	vector vecStr;
	vecStr.resize(totalCount);
	int iIndex = 0;
	for(int i = 0;i < strInput.length();i++)
	{
		int iPre = iIndex;
		for(int iAdd = 0;iAdd < iPre;iAdd++){
			vecStr[iIndex++] = vecStr[iAdd] + strInput[i];
		}
		vecStr[iIndex++] = strInput.substr(i,1);
	}
	cout << "Count\t" << iIndex << endl;
	for(auto & strTemp : vecStr)
		cout << strTemp << endl;
}
void enumSubSetByBit(const string& strInput)
{
	//  , 10 , 
	// gray code  
	int length = strInput.length();
	size_t totalCount = pow(2,length);
	vector result = {};
	for(size_t i = 1;i < totalCount; i ++)
	{
		string temp = {};
		for(int j = 0;j < length;j ++)
		{
			if(i & (1<

주어진 집합의 서브집합을 일일이 열거합니다. 여기서 세 가지 방법을 소개합니다.
1. bit
2. 반복 추가
3. 귀속
 
인터넷에 많은 글을 보면 이 책이 있는 것 같다. 세 가지 방법을 전문적으로 소개했다. Skiena는 제14장 조합 알고리즘 부분에서 서브집합을 생성하는 세 가지 방식을 소개했다. 그것이 바로 정렬에 따라 생성, 2진수 변환, 그레코드이다.나 안 봤어. 다음에 공부 좀 하자.
 
 
 

좋은 웹페이지 즐겨찾기