###前提・実現したいこと
Rubyでネットワーク計測シミュレーションのプログラムを作っています.
ある情報が得られたときに考えられるパケットロスの全パターンを出力したいのですが,
うまくいかず困っております.
###発生している問題
得られる情報は以下のようなハッシュです.
{[2, 4, 8, 9]=>1, [2, 4, 5]=>1, [2, 6, 7]=>3, [2, 6, 10, 12, 13]=>3}
keyとなる配列はリンクの識別子を示し,valueはロスしたパケットの数です.
一番右の例で言えば,リンク2,4,8,9を通過し,1つのパケットがロスしたことを表します.
つまり,このハッシュ内,全ての条件を満たす,パケットロスの組み合わせを全て取得したいということになります.
例えば,配列の添字をリンクに対応させて,全パターンの配列を出力する等.
###試したこと
おそらく連立方程式を解くことになると思うのですが,
Array#productとselectを組み合わせて,
全パターンを出力しようとしましたが,
変数の数が動的に変化するため,
断念いたしました.
#追記
can100さん,ご質問ありがとうございます.
・「全ての条件」とはどのような条件なのか?例(ハッシュ)の場合の結果例(組み合わせ)を明示すると回答えられやすいかと思います。
→上述の例では分かりにくいかもしれないので,簡単な例を挙げると,
{[2, 3]=>2, [2, 4]=>2}
の場合は,
{1=>[nil, nil, 2, 0, 0], 2=>[nil, nil, 1, 1, 1], 3=>[nil, nil, 0, 2, 2]}
のようなハッシュを返すということになります.
keyはただの識別子でvalueの配列の添字がリンクに対応しています.
つまり,{[2, 3]=>2, [2, 4]=>2}
の場合は,
リンク2でパケットロス2個,リンク3,4ではパケットロス0個.
or
リンク2,3,4でパケットロス1個ずつ.
or
リンク2でパケットロス0個,リンク3,4ではパケットロス2個.
の3パターンが出力されます.
ikedasさん,ご質問ありがとうございます.
・途中でパケットロスしているのに、そのパケットがどのリンクを通過するはずだったかは全てわかる、ということなんでしょうか。
→2分木のトポロジに対して,あるフローに沿ってパケットを全リンクにマルチキャストで通過させます.その後,各末端のポートに到着したパケット数から各リンクでのパケットロスのパターンを全て出力したいということです.