0

以下のコード部分を使用します

num_item = 3
for i in range(1,num_item+1):
   list(itertools.combinations(range(0,num_item), i))

組み合わせのリストを生成する

[[(0,), (1,), (2,)], [(0, 1), (0, 2), (1, 2)], [(0, 1, 2)]]

以下の例に示すように、これらの組み合わせを kvalue と kweight の 2 つの値のキーとして作成したいと思います。

key 1 : (0,)   , value 1 : kvalue = 8  kweight = 4
key 2 : (1,)   , value 2 : kvalue = 10  kweight = 5
key 3 : (2,)   , value 3 : kvalue = 15  kweight = 8
  1. 上記のデータを保存するための適切なデータ構造はありますか?

  2. (0,) を (文字列の) キーに変換するにはどうすればよいですか?

  3. 後で kweight でリストをソートする必要もありますが、python ソート関数を呼び出すことができるデータ構造を使用することは可能ですか?


編集済み:上記の例を拡張する必要があると思います。たとえば、(0,1,2) をキー 7 として保存したいとします。このキーには 2 つの値があります: kvalue = -1、kweight = 9

key 1 : (0,)   , value 1 : kvalue = 8  kweight = 4
key 2 : (1,)   , value 2 : kvalue = 10  kweight = 5
key 3 : (2,)   , value 3 : kvalue = 15  kweight = 8
key 4 : (0, 1) , value 4 : kvalue = 18  kweight = 9
key 5 : (0, 2) , value 5 : kvalue = -1  kweight = 4
key 6 : (1, 2) , value 6 : kvalue = -1  kweight = 5
key 7 : (0, 1, 2) , value 7 : kvalue = -1  kweight = 9
4

3 に答える 3

-1

基本的に、n が num_item である 2^n - 1 の数値を生成しています。したがって、ビット操作を使用して上記の結果を得ることができます。

i を 0 から 2^n - 1 まで繰り返し
ます: i のバイナリを見つけます:
各設定ビットをチェックし、そのビットの位置 (1 から開始) により、必要な組み合わせが得られます。

于 2013-06-25T11:58:50.053 に答える