Mercurial > hg > Papers > 2017 > atton-master
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 |