1

1、2、3 という数字があるとします。可能なすべてのサイズのすべての可能な順列を取るために、アルゴリズムはどのように見えるでしょうか。出力:

1, 2 ,3 | 3, 2 ,1 | 2, 1 ,3 | 1, 3, 2 ... | 1, 2 | 2, 1 | 3, 1 |..... 1 | 2 | 3

通常の順列アルゴリズムを実行し、各文字数をサブ問題として入力しますか?

4

1 に答える 1

0

可能なすべてのサブセットを生成し、それらを並べ替える必要があります。

疑似コード (C++ に準拠)

generate (a[]) {
    int size = a.size;
    sort(a)
    for (i = 1; i < (1<<size); i++) {
        b[];
        for (j = 0; j < size; j++) {
            if (i&(1<<j)) {
                add a[j] to b;
            }
        }

        do {
            for (i=0 to b.size) {
                print b[i];
            }
        }while(next_permutation(b.begin(), b.end());
    }
}
于 2012-04-05T03:26:39.807 に答える