代表kdb中的树结构

时间:2014-07-25 16:43:15

标签: kdb

如何使用kdb中每个节点中的值表示以下树结构?

a    : 4
 b   : 3
  c  : 1
  d  : 2
 e   : 7
  f  : 5
   g : 2

我需要设置一个函数来对节点的值求和。 任何提示赞赏。

3 个答案:

答案 0 :(得分:1)

您可以尝试不同的方法。

例如:TreeTable:包含父列和子列的表。

treetable是一个包含其他属性的表。

首先,表的记录是分层相关的。因此,记录可以具有一个或多个子记录,这些子记录又可以具有子代。如果记录有父级,则只有一个。没有父级的记录称为根记录。没有任何子节点的记录称为叶子记录。带子项的记录称为节点记录。

以下文章解释了TreeTable。 http://archive.vector.org.uk/art10500340

答案 1 :(得分:0)

IMO取决于你打算如何“查询”树,以及你想要的东西 - 你能进一步详细说明吗?你想要子树吗?例如。如果你查询“a”它会给你“4”或整个子树(在这种情况下它是整个树)。

如果内存不是问题,或者你的树很小,你可以拥有一个嵌套的字典词典,一个在字典内部递归的函数,或者你可以将字母符号作为单个字符串的键词典:

q)d:(enlist enlist `a)!enlist 4
q)d,:(enlist `a`b)!enlist 3
q)d,:(enlist `a`b`c)!enlist 1
q)d
,`a   | 4
`a`b  | 3
`a`b`c| 1
q)d`a
4
q)d`a`b
3
q)d`a`b`c
1

答案 2 :(得分:0)

嵌套字典方法是:

q)dict.a.b.c:1
q)dict.a.b.d:2
q)dict.a.b[`]:3
q)dict.a[`]:4

q)dict.a.e.f.g:2
q)dict.a.e.f[`]:5
q)dict.a.e[`]:7

/请注意,每个节点都必须从最深的节点开始定义并向后工作到顶级节点。

/看到层次结构使用dict.a或dict.a.e等,或者更动态地使用

q)@/[dict;`a]
| 4
b| ``c`d!3 1 2
e| ``f!(7;``g!5 2)

/获取各个节点的值

q)first @/[dict;`a`e`f]
5
q)first @/[dict;`a`e`f`g]
2

/查找节点下的所有值

q){raze $[99h=type x;.z.s each x;x]}dict.a
4 3 1 2 7 5 2

q){raze $[99h=type x;.z.s each x;x]}@/[dict;`a`e]
7 5 2

/对节点

下的所有值求和
q)sum {raze $[99h=type x;.z.s each x;x]}dict.a
24

q)sum {raze $[99h=type x;.z.s each x;x]}@/[dict;`a`e]
14

显然,如果有必要,这些都可以包含在很好的功能中。