如何使用kdb中每个节点中的值表示以下树结构?
a : 4
b : 3
c : 1
d : 2
e : 7
f : 5
g : 2
我需要设置一个函数来对节点的值求和。 任何提示赞赏。
答案 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
显然,如果有必要,这些都可以包含在很好的功能中。