私は次の階層を持っています:
- A
- X : [1, 2, 3]
- Y : [4, 5]
- Z : [10, 11]
- B
- X : [6, 7]
- Y : [8]
そして、私が欲しいのは、次のクエリで次の結果が得られるようにすることです。
get(A) ==> [1,2,3,4,5,10,11]
get(A,Y) ==> [4,5]
get(B) ==> [6,7,8]
get(B,X) ==> [6,7]
これまでのところ、それは簡単なようです。Pythonでdefaultdict(lambda:defaultdict(list))になり得るDictionary>を使用することで、これを実現できます。ただし、より一般的にして別のレベル、または別の2つのレベルを設定する必要がある場合はどうなりますか?何かのようなもの :
- A
- X
- i : [1]
- ii : [2,3]
- Y
- i : [4, 5]
- Z
- ii : [10, 11]
- B
- X
- ii : [6]
- iii : [7]
- Y
- i : [8]
この例では、最初の階層は、最後のレベルが親にマージされる2番目の階層の「投影」です。したがって、最初の階層に対するすべてのクエリで同じ結果が得られるはずです。
新しいレベルのいくつかのサンプルクエリ:
get(B, X, ii) ==> [6]
get(B,X) ==> [6,7] (same query and result as before)
データはリーフノードにのみ存在することに注意してください。したがって、挿入するには、パス全体を指定する必要があります。
insert(A, X, i, 20)
これは、データ構造のコンストラクターでツリーの深さを指定できることも意味します。
編集:私は深さの検証が必要であることに気づきました:
- 挿入操作:パス全体を指定する必要があり、len(path)はdepthと等しくなければなりません
- Get操作:構造の深さよりも「深い」パスは許可されていません