SlideShare una empresa de Scribd logo
1 de 13
Descargar para leer sin conexión
関東第32回Cocoa勉強会
2009/2/7

表形式のデータに
順序を記録する方法
新居雅行
nii@msyk.net

1
Agenda

•
•
•

現状の順序の記録方法と問題点
順序を記録するコード付け
コード付け手法の問題点と改良

2
順序記録に対する問題点

•

問題が発生する場合

•
•
•一般的な方法
•
•

順序の手がかりになるフィールドがない場合
例えば、ユーザが順序を決めるような場合

数値の番号を利用した場合、挿入時に順番の数値を更新する必要がある
リンクリスト形式の場合、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
実際のバイナリデータ
ソート後

生成順

101と1011の間に10110が存在する
6
バイナリ表現=2分木

•
•
•

ラベルは2分木のノードのどれかとなる
集合論的には { 0, φ, 1 } の集合の直積
中間ラベルを求める問題

•
•
•

部分木の間順走査で得られるノードのどれか
一般には短いものを使うといいと思うかもしれない
だが、実験してみると、「いちばん長いもの」でも
大して変わらない

000
00
001
0
010
01
011
ɸ
100
10
101
1
110
11
111

7
問題点と解決手法

•

コード生成の規則として次の手法を提案

•
•
•特定のレコードの直後に連続挿入する場合の比較
•
隣接ノードの場合、延長したノードから採用

隣接しないノードの場合、桁が長いものにいちばん近いノードを採用

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
延長手法の一提案

•

隣接ノードの中間を求める場合の延長ノードを一般化

•
•
•先頭と末端に追加する場合
•
•
•
•

本来延長する方向=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
順序記録手法の実験結果

•

!"!#

•
•e=0, f=0と比較
•

一部の条件では、平均桁数、
平均最大桁数は減少する

B

e

e+f

'!"!#

(!!"!#

%!"!#

&!"!#

'!"!#

(!!"!#

$!"!#

%!"!#

&!"!#

'!"!#

(!!"!#

,*(#

f=0 ,*$#
,*-#
,*%#

20回の平均値

A

&!"!#

,*!#

ランダムに30、連続して20
レコードを生成。これを10回
繰り返す

f

$!"!#

!"!#

•

%!"!#

!"!#

500レコード生成

$!"!#

)*!+,*!#
,*!#
,*(#
f=1 ,*$#
,*-#
,*%#

)*!+,*!#
,*!#
,*(#
f=2 ,*$#
,*-#
,*%#

130.2

平均桁数
平均最大桁数
11
記録のためのコード化

•
•

{0, φ, 1} をそれぞれ、0, 1, 2とした
3進数を利用
4ビットごとにアルファベットに置き
換える

•

81通りあり得るが、φは末尾から連続した
ものしか存在しないので、結果的には、31
通りしかない

•
•ソート時の問題
•
•

0∼9、A∼Uを割り当てれば良い

比較するデータのすべての桁を揃えないとい
けない
最大桁数に合わせてその場で生成が必要

12
現在開発しているもの

•

開発したもの

•

•
•
•

C言語のコマンドレベルでの中間ノードを求めるもの
文字によるコード表現を生成するコマンド
FileMaker Proによる検証システム

まとめ

•
•

VLEIコードとその改良手法は、順序の記録として利用可能
文字へのコード化を行うことで、 データベースに適用する事も可能

13

Más contenido relacionado

Más de Masayuki Nii

Más de Masayuki Nii (20)

Cocoa勉強会#61-メインスレッド外でNSURLConnection
Cocoa勉強会#61-メインスレッド外でNSURLConnectionCocoa勉強会#61-メインスレッド外でNSURLConnection
Cocoa勉強会#61-メインスレッド外でNSURLConnection
 
Cocoa勉強会#23-カスタムシートとModality
Cocoa勉強会#23-カスタムシートとModalityCocoa勉強会#23-カスタムシートとModality
Cocoa勉強会#23-カスタムシートとModality
 
Cocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#6-SQLiteをCocoaで使うCocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#6-SQLiteをCocoaで使う
 
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号
 
Cocoa勉強会#57-Baseによるローカライズまとめ
Cocoa勉強会#57-BaseによるローカライズまとめCocoa勉強会#57-Baseによるローカライズまとめ
Cocoa勉強会#57-Baseによるローカライズまとめ
 
Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しない
Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しないCocoa勉強会#56-小ネタ集あなたの常識はすでに通用しない
Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しない
 
Cocoa勉強会#45-AWS SimpleDBを使ってみる
Cocoa勉強会#45-AWS SimpleDBを使ってみるCocoa勉強会#45-AWS SimpleDBを使ってみる
Cocoa勉強会#45-AWS SimpleDBを使ってみる
 
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビュー
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビューCocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビュー
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビュー
 
Cocoa勉強会#33-意外に楽に使えるlibcurl
Cocoa勉強会#33-意外に楽に使えるlibcurlCocoa勉強会#33-意外に楽に使えるlibcurl
Cocoa勉強会#33-意外に楽に使えるlibcurl
 
Cocoa勉強会#28-OpenSSLで暗号化したファイルを復号する
Cocoa勉強会#28-OpenSSLで暗号化したファイルを復号するCocoa勉強会#28-OpenSSLで暗号化したファイルを復号する
Cocoa勉強会#28-OpenSSLで暗号化したファイルを復号する
 
Cocoa勉強会#27-QuickLookプラグインの作り方
Cocoa勉強会#27-QuickLookプラグインの作り方Cocoa勉強会#27-QuickLookプラグインの作り方
Cocoa勉強会#27-QuickLookプラグインの作り方
 
Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ
Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプCocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ
Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ
 
Cocoa勉強会#37-シェイクイベントの実装
Cocoa勉強会#37-シェイクイベントの実装Cocoa勉強会#37-シェイクイベントの実装
Cocoa勉強会#37-シェイクイベントの実装
 
Cocoa勉強会#35-iPhoneでのコピペとカスタムUI
Cocoa勉強会#35-iPhoneでのコピペとカスタムUICocoa勉強会#35-iPhoneでのコピペとカスタムUI
Cocoa勉強会#35-iPhoneでのコピペとカスタムUI
 
Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証
Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証
Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証
 
Cocoa勉強会#38-UITableViewテーブル内のナビゲーション
Cocoa勉強会#38-UITableViewテーブル内のナビゲーションCocoa勉強会#38-UITableViewテーブル内のナビゲーション
Cocoa勉強会#38-UITableViewテーブル内のナビゲーション
 
Cocoa勉強会#43-Blocksを使う
Cocoa勉強会#43-Blocksを使うCocoa勉強会#43-Blocksを使う
Cocoa勉強会#43-Blocksを使う
 
Cocoa勉強会#42-UIWebKitをコンポーネントとして使う
Cocoa勉強会#42-UIWebKitをコンポーネントとして使うCocoa勉強会#42-UIWebKitをコンポーネントとして使う
Cocoa勉強会#42-UIWebKitをコンポーネントとして使う
 
Cocoa勉強会#50-ストーリーボードとセグウェイ
Cocoa勉強会#50-ストーリーボードとセグウェイCocoa勉強会#50-ストーリーボードとセグウェイ
Cocoa勉強会#50-ストーリーボードとセグウェイ
 
Cocoa勉強会#63-Xcode Server〜みんなで使ってみる
Cocoa勉強会#63-Xcode Server〜みんなで使ってみるCocoa勉強会#63-Xcode Server〜みんなで使ってみる
Cocoa勉強会#63-Xcode Server〜みんなで使ってみる
 

Último

Último (12)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 

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