エッジのない要素 R iのグラフを考えてみましょう。次のようにエッジを追加できるようになりました。
- R a →R bの間に有向辺を追加し、商 R b /R aで注釈を付けます。
たとえば、エッジ R 1 →R 3を描くことができます。この場合、R 1 /R 3 = P3*P4/P1を掛けるコストがかかります。
これをすべてのノードに対して行うと、|R| が得られます。2 つのエッジ。
中間結果のみを使用した場合は、最小スパニング ツリー アルゴリズムを使用してこれを解決できます。MST アルゴリズムは、エッジの数が線形に非常に近いと思います (逆アッカーマンの係数で、 よりも遅くなりますlog(log(log(...log(n)...)))
)。http://www.akira.ruc.dk/~keld/teaching/algoritmedesign_f04/Artikler/07/Karger95.pdfしたがって、この基本的なアルゴリズムは |R| 2回。
ただし、中間結果のみを使用すると、真に最適な答えを得ることができなくなります。なぜなら、より良いパフォーマンスを実現するために、何もないところから引き出す「即興」表現を使用できるからです。たとえば、次のシナリオを検討できます。
R1 = {P2, P3, P4, P5}
R2 = {P1, P3, P4, P5}
R3 = {P1, P2, P4, P5}
R4 = {P1, P2, P3, P5}
R5 = {P1, P2, P3, P4}
最適な解決策は、 を計算してからP1*P2*P3*P4*P5
P iで割り、9 回の操作を行うことです。上記の方法では、R1=P2*P3*P4*P5 のようなことしか実行できず、毎回乗算と除算を実行して、R1→R2、R2→R3、R3→R4、R4→R5、11 回の演算が行われます。(除算がなければ、9 つの演算もある: b=P1*P2 c=b*P3 r5=c*P4 r4=c*P5, d=P4*P5, r3=b*d, e= P3*d, r1=e*P2, r2=e*P1. 分割が必要な状況を作ることは可能だと思いますが、それを見つけることができないようです. 見つけられない場合は、これは実際には単純な多項式時間の問題です。)
この方法を「即席表現」法と呼びます。即席式を計算することを選択した場合 (最初に単一の沈没コスト)、これを使用することを選択した場合、エッジをトラバースするための将来のすべての計算のコストが削減されます(なぜなら、いくつの即席式を使用するかを選択できる可能性があるためです)。使用する)。
これにより、非常にマイナーな補足事項が得られます。
Theorem:
You should have at least one intermediate expression of each
length up to the maximum size of any R.
Proof (induction):
To build up a product of size N, you will need to do
have a product of size N-1.
この定理に注目すると、上記は少し間違っていることがわかります。最適な解決策は、 を覚えてP1*P2*P3
計算P1*P2*P3*P4
することP1*P2*P3*P4*P5
でした。R5
次に、無料で取得できます(R4
別の手段を使用して乗算を 1 回行うだけで、残念ながら以前と同じコストになります)、合計コストが 9 から 8 に削減されます。これにより、http://en.wikipedia. org/wiki/Floyd%E2%80%93Warshall_algorithmと任意のエッジを使用すると、非常に長い時間の後に最適なソリューションが得られる可能性があります。
とにかく、そのようなシステムをどのようにソリューションに組み込むのでしょうか? MST アルゴリズムが台無しになるため、ノードを追加することはできません。即席式 E による乗算または除算によって一部の P が累乗 p よりも大きくならないエッジごとに (たとえば、p=2 の場合、 のような積を作成する中間の即席式は許可されますP1 * P4^2 / P3
が、のようなものは許可されませんP2^3
)、その乗算と除算を実行します。 2 つの新しいエッジを作成します。(これを複数回行うか、将来的に行う可能性があります。) また、エッジのすべてのサブセットに対してこれを行い、上記のようにメモ化します。MST アルゴリズムを使用する場合、この方法のコストは、エッジの数が大幅に増加することです。そのため、おそらく (|R| + #newedges) 2 = (|R|^|P|) 2最悪の場合、最適な答えを見つけるのにかかる時間が大幅に長くなる可能性があります。
したがって、推測として、より一般的な問題は NP 困難であるように思われます。そうでない場合は、誰かチャイムを鳴らしてください。ただし、使用する便利な即興表現を推測するためにヒューリスティックを使用することもできます。たとえば、R の「大規模な」サブセットに「高密度の共通 P が含まれている」場合は、すべての共通 P の積であるトリックノードを生成できます。R のサブセットに見られるすべての「一般的な P の大規模/密な塊」に対してこれを行うと、MST を実行すると、より一般的な検索を行わなくても、わずかに良い答えが得られる可能性があります。階層クラスタリング アルゴリズムなどのアルゴリズムを実行して、このような塊を検出することもできます。
(補足: ラティスに関する数学をこの問題に適用することもできます。これは、各セットをビット ベクトルと見なすことができ、これらが一緒になってラティスの基礎を形成するためです。)