1
すべてのベクトルパーティションを効率的に生成する
ベクトルパーティションは、ベクトルを一連のベクトルに分割し、合計が元になるようにします。パーティションは次のとおりです。 [3, 1, 2] = [3, 1, 2] [3, 1, 2] = [0, 0, 1] + [0, 0, 1] + [0, 1, 0] + [1, 0, 0] + [2, 0, 0] [3, 1, 2] = [1, 1, 2] + [2, 0, 0] ここで、ベクトルの追加は要素ごとに行われます。有効なパーティションには、負の整数を持つベクトル、またはすべてゼロのベクトルは含まれません。 ここでの課題は、ターゲットベクトルが与えられたすべての可能なベクトルパーティションを生成するプログラムまたは関数を記述することです。これは比較的簡単に聞こえるかもしれません... ...しかし、ねじれがあります。入力ベクトルのサイズがLで、生成する最大パーティションの要素がM個の場合、O(L * M)を超えるメモリは使用できません。 整数がO(1)メモリを使用すると仮定できます。つまり、パーティションを生成するときに出力する必要があります。さらに、各パーティションを1回だけ出力する必要があります。たとえば、これらは同じパーティションです。 [3, 1, …