2014-07-25 2 views
1

kdb에서 각 노드의 값으로 어떻게 아래 트리 구조를 표현할 수 있습니까?kdb에서 트리 구조 표현하기

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

노드에서 값을 합산하는 기능을 설정해야합니다. 감사의 말씀.

+0

한 가지 방법이이 백서에서 논의됩니다. http://archive.vector.org.uk/art10500340 섹션 2.Trees 확인 – Rahul

답변

1

시도 할 수있는 방법이 다양합니다.

예 : TreeTable : 부모 및 자식 열이있는 테이블.

treetable은 추가 속성이있는 테이블입니다.

먼저 테이블의 레코드는 계층 적으로 관련됩니다. 따라서 레코드는 하나 이상의 자식 레코드를 가질 수 있으며, 자식 레코드는 차례대로 자식 레코드를 가질 수 있습니다. 레코드에 부모가 있으면 레코드가 정확히 하나 있습니다. 상위가없는 레코드를 루트 레코드라고합니다. 자녀가없는 레코드를 리프 레코드라고합니다. 하위가있는 레코드를 노드 레코드라고합니다.

다음은 TreeTable에 대한 설명입니다. http://archive.vector.org.uk/art10500340

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 
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.ae 등, 또는 좀 더 동적으로 사용하는

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 

분명히 이들 모두는 필요한 경우 멋진 멋진 기능으로 포장 될 수 있습니다.