0
                 [BASE]
                 / \  \
                C1  C2 C3
                /\       \
               C4 C5      C6

上記のような木があります。これはバランスの取れていない N 子ツリーです。問題は、いくつかの条件に基づいてノードの 1 つを選択する必要があることです。お気に入り

Select C1 when k1 = a
Select C4 when K1 = a and K2=b and K3=C
Select C5 when k1 = a and k'=z

Select C2 when K'' = b
Select C3 when k5 = 9
Select C6 when k5=9 and k6 = 10

プログラムへの入力は、キーと値のペアの任意の長さk1=a,k2=b,k3=c,k8=10 ですC4

理想的には、ツリーをトラバースすることを考えていました。ノードごとに、入力セットと照合できる選択基準があります。しかしすぐに、このツリーは非常に巨大になる可能性があり、ベース ノードはその下に数万の子ノードを持つことができることに気付きました。そのため、ノードごとに移動することはお勧めできません。ノードをより効率的に選択する方法があれば、ぜひ知りたいです。

4

2 に答える 2

0

このような実行可能なソリューションを見つけました

----------------------------------------
|rowId|param1|param2|param3|param4|node|
----------------------------------------
|10   | a   |      |      |      | C1  |
----------------------------------------
|14   | a   | b    |  c   |      | C4  |
----------------------------------------
|18   | a   | b    |      |      | C5  |
----------------------------------------

これを条件表と呼びましょう。各列は入力系列 (k) を表し、値のさまざまな組み合わせに対して、選択するノードがあります。このテーブルは、メモリ内のデータ構造または RDBMS の実際のテーブルと考えることができます。

于 2012-04-17T16:19:37.117 に答える
0

k がディレクトリ構造を指しているように見え、この構造のリーフ (ディレクトリごとに正確に 1 つのリーフ) が探しているノードです。この文字列を別の値としてノードに保持できます。問題で明確でないのは、たとえば、k がツリーにどのように関連しているかです。

a->c1
a/b/c->c4
于 2012-04-17T05:13:33.257 に答える