comparison paper/cbc.tex @ 24:2db27c32eaad

Add rbtree figure
author atton <atton@cr.ie.u-ryukyu.ac.jp>
date Mon, 23 Jan 2017 10:36:42 +0900
parents 925d7e02b712
children 9325a5d0a6e0
comparison
equal deleted inserted replaced
23:925d7e02b712 24:2db27c32eaad
171 \lstinputlisting[label=src:stub, caption=GearsOS における stub Meta CodeSegment] {src/stub.cbc} 171 \lstinputlisting[label=src:stub, caption=GearsOS における stub Meta CodeSegment] {src/stub.cbc}
172 172
173 % }}} 173 % }}}
174 174
175 \section{メタ計算ライブラリ akasha を用いた赤黒木の実装の検証} 175 \section{メタ計算ライブラリ akasha を用いた赤黒木の実装の検証}
176 176 現状の GearsOS に実装されているメタ計算として、非破壊赤黒木が存在する。
177 メタ計算として定義することにより、ノーマルレベルからは木のバランスを必要なく要素の挿入と探索、削除が行なえる。
178 赤黒木とは二分探索木の一種であり、木の各ノードが赤と黒の色を持っている。
179 木に対して要素の挿入や削除を行なった際、その色を用いて木のバランスを保つ。
180
181 二分探索木の条件は以下である。
182
183 \begin{itemize}
184 \item 左の子孫の値は親の値より小さい
185 \item 右の子孫の値は親の値より大きい
186 \end{itemize}
187
188 加えて、赤黒木が持つ具体的な条件は以下のものである。
189
190 \begin{itemize}
191 \item 各ノードは赤か黒の色を持つ。
192 \item ルートノードの色は黒である。
193 \item 葉ノードの色は黒である。
194 \item 赤ノードは2つの黒ノードを子として持つ(よって赤ノードが続くことは無い)。
195 \item ルートから最下位ノードへの経路に含まれる黒ノードの数はどの最下位ノードでも一定である。
196 \end{itemize}
197
198
199 数値を要素に持つ赤黒木の例を図\ref{fig:rbtree}に示す。
200 ルートノードは黒であり、赤ノードは連続していない。
201 加えて各最下位ノードへの経路に含まれる黒ノードの個数は全て2である。
202
203 \begin{figure}[htbp]
204 \begin{center}
205 \includegraphics[scale=0.5]{fig/rbtree.pdf}
206 \caption{赤黒木の例}
207 \label{fig:rbtree}
208 \end{center}
209 \end{figure}
210
211 これらの条件より、木をルートから辿った際に最も長い経路は最も短い経路の高々二倍に収まる。
212
213 GearsOS で実装されている赤黒木は特に非破壊赤黒木であり、一度構築した木構造は破壊される操作ごとに新しい木構造が生成される。
214 非破壊赤黒木の実装の基本的な戦略は、変更したいノードへのルートノードからの経路を全て複製し、変更後に新たなルートノードとする。
215 この際に変更が行なわれていない部分は変更前の木と共有する(図\ref{fig:non-destructive-rbtree})。
216 これは一度構築された木構造は破壊されないという非破壊の性質を用いたメモリ使用量の最適化である。
217
218 % TODO: rbtree