2012-04-17 54 views
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 

输入到程序将键值对的arbitraty长度一样,如果输入 - k1=a,k2=b,k3=c,k8=10 - 我应该选择C4因为这是最佳匹配。

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

+1

请解释你的符号。 K和'的含义? – ccleve 2012-04-17 02:14:45

+0

每个节点的选择标准是根据我试图描述为k1 = a的键/值对定义的,其中k1是密钥的名称,'a'是值。 – Shamik 2012-04-17 02:18:39

+1

如果一个属性在某个节点上存在,那么相同的属性将为其子节点持有?根据树构建的条件,我在此树中没有看到适当的结构?它与键/值对有什么关系? – 2012-04-17 04:02:22

回答

0

我发现这样一个

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

一个可行的解决方案让我们把它叫做条件表。每列代表输入序列(k),对于不同的值组合,有一个节点被选中。该表可以考虑内存数据结构或RDBMS中的真实表。

0

看起来你的k指向目录结构,并且这个结构的叶子(每个目录只有一个叶子)就是你正在寻找的节点。您可以将此字符串作为另一个值保存在节点中。问题不明确的是k如何与例如树 有关,例如,

a->c1 
a/b/c->c4 
相关问题