kdb에서 각 노드의 값으로 어떻게 아래 트리 구조를 표현할 수 있습니까?kdb에서 트리 구조 표현하기
a : 4
b : 3
c : 1
d : 2
e : 7
f : 5
g : 2
노드에서 값을 합산하는 기능을 설정해야합니다. 감사의 말씀.
kdb에서 각 노드의 값으로 어떻게 아래 트리 구조를 표현할 수 있습니까?kdb에서 트리 구조 표현하기
a : 4
b : 3
c : 1
d : 2
e : 7
f : 5
g : 2
노드에서 값을 합산하는 기능을 설정해야합니다. 감사의 말씀.
시도 할 수있는 방법이 다양합니다.
예 : TreeTable : 부모 및 자식 열이있는 테이블.
treetable은 추가 속성이있는 테이블입니다.
먼저 테이블의 레코드는 계층 적으로 관련됩니다. 따라서 레코드는 하나 이상의 자식 레코드를 가질 수 있으며, 자식 레코드는 차례대로 자식 레코드를 가질 수 있습니다. 레코드에 부모가 있으면 레코드가 정확히 하나 있습니다. 상위가없는 레코드를 루트 레코드라고합니다. 자녀가없는 레코드를 리프 레코드라고합니다. 하위가있는 레코드를 노드 레코드라고합니다.
다음은 TreeTable에 대한 설명입니다. http://archive.vector.org.uk/art10500340
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
중첩-사전 접근 방식은 다음과 같습니다
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
분명히 이들 모두는 필요한 경우 멋진 멋진 기능으로 포장 될 수 있습니다.
한 가지 방법이이 백서에서 논의됩니다. http://archive.vector.org.uk/art10500340 섹션 2.Trees 확인 – Rahul