1

いくつかのスコアを持つMap<Integer, List<Float>>位置を表す があり、位置ごとのスコアのすべての可能な組み合わせ (基本的には元のマップからの各リストの外積) を に生成したいと考えていList<List<Float>>ます。それでは、次のマップがあるとしましょう。

{ 1 => [0.1f, 0.2f], 2 => [0.3f, 0.4f] }

float のリストの次のリストを取得します。

[[0.1f, 0.3f], [0.1f, 0.4f], [0.2f, 0.3f], [0.2f, 0.4f]]

再帰を使用する必要があると確信していますが、それについてどのように進めればよいかわかりません..

4

3 に答える 3

1

コード化する再帰アルゴリズムがある場合はいつでも、それを設計するのに役立つ帰納的定義が必要です。

基本ケース: {} ↦ []
帰納的ステップ: M ↦ L ⇒ ( M ∪ { n ↦ S } ) ↦ L × S

S の各要素について、それを L のすべてのリストの末尾に追加し、結果のリストを出力に追加します。

List<List<Float>> llfNext = new LinkedList<List<Float>>();
for (float f : entEach.getValue())
    for (List<Float> lfEach : llfInductive)
        llfNext.add(copyAndAddToEnd(lfEach, f));
return llfNext;

ここからは非常に簡単なはずです。その後、非再帰的にして、実行中のコピーの一部を減らすことができます。

于 2012-05-17T18:17:05.683 に答える
0
List<List<Float>> finalList = new ArrayList<List<Float>>();
int pointsCounter = 0;
for (Integer key : map.keys()) {
    List<Float> scoresList = map.get(key);
    boolean firstValue = true;
    for (Float score : scoresList) {
        if (firstValue) {
            finalList.add(new ArrayList<Float>());
            firstValue = false;
        }
        finalList.get(pointsCounter).add(score);
    }
    pointsCounter++;
}
于 2012-05-17T18:25:04.200 に答える