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

我有一棵像上面这样的树。这是一个不平衡的 N 子树。问题是,我需要根据某些条件选择其中一个节点。像

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,因为这是最佳匹配。

理想情况下,我正在考虑遍历树,并且对于每个节点,都有一个可以与输入集匹配的选择标准。但很快我就发现,这棵树可能非常大,Base 节点下可以有数以万计的子节点。因此,逐节点进行可能不是一个好主意。如果有办法更有效地选择节点,我很想知道。

4

2 回答 2

0

看起来您的 k 指向目录结构,并且该结构的叶子(每个目录正好有一个叶子)是您要查找的节点。您可以将此字符串作为另一个值保存在节点中。尚不清楚的问题是 k 与树的关系如何,例如

a->c1
a/b/c->c4
于 2012-04-17T05:13:33.257 回答
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 回答