Your SlideShare is downloading. ×
Cocoa勉強会#32-表形式のデータに順序を記録する方法
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Cocoa勉強会#32-表形式のデータに順序を記録する方法

132
views

Published on

Cocoa勉強会#32 …

Cocoa勉強会#32
2009/2/7
表形式のデータに順序を記録する方法
新居雅行

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
132
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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