ビットシフトを使用して、特定の数値文字列のパワーセットを生成していました。特定の長さ、たとえば 4 に制限し、望ましくない長さのサブシーケンスを見つけないようにして実行時間を改善するにはどうすればよいでしょうか。
例: 指定された数値文字列が10292
の場合、次のサブシーケンスのみが必要です: 1029、102、109、029、0292 など (数字 4、3、2、1 のみ)。
以下は私のコードです:
scanf("%s", &str); //read numeric string
int n = strlen(str); //find size of string
// loop to find subsequences or powerset
for ( i = 1; i < ( 1 << n ); ++i ) {
string subseq;
for ( j = 0; j < n; ++j ) {
if ( i & ( 1 << j ) ) {
subseq+=str[j];
}
}
cout << subseq << endl; //print the subsequence
}