Upload
masayuki-nii
View
158
Download
3
Embed Size (px)
Citation preview
順序記録に対する問題点•問題が発生する場合•順序の手がかりになるフィールドがない場合•例えば、ユーザが順序を決めるような場合•一般的な方法•数値の番号を利用した場合、挿入時に順番の数値を更新する必要がある•リンクリスト形式の場合、2つのレコードの順序比較でもリストをたどる
必要がある
順番 メモ1 レンタルDVD返却2 プリンタの修理3 B5用紙の購入4 山田君に電話連絡5 問合せメール対応
中間にデータを挿入する場合、「順番」フィールドの管理が複数のレコードに及ぶ
3
順序の記録手法
•記録手法への要求•データに順位を与えるためのラベルへを付与する•ラベルを元に、比較やソートができれば良い•データベースやフレームワークで利用できる•実現できれば…•レコードを挿入した場合、そのレコードにラベルをつけるだけで他のレコードを変更しない方法が有効
•効率化、マルチユーザ、O/Rマッピングによるフレームワークのキャッシュ等で、よりシンプルに順序を記録できる
4
VLEIコードの解釈
•VLEIコード•Variable Length Endless Insertable code)•東京工業大学の横田先生を中心にXMLのラベル付けに関する論文がある •順序を記録するための2進数によるラベル•あるラベルより前のラベルは0を続ける、後は1を続ける•2分木として表現可能で、ノードが1つ1つのラベルに対応•末尾に連続してレコードを追加するような場合などで、桁数が急速に増大する
5
バイナリ表現=2分木
•ラベルは2分木のノードのどれかとなる•集合論的には { 0, φ, 1 } の集合の直積•中間ラベルを求める問題•部分木の間順走査で得られるノードのどれか•一般には短いものを使うといいと思うかもしれない•だが、実験してみると、「いちばん長いもの」でも大して変わらない
000
00
001
0
010
01
011
ɸ
100
10
101
1
110
11
111
7
問題点と解決手法
•コード生成の規則として次の手法を提案•隣接ノードの場合、延長したノードから採用•隣接しないノードの場合、桁が長いものにいちばん近いノードを採用•特定のレコードの直後に連続挿入する場合の比較•XとYがあり、Xの直後にレコードを連続追加した場合、A~Dのノードが割り当てられる
1
110
11 1101
VLEIの場合 改良手法の場合
11001
X
AY
B
C
D
1100
1
110
11
X
A
Y
BC
D
110011000
110000
8
延長手法の一提案•隣接ノードの中間を求める場合の延長ノードを一般化•本来延長する方向=AとBの中間であれば、Bに対して0を付加•さらに、本来の方向にf個延長し、逆方向にe個分延長する•先頭と末端に追加する場合•末端に追加する場合に最後のラベルが1のみで構成されている場合•1を f+1 個追加し、0をe個追加する•先頭に追加する場合に最初のラベルが0のみで構成されている場合 •0を f+1 個追加し、1をe個追加する
A
B
f e
e + f
10
順序記録手法の実験結果
•500レコード生成•ランダムに30、連続して20レコードを生成。これを10回繰り返す
•20回の平均値•e=0, f=0と比較•一部の条件では、平均桁数、平均最大桁数は減少する
!"!# $!"!# %!"!# &!"!# '!"!# (!!"!#
)*!+,*!#
,*!#
,*(#
,*$#
,*-#
,*%#
!"!# $!"!# %!"!# &!"!# '!"!# (!!"!#
)*!+,*!#
,*!#
,*(#
,*$#
,*-#
,*%#
!"!# $!"!# %!"!# &!"!# '!"!# (!!"!#
,*!#
,*(#
,*$#
,*-#
,*%#
f=0
f=1
f=2
平均桁数平均最大桁数
130.2
A
B
f e
e + f
11
記録のためのコード化
•{0, φ, 1} をそれぞれ、0, 1, 2とした3進数を利用
•4ビットごとにアルファベットに置き換える•81通りあり得るが、φは末尾から連続したものしか存在しないので、結果的には、31通りしかない
•0~9、A~Uを割り当てれば良い•ソート時の問題•比較するデータのすべての桁を揃えないといけない
•最大桁数に合わせてその場で生成が必要12