서브셋 생성(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진수 변환, 그레코드이다.나 안 봤어. 다음에 공부 좀 하자.