首页 文章

代表kdb中的树结构

提问于
浏览
1

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

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

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

3 回答

  • 0

    您可以尝试不同的方法 .

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

    treetable是一张具有额外属性的 table .

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

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

  • 1

    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
    
  • 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
    

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

相关问题