ハッシュ表 データ構造とプログラミング(12)

Slides:



Advertisements
Similar presentations
1 T HE U NIVERSITY OF T OKYO D EPARTMENT OF M ATHEMATICAL I NFORMATICS 数理情報工学演習第一C プログラミング演習 ( 第 6 回 ) 2014/05/19.
Advertisements

1 通信教育学部 コンピュータ演習 Excel の書式設定と関数 授業ページ「コンピュータ演習(通信教育学 部)」を 開いてください。提出課題の一覧が掲載されてい ます。
アルゴリズムとデータ構造 2012年6月27日
アルゴリズムとデータ構造 2013年6月18日
アルゴリズムとデータ構造1 2005年7月8日
アルゴリズムとデータ構造 2010年7月5日
6-2 データベース 1.SQLite SQLを単純化した SQLite を使ってデータベースを操作 表「fruit」
基礎プログラミングおよび演習 第9回
データ構造とプログラミング技法 (第8回) ーデータの探索ー.
地理情報システム論 第3回 コンピュータシステムおける データ表現(1)
アルゴリズムとデータ構造 2012年6月14日
情報工学概論 (アルゴリズムとデータ構造)
担当: 遠藤 美純 情報教育 初級講座 担当: 遠藤 美純
情報工学概論 (アルゴリズムとデータ構造)
データ構造とアルゴリズム 第4回 リスト ~ データ構造(1)~.
第7章 データベース管理システム 7.1 データベース管理システムの概要 7.2 データベースの格納方式 7.3 問合せ処理.
データ構造とアルゴリズム 第5回 スタック ~ データ構造(2)~.
INSERT(x,p,L)の例 (一部) 磯 直行 2009年5月5日
データ構造と アルゴリズム 第八回 知能情報学部 新田直也.
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
大岩 元 慶応大学環境情報学部 二分木 データ構造とプログラミング(10) 大岩 元 慶応大学環境情報学部
アルゴリズムとデータ構造 2011年6月14日
アルゴリズムとデータ構造 2011年6月20日
第5回 統計処理(2) 塩浦 昭義 東北大学全学教育科目 情報基礎 A 1セメスター 木曜1,3講時 経済学部・法学部
集合、辞書とハッシュ法 第8回 集合と辞書 ~ データ構造(4)~.
データ構造と アルゴリズム 第十一回 理工学部 情報システム工学科 新田直也.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
第13回 ハッシュテーブルを使ったプログラム ~高速に検索するには?~.
ハッシュテーブル.
データ構造とアルゴリズム 第4回 リスト ~ データ構造(1)~.
データ構造とアルゴリズム 第5回 スタック ~ データ構造(2)~.
アルゴリズムとデータ構造1 2006年7月4日
アルゴリズムとデータ構造1 2006年6月16日
アルゴリズムとデータ構造1 2005年7月15日
講義では、Cプログラミングの基本を学び 演習では、やや実践的なプログラミングを通して学ぶ
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
二分探索木における要素削除 データ構造とプログラミング(10)
第9回 優先度つき待ち行列,ヒープ,二分探索木
アルゴリズムとデータ構造1 2005年7月1日
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
大岩 元 慶応大学環境情報学部 再帰 データ構造とプログラミング(8) 大岩 元 慶応大学環境情報学部
データ構造と アルゴリズム 第五回 知能情報学部 新田直也.
アルゴリズムとデータ構造1 2009年7月9日
アルゴリズムとデータ構造1 2005年6月24日
アルゴリズムとデータ構造 2010年6月21日
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
2005年度 データ構造とアルゴリズム 第6回 「ハッシュ法を用いた探索」
大岩 元 慶応大学環境情報学部 再帰 データ構造とプログラミング(8) 大岩 元 慶応大学環境情報学部
プログラミング 4 探索と計算量.
実装編②HashTable,JavaAPI
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造 2011年6月23日
5.サーチ 5-1.線形探索 5-2.2分探索 5-3.ハッシュ.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
第9回 優先度つき待ち行列,ヒープ,二分探索木
アルゴリズムとデータ構造1 2006年7月4日
「マイグレーションを支援する分散集合オブジェクト」
算法数理工学 第4回 定兼 邦彦.
第8回 データを収納する (スタックとキュー)
アルゴリズムとデータ構造1 2009年7月2日
第11回放送授業.
アルゴリズムとデータ構造 補足資料11-3 「線形リストのオペレータ」
アルゴリズムとデータ構造 2012年6月25日
アルゴリズムとデータ構造 2012年6月21日
新人研修発表 平成13年5月14日(月) 探索アルゴリズム ハッシュ法について 株式会社 エーアイネット・テクノロジ          須田 哲生.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
アルゴリズムとデータ構造1 2005年7月12日
アルゴリズムとデータ構造1 2007年7月6日
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
情報処理Ⅱ 小テスト 2005年2月1日(火).
Presentation transcript:

ハッシュ表 データ構造とプログラミング(12) 大岩 元 慶応大学環境情報学部 ohiwa@sfc.keio.ac.jp

ハッシングの考え方 配列をデータベースに用いる キーを配列のインデクスに対応させればO(1)でアクセスできる 欠点 拡張が困難 順序性のアクセスが不利 語の文字が表わす値を足す ->衝突 27進法(アルファベット)の数値 ->隙間ばかり

ハッシュ関数の一例 モジュロ演算(%)を使って数の範囲を縮小 衝突(collision)が発生する 23%4=3 13052%4=0 38%4=2     643%4=3 129%4=1 64%4=0 arrayIndex = hugeNumber % arraySize 衝突(collision)が発生する 空き番地法 arraySize ≒ numberSize * 2 分離連鎖法 arraySize ≒ numberSize

find( )メソッド 線型探査による空き番地法 public DataItem find(int key){ //キーの値がkeyの項目を見つける int hashVal = hashFunc(key); //keyをハッシュする while (hashArray[hashVal] != null) //{空のセルに出会うまで if(hashArray[hashVal].iData == key) //キーを見つかたら return hashArray[hashVal]; ++hashVal; //次のセルへ行く hashVal %= arraySize; //必要ならップアラウンドする } return null; //項目が見つからない

insert( ) メソッド 線型探査による空き番地法 public vioid insert(DataItem item) { // DataItem を挿入する int key = item.iData: // キーを取り出す int hashVal = hashFunc(key); // key をハッシュする while (hashArray(hashVal) != null && // 空のセルに出会うまで hashArray(hashVal.iData) != -1 ) {//  ++hashVal; // hashVal %= arraySize; // } hashArray[hashVal] = item; } // insert()の終り

Delete( ) メソッド 線型探査による空き番地法 public DataItem delete( int key) { //DeleteItemを削除する int hashVal = hashFunc(key) ; //key をハッシュする while ( hashArray[hashVal] != null) { //空のセルを見つけるまで if ( hashArray[hashVal].iData == key) { //キーを見つけたら DataItem temp = hashArray[hasVal] ; //項目そセーブする hashArray[hashVal] = nonItem : //項目を削除する return temp : //項目を返す } ++hashVal ; //次のセルに行く hashVal %= arraySize ;  //必要ならラップアラウンドする         return null ; //項目が見つからない } //delete () の終り

平方探査とダブルハッシュによる空き番地法 表の占有率が2/3をこえると性能が落ちる できれば1/2にしたい 表のサイズは素数にする 線型探査では衝突でクラスター(項目の続き)ができる X+1,x+4,x+9,……に置く(平方探査) キーに対して別のハッシュ関数を使って2度目のハッシュを行なう(ダブルハッシュ)

分離連鎖法