Enviar búsqueda
Cargar
ナイーブツリーの入れ子集合
•
0 recomendaciones
•
975 vistas
Akura Pi
Seguir
Denunciar
Compartir
Denunciar
Compartir
1 de 42
Descargar ahora
Descargar para leer sin conexión
Recomendados
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォーク
ke-m kamekoopa
SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリー
ke-m kamekoopa
Githubサービスについて
Githubサービスについて
Akura Pi
Slide
Slide
Akura Pi
フィア・オブ・ジ・アンノウン
フィア・オブ・ジ・アンノウン
Akura Pi
ファントムファイル
ファントムファイル
Akura Pi
そもそもFloatとは
そもそもFloatとは
Akura Pi
TableViewAgent
TableViewAgent
Akura Pi
Recomendados
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォーク
ke-m kamekoopa
SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリー
ke-m kamekoopa
Githubサービスについて
Githubサービスについて
Akura Pi
Slide
Slide
Akura Pi
フィア・オブ・ジ・アンノウン
フィア・オブ・ジ・アンノウン
Akura Pi
ファントムファイル
ファントムファイル
Akura Pi
そもそもFloatとは
そもそもFloatとは
Akura Pi
TableViewAgent
TableViewAgent
Akura Pi
Metaprogramming
Metaprogramming
Akura Pi
Ns user defaults
Ns user defaults
Akura Pi
Currying
Currying
Akura Pi
Storyboard
Storyboard
Akura Pi
Mvcのすすめ
Mvcのすすめ
Akura Pi
Groovy base
Groovy base
Akura Pi
Más contenido relacionado
Más de Akura Pi
Metaprogramming
Metaprogramming
Akura Pi
Ns user defaults
Ns user defaults
Akura Pi
Currying
Currying
Akura Pi
Storyboard
Storyboard
Akura Pi
Mvcのすすめ
Mvcのすすめ
Akura Pi
Groovy base
Groovy base
Akura Pi
Más de Akura Pi
(6)
Metaprogramming
Metaprogramming
Ns user defaults
Ns user defaults
Currying
Currying
Storyboard
Storyboard
Mvcのすすめ
Mvcのすすめ
Groovy base
Groovy base
ナイーブツリーの入れ子集合
1.
ナイーブツリーの 入れ子集合 @akuraru
2.
自己紹介 • akuraru ! • iOSプログラマ • SQLはチューリング完全って聞いてた
3.
注意 • このスライドでは上が子になる図を使っています 子 親
4.
ナイーブツリー • SQLのアンチパターン • 再帰が使えれば問題ない • 使えない場合の解決策として以下がある • 経路列挙 • 入れ子集合 • 閉包テーブル ! • 詳しくはSQLアンチパターンを読んでください
5.
入れ子集合だけ詳しく説明してみる
6.
概要:入れ子集合とは • Lelt値とRight値で親子関係を示す。 • あるノードのL値はすべての子のL値より小さく、 R値はすべての子のR値より大きい • L値はR値より小さい
7.
図解 Left値とRight値を割り当てていく
8.
図解 L値: 2 L値: 1 Left値とRight値を割り当てていく
9.
図解 L値: 3 L値: 2 1 Left値とRight値を割り当てていく
10.
図解 L値: 3 R値: 4 2 1 Left値とRight値を割り当てていく
11.
図解 3 R値: 4 2 R値: 5 1 Left値とRight値を割り当てていく
12.
図解 3 4 2 5 6 1 Left値とRight値を割り当てていく
13.
図解 3 4 2 7 5 6 1 Left値とRight値を割り当てていく
14.
図解 3 4 2 7 8 5 6 1 Left値とRight値を割り当てていく
15.
図解 3 4 2 7 8 9 5 6 11 1 12 Left値とRight値を割り当てていく 10
16.
図解 3 4 2 L値すべてサブツリーの 7 8 9 5 6 11 1 12 L値より小さい Left値とRight値を割り当てていく 10
17.
図解 3 4 2 7 8 9 5 6 11 1 10 12 R値すべてサブツリーの R値より小さい Left値とRight値を割り当てていく
18.
図解 3 4 2 7 8 9 5 6 11 1 12 図をわかりやすくしてみます 10
19.
図解 3 2 4 7 5 6 1 8 9 10 11 12 数字を等間隔に配置
20.
図解 3 2 4 7 5 6 1 8 9 10 11 12 縦幅を小さくする
21.
図解 1 2 3 4 5 6 7 8 9 10 Left値を で表し、Right値を で表す 11 12
22.
図解 1 2 3 4 5 6 7 8 9 10 11 12
23.
図解 1 2 3 4 5 6 7 8 9 10 11 12 L値すべてサブツリーの R値すべてサブツリーの L値より小さい R値より小さい
24.
図解 1 2 3 4 5 6 7 8 9 L値はR値より小さい 10 11 12
25.
子孫ツリーの取得 (L値が1∼12のノード) 1 2 3 4 5 6 7 8 間にあるのが子孫 9 10 11 12
26.
根の子孫ツリーの取得 (L値が1∼12のノード) 1 2 3 4 5 6 7 8 9 10 間にあるのが子孫 2,3,6,7,9がL値のノードが子 11 12
27.
L:R=7:8の親の取得 (L値<7<R値 のノード) 1 2 3 4 5 6 7 8 9 10 11 12
28.
L:R=7:8の親の取得 (L値<7<R値 のノード) 1 2 3 4 5 6 7 8 9 10 11 12 1:12と6:9が親 そのうちL値が最大のノードが直近の親
29.
L:R=2:4 にノードを追加する 1 2 3 4 5 6 7 8 9 10 11 12 この位置(親になるノードのR値)に追加する
30.
L:R=2:4 にノードを追加する 1 2 3 4 5 6 7 8 9 10 5以上のLR値をすべて+2する 11 12
13 14
31.
L:R=2:4 にノードを追加する 1 2 3 4 5 6 7 間に挿入 8 9 10 11 12
13 14
32.
L:R=2:4 の親になるように ノードのを追加する 1 2 3 4 5 6 7 8 9 10 11 12
33.
L:R=2:4 の親になるように ノードのを追加する 1 2 3 4 5 6 7 8 9 10 11 12
13 R値+1(6)以上のLR値をすべて+2する 14
34.
L:R=2:4 の親になるように ノードのを追加する 1 2 3 4 5 6 7 8 9 10 L値以上、R値以下のLR値を すべて+1する 11 12
13 14
35.
L:R=2:4 の親になるように ノードのを追加する 1 2 3 4 5 6 7 8 9 10 L値、R値+2のノードを追加 11 12
13 14
36.
L:R=2:4 の親になるように ノードのを追加する 1 2 3 4 5 6 7 8 9 10 11 12
13 親子関係は自動的に解決される 14
37.
L:R=2:5の削除 1 2 3 4 5 6 7 8 9 10 11 12
38.
L:R=2:5の削除 1 2 3 4 5 6 7 削除する 8 9 10 11 12
39.
L:R=2:5の削除 1 2 3 4 5 6 7 8 9 10 自動的に親子関係は解決される 開いた番号はほっといても良い 11 12
40.
更新 • 削除して追加すればいいじゃん
41.
連番 • 削除すると連番でなくなる • なくすこともできるがアルゴリズムが複雑になっ て大変 • 別に連番じゃなくても問題無い • 人間が見て気持ち悪いなんて甘え
42.
まとめ • ORMとかが実際にやってくれたりするので、こ んなこと気にしてはいけない。 • 案件に対して合っている木の構造を選ぶことが 大事
Descargar ahora