2017-10-12 3 views
-1

申し訳ありませんが重複していますが、鉱山と一致する回答が見つかりませんでした。どのように各要素がm個の異なる値のうちの1つを含むことができるサイズnのすべてのベクトルを生成するのですか?

私は3つの値を含むベクトルを持っているとします。私はこのベクトルから指定された長さの別のベクトルを構築したい。たとえば、長さがn=3で、ベクトルに次の値が含まれているとします。0 1 2

0 0 0 
0 0 1 
0 0 2 
0 1 0 
0 1 1 
0 1 2 
0 2 0 
0 2 1 
0 2 2 
1 0 0 
1 0 1 
1 0 2 
1 1 0 
1 1 1 
1 1 2 
1 2 0 
1 2 1 
1 2 2 
2 0 0 
2 0 1 
2 0 2 
2 1 0 
2 1 1 
2 1 2 
2 2 0 
2 2 1 
2 2 2 

私の現在の実装では、単にnに基づいてループのために構築し、期待される出力を生成します。次のように私は期待して出力されます。私は、入力ベクトルに異なる長さと異なる値を持つ出力ベクトルを構築できるようにしたいと考えています。

next_permutationを使用して実装を検討しましたが、残念ながら長さの値を渡しても機能しないようです。

このケースで使用できる時間と複雑さのアルゴリズムはありますか?繰り返しますが、これはn=17まで、そしてサイズは6のベクトルで計算しているかもしれません。

n=3の実装は以下のとおりです。ここで、encは入力を含むベクトルです。

vector<vector<int> > combo_3(vector<double>enc,int bw){ 
    vector<vector<int> > possibles; 
    for (unsigned int inner=0;inner<enc.size();inner++){ 
     for (unsigned int inner1=0;inner1<enc.size();inner1++){ 
      for (unsigned int inner2=0;inner2<enc.size();inner2++){ 
       cout<<inner<<" "<<inner1<<" "<<inner2<<endl; 
       unsigned int arr[]={inner,inner1,inner2}; 
       vector<int>current(arr,arr+sizeof(arr)/sizeof(arr[0])); 
       possibles.push_back(current); 
       current.clear(); 
    } 
    } 
} 
    return possibles; 
} 
+3

「0 0 0」は「0 1 2」の順列ではありません。この事実に照らせば、あなたの質問はあまり意味がありません。 –

+0

私はあなたが実際に置き換え可能なすべてのサンプリングを探していると思います。 – miradulo

+0

'n = 17'までと' 6 'の周りのsizeofベクトルはどういう意味ですか?あなたのベクトルのサイズは 'n'ではありませんか? – Rafiwui

答えて

0

何をしているのかは簡単です。あなたの出力ベクトルを数字のリスト(ベクトルのベクトル)のリストと考えてください。各桁はmの異なる値のいずれかを持つ場合があります。mは入力ベクトルのサイズです。

これはパーミュテーション世代ではありません。すべての順列を生成するということは、あなたが探しているものではない入力ベクトルの可能なすべての順序を生成することを意味します。

これをカウントの問題と考えると、答えがより明確になることがあります。たとえば、5桁の10進数をすべてどのように生成しますか?その場合、入力ベクトルのサイズは10で、出力リストの各ベクトルの長さは5です。

関連する問題