Presentation is loading. Please wait.

Presentation is loading. Please wait.

「図書系職員のための アプリケーション開発講習会」

Similar presentations


Presentation on theme: "「図書系職員のための アプリケーション開発講習会」"— Presentation transcript:

1 「図書系職員のための アプリケーション開発講習会」
請求記号による館内マップ 検索手法案 「図書系職員のための アプリケーション開発講習会」

2 目次 請求記号と棚の対応表(テキストファイル)をつくる (いまのところの)お勧め案 RDBで解決する方法 ボツ案です。

3 請求記号と棚の対応表(テキストファイル)をつくる
請求記号と棚の対応表(テキストファイル)をつくる方法です。 概要は次のとおりです 請求記号でソート可能なように請求記号を数字部分と文字部分に分割する 対応表をあらかじめ、請求記号順にソートしておく リストのトップから順に、検索する請求記号との大小比較を行う バイナリサーチのロジックを使えば、より高速化できるかもしれません。

4 問題は、ある請求番号がどのNoに対応するか
請求記号判定用テーブルの用意 階数 No 棚最初 棚最後 4F 1 000:A5[W] 070:B61[W] 照合用データとしては上記でよさそう。 問題は、ある請求番号がどのNoに対応するか 判定する仕組みをつくることですが….

5 テキストファイルで 以下の情報を用意 ID 階数 No 棚最初(1) 棚最初(2) 棚最初(3) 1 4F 000 A 5 2 070 B
62 3 3F 100 棚最初のみ着目 請求記号順にあらかじめソートしておく

6 棚の同定 ID 階数 No 棚最初(1) 棚最初(2) 棚最初(3) 1 4F 000 A 5 2 070 B 62 3 3F 100
< “080:C10” < “080:C10” > “080:C10” たとえば、080:C10 をID=1から順に 大小比較しつつスキャン。 レコード3に達したときに、はじめて、 自身より大きな請求番号に達する → そのひとつ前が該当の棚

7 ここから先はボツ案です。 ためしに考えてみたら、あまりに複雑なので、お勧めしない案です。
考え方を間違えると、どれだけ面倒になるか示すためにいちおう残しました。

8 まず、上記のようなデータ項目をもつテーブルを作る
ボツ案 RDBで解決する方法 ID 階数 No 棚最初(1) 棚最初(2) 棚最初(3) 棚最後(1) 棚最後(2) 棚最後(3) 1 4F 000 A 5 070 B 61 まず、上記のようなデータ項目をもつテーブルを作る

9 請求記号による検索 受け取った請求記号を元に、次の手順で検索を行う。
分類ごとに分割する。たとえば、001:C6[W]の場合(大・中・小は機械処理しやすいように分割) 大分類 中分類 --- C 小分類 --- 6

10 条件式を設定する [大分類] <= 棚最初(1) and [大分類] >= 棚最後(1) 例だと次のように解釈される
例にあった。棚最初(1)=000 で棚最後(1)=002のデータがヒットする 大分類が棚最初と同じか、棚最後と同じ場合は次のステップ(2)に進む 棚最初=棚最後の場合はステップ(3)に進む

11 ステップ(2) [大分類]が棚最初と同じか最後と同じ
大分類が棚最初と同じ場合。 [中分類] >= 棚最初(2) 大分類が棚最後と同じ場合 [中分類] <= 棚最後(2)

12 ステップ(3) 棚最初(1)と棚最後(1)が同じ場合
次の条件式で実行 [中分類] <= 棚最初(2) and [中分類] >= 棚最後(2)

13 高速化の切り札 バイナリサーチ バイナリサーチ(2分木探索) ソート済みデータを順に大小比較して処理 情報検索の基本中の基本
高速化の切り札 バイナリサーチ バイナリサーチ(2分木探索) ソート済みデータを順に大小比較して処理 情報検索の基本中の基本 ただし、自作はそれなりに面倒(経験談) 数年前の自作のプログラム(可変長レコード対応)を必要とあれば探してみます。

14 バイナリサーチの動作原理 (参考 wikipedia)
位置 1 2 3 4 5 6 7 8 9 10 データ 11 12 13 17 22 25 28 結果 × × 残り半分の中央値と比較 まず真ん中のデータ(中央値)と比較 “25”の位置情報を求めます!


Download ppt "「図書系職員のための アプリケーション開発講習会」"

Similar presentations


Ads by Google