情報工学概論 (アルゴリズムとデータ構造)

Slides:



Advertisements
Similar presentations
ゲームプログラミング講習 第2章 関数の使い方
Advertisements

サービス管理責任者等研修テキスト 分野別講義    「アセスメントと        支援提供の基本姿勢」 <児童発達支援管理責任者> 平成27年10月1日.
ヒトの思考プロセスの解明を目的とするワーキングメモリの研究
第27講 オームの法則 電気抵抗の役割について知る オームの法則を使えるようにする 抵抗の温度変化を理解する 教科書P.223~226
コラッツ予想の変形について 東邦大学 理学部 情報科 白柳研究室 山中 陽子.
コンパイラ 第3回 字句解析 ― 決定性有限オートマトンの導出 ―
第5章 家計に関する統計 ー 経済統計 ー.
公共財 公共経済論 II no.3 麻生良文.
VTX alignment D2 浅野秀光 2011年12月15日  放射線研ミーティング.
冷却フランシウム原子を用いた 電子の永久電気双極子能率探索のための ルビジウム磁力計の研究
生命情報学 (8) スケールフリーネットワーク
前半戦 「史上最強」風 札上げクイズ.

認知症を理解し 環境の重要性について考える
フッ化ナトリウムによる洗口 2010・9・13 宮崎市郡東諸県郡薬剤師会 学校薬剤師  日高 華代子.
食品の安全性に関わる社会システム:総括 健康弱者 ハイリスク集団 HACCP (食肉処理場・食品工場) 農場でのQAP 一般的衛生管理
規制改革とは? ○規制改革の目的は、経済の活性化と雇用の創出によって、   活力ある経済社会の実現を図ることにあります。
地域保健対策検討会 に関する私見(保健所のあり方)
公共政策大学院 鈴木一人 第8回 専門化する政治 公共政策大学院 鈴木一人
医薬品ネット販売規制について 2012年5月31日 ケンコーコム株式会社.
平成26年8月27日(水) 大阪府 健康医療部 薬務課 医療機器グループ
平成26年度 呼吸器学会からの提案結果 (オレンジ色の部分が承認された提案) 新規提案 既収載の変更 免疫組織化学染色、免疫細胞化学染色
エナジードリンクの危険性 2015年6月23日 経営学部市場戦略学科MR3195稲沢珠依.
自動吸引は 在宅を変えるか 大分協和病院 院長         山本 真.
毎月レポート ビジネスの情報 (2016年7月号).
医療の歴史と将来 医療と医薬品産業 個人的経験 3. 「これからの医療を考える」 (1)医薬品の研究開発 -タクロリムスの歴史-
社会福祉調査論 第4講 2.社会調査の概要 11月2日.
2015年12月28日-2016年3月28日 掲載分.
2010度 民事訴訟法講義 補論 関西大学法学部教授 栗田 隆.
腫瘍学概論 埼玉医科大学国際医療センター 包括的がんセンター 緩和医療科/緩和ケアチーム 奈良林 至
“企業リスクへの考え方に変化を求められています。 トータルなリスクマネジメント・サービスをプロデュースします。“
情報漏えい 経済情報学科 E  西村 諭 E  釣 洋平.
金融班(ミクロ).
第11回 2009年12月16日 今日の資料=A4・4枚+解答用紙 期末試験:2月3日(水)N2教室
【ABL用語集】(あいうえお順) No 用語 解説 12 公正市場価格 13 債権 14 指名債権 15 事業収益資産 16 集合動産 17
基礎理論(3) 情報の非対称性と逆選択 公共政策論II No.3 麻生良文.
浜中 健児 昭和42年3月27日生まれ 東京都在住 株式会社ピー・アール・エフ 代表取締役 (学歴) 高 校:千葉県立東葛飾高校 卒業
COPYRIGHT(C) 2011 KYUSHU UNIVERSITY. ALL RIGHTS RESERVED
Blosxom による CMS 構築と SEO テクニック
記入例 JAWS DAYS 2015 – JOB BOARD 会社名 採用職種 営業職/技術職/その他( ) 仕事内容 待遇 募集数
ネットビジネスの 企業と特性 MR1127 まさ.
Future Technology活用による業務改革
ネットビジネス論(杉浦) 第8回 ネットビジネスと情報技術.
g741001 長谷川 嵩 g740796 迫村 光秋 g741000 西田 健太郎 g741147 小井出 真聡
自然独占 公共経済論 II no.5 麻生良文.
Autonomic Resource Provisioning for Cloud-Based Software
Webショップにおける webデザイン 12/6 08A1022 甲斐 広大.
物理的な位置情報を活用した仮想クラウドの構築
ハイブリッドクラウドを実現させるポイントと SCSKのOSSへの取組み
寺尾 敦 青山学院大学社会情報学部 第12回 情報デザイン(4) 情報の構造化と表現 寺尾 敦 青山学院大学社会情報学部
【1−1.開発計画 – 設計・開発計画】 システム開発計画にはシステム開発を効率的、効果的に実行する根拠(人員と経験、開発手順、開発・導入するシステム・アプリケーション・サービス等)を記述すること。 システム開発の開始から終了までの全体スケジュールを記載すること。 アプリケーション機能配置、ソフトウェア、インフラ構成、ネットワーク構成について概要を示すこと。
6 日本のコーポレート・ガバナンス 2008年度「企業論」 川端 望.
急成長する中国ソフトウェア産業 中国ソフトウェアと情報サービス産業の規模 総売上高は5年間で約5.3倍の成長
米国ユタ州LDS病院胸部心臓外科フェローの経験
公益社団法人日本青年会議所 関東地区埼玉ブロック協議会 JCの情熱(おもい)育成委員会 2011年度第1回全体委員会
次世代大学教育研究会のこれまでの活動 2005年度次世代大学教育研究大会 明治大学駿河台校舎リバティタワー9階1096教室
子どもの本の情報 大阪府内の協力書店の情報 こちらをクリック 大阪府内の公立図書館・図書室の情報
第2回産業調査 小島浩道.
〈起点〉を示す格助詞「を」と「から」の選択について
広東省民弁本科高校日語専業骨幹教師研修会 ①日本語の格助詞の使い分け ②動詞の自他受身の選択について   -日本語教育と中日カルチャーショックの観点から- 名古屋大学 杉村 泰.
■5Ahバッテリー使用報告 事例紹介/東【その1】 ■iphon4S(晴れの昼間/AM8-PM3) ◆約1時間で68%⇒100%
『ワタシが!!』『地域の仲間で!!』 市民が始める自然エネルギー!!
ポイントカードの未来形を形にした「MUJI Passport」
SAP NetWeaver を支える Microsoft テクノロジーの全貌 (Appendix)
ガイダンス(内業) 測量学実習 第1回.
Python超入門 久保 幹雄 東京海洋大学.
熱力学の基礎 丸山 茂夫 東京大学大学院 工学系研究科 機械工学専攻
京都民医連中央病院 CHDF学習推進委員会
資料2-④ ④下水道.
Accessによる SQLの操作 ~実際にテーブルを操作してみよう!~.
Presentation transcript:

情報工学概論 (アルゴリズムとデータ構造) 第7回

11. ハッシュ表 辞書操作 (INSERT, DELETE, SEARCH) を効率よく実現するデータ構造 キー:変数名などの文字列 ハッシュ表は実際的な場面では極めて速い 妥当な仮定の下で,SEARCHの時間の期待値は O(1) 最悪の場合 (n)

11.1 直接アドレス表 出現する可能性のあるキーの全集合 (普遍集合, universal set) が大きくない場合にうまく働く キーが普遍集合 U = {0,1,, m1} から選択され,どの2つの要素も同じキーをもたないと仮定する 直接アドレス表 (direct-access table) T で動的集合を表現する 配列 T[0..m1] の各要素が U のキーに対応 T[k] は,キー k を持つ要素をさす.そのような要素がなければ T[k] = NIL T[k] をスロット k と呼ぶ

T 1 キー 付属データ U (キーの普遍集合) 2 2 3 4 7 6 3 9 4 1 5 K (実際 のキー) 5 2 6 5 7 3 8 8 8 9

辞書操作の実現 DIRECT_ADDRESS_SEARCH(T,k) DIRECT_ADDRESS_INSERT(T,x) return T[k] DIRECT_ADDRESS_INSERT(T,x) T[key(x)] = x DIRECT_ADDRESS_DELETE(T,x) T[key(x)] = NIL いずれも O(1) 時間 T にオブジェクトそのものを格納してもいい

直接アドレス表の欠点 キーの普遍集合 U が大きい場合は非現実的 表 T をメモリに格納できない T に割り付けた領域のほとんどが無駄になる 辞書に格納されているキーの集合 K が U に比べて十分に小さい場合はハッシュ表が有効

11.2 ハッシュ表 直接アドレス表では,キー k はスロット k に格納 ハッシュ表 T[0..m1] では,スロット h(k) に格納 h: ハッシュ関数 (hash function) h: U  {0,1,,m1} 必要な領域: (|K|) 要素の探索: O(1) (平均時間)

ハッシュ関数の衝突 衝突 (collision): 2つのキーが同じスロットにハッシュされること T h(k2) U (キーの普遍集合) のキー) k1 h(k3) = h(k4) k3 k4 k2

衝突の回避方法 別のハッシュ関数を用いる |U| > m なので完全に回避することは不可能 チェイン法 オープンアドレス法

チェイン法による衝突解決 同じスロットにハッシュされたすべての要素を連結リストに格納 CHAINED_HASH_INSERT(T,x) リスト T[h(key(x))] の先頭に x を挿入, O(1) 時間 CHAINED_HASH_SEARCH(T,k) リスト T[h(k)] の中からキー k を持つ要素を探索 CHAINED_HASH_DELETE(T,x) リスト T[h(key(x))] から x を削除, 双方向リストを用いれば O(1) 時間

チェイン法を用いるハッシュ法の解析 SEARCHは最悪の場合 (n) 時間 平均時間を解析する スロット m 個, n 要素を格納するハッシュ表 T の負荷率 (load factor)  = n/m と定義  は1つのチェインに格納される要素数の平均 解析は  を変数として行う (n, m が共に無限大に近づくとき,  はある定数に留まるとする)

ハッシュ法の平均的性能 各要素は m 個のスロットに同じ程度にハッシュされると仮定する (単純一様ハッシュの仮定 simple uniform hashing) ハッシュ値 h(k) は O(1) 時間で計算できると仮定 キー k をもつ要素の探索は,リスト T[h(k)] の長さに比例した時間が必要

定理11.1 チェイン法を用いるハッシュ表で,単純一様ハッシュを仮定すると,失敗に終わる探索にかかる時間の平均は (1+ ) 証明 単純一様ハッシュを仮定すると,任意のキーは m 個の各スロットに同程度にハッシュされる. あるキーの探索が失敗するとき,その時間の平均は,1つのリストを最後まで探索する時間の平均. リストの長さの平均は負荷率  = n/m. よって検査される要素数の期待値は , 時間は (1+ )

定理 11.2 チェイン法を用いるハッシュ表で,単純一様ハッシュを仮定すると,成功する探索にかかる時間の平均は (1+ ) 証明 INSERTにおいて,新しい要素はリストの末尾に挿入されると仮定する. 成功する探索で検査される要素数の期待値は, 見つかった要素が挿入されたときに検査された要素数+1. 表に格納されている n 個の要素について平均を取る.

i 番目の要素が付け加えられるときのリストの長さの期待値は (i1)/m 成功する探索に必要な時間は (1+ ) ハッシュ表中の要素数が n = O(m) のとき = n/m = O(m)/m = O(1) つまり,すべての辞書操作が平均 O(1) 時間

11.3 ハッシュ関数 良いハッシュの条件 = 単純一様ハッシュ 各キーは U から確率分布 P に従って独立に取り出されると仮定すると,条件は と書ける ただし,一般に P は未知 キーがランダムな実数 k (0k1)で一様独立のとき,h(k) = km は上の条件を満たす

11.3.1 除算法 キー k を m で割った剰余をハッシュ値とする 利点: ハッシュ関数の計算が高速 h(k) = k mod m 利点: ハッシュ関数の計算が高速 m は 2 のべき乗に近くない素数がいい m = 2p のとき,h(k) は k の最下位 p ビット m = 2p1 で k が基数 2p の文字列のとき,文字を並び替えてもハッシュ値は同じ

例 n = 2000 個の文字列を格納する場合 負荷率  を 3 に近くするには, m = 701 にすればいい 701 は素数で,2のべき乗には近くない h(k) = k mod 701 とすればいい このハッシュ関数が実際のデータでうまく働くことを確かめるべき

11.3.2 乗算法 まず,キー k にある定数 A (0 < A < 1) を掛け,その小数部分 kAkA を取り出す 次に,その値に m を掛け,小数部分を切り捨てる m の値はあまり重要ではない 2のべき乗にすると計算が簡単 が良いと言われる

11.4 オープンアドレス指定法 オープンアドレス指定法 (open addressing) では,要素は連結リストではなくハッシュ表の中に格納される. ハッシュ表が埋まるとそれ以上挿入できない 負荷率は1以下 連結リストを用いないため,スペースが小さい ハッシュ関数を拡張して衝突を回避する 引数: キーと探査番号 h: U  {0,1,...,m1}  {0,1,...,m1} 探査列 h(k,0), h(k,1),..., h(k,m1) は 0,1,...,m1 の順列でなければならない

要素の挿入 int HASH_INSERT(data *T, data k) { int i, j; i = 0; // i: 探査番号 do { j = h(k,i); if (T[j] == NIL) { // スロットが空なら T[j] = k; // 新しいデータを挿入 return j; } else { i++; // 探査番号を1増やす } } while (i != m); // m 回試す printf(“ハッシュ表オーバーフロー\n”);

要素の検索 int HASH_SEARCH(data *T, data k) { int i, j; i = 0; // i: 探査番号 do { j = h(k,i); if (T[j] = k) return j; // k を発見 i++; } while (T[j] != NIL && i != m); // スロットが空か,m 回探索した return NIL; // k は見つからなかった }

要素の削除 削除したい要素のあるスロットを NIL にすると,他の要素が検索できなくなる 削除するときは NIL でなく特別な値 DELETED を格納する SEARCHではDELETEDが現れても探索を続ける INSERTではNILまたはDELETEDの場所に挿入 問題点: 探索時間が負荷率  で表せない 要素を削除する必要がある場合はチェイン法が好まれる

衝突回避の方法 一様ハッシュ (uniform hashing) を仮定: 各キーに対する探査列として, {0,1,...,m1} の m! 通りの順列のどれもが同程度に現れる 近似的な一様ハッシュを用いる 線形探査 2次関数探査 ダブルハッシュ法

線形探査 通常のハッシュ関数 h’: U  {0,1,...,m1} に対し h(k,i) = (h’(k)+i) mod m (i=0,1,...,m1) を用いる 探査されるスロット: T[h’(k)], T[h’(k)+1],..., T[m1], T[0], T[1],..., T[h’(k)1] 異なる探査列は m 通りしかない (開始位置で決定) 問題点: 主クラスタ化 (primary clustering) が起きる 直前の i 個のスロットが使用中である空きスロットが選択される確率は (i+1)/m であるため,連続する使用中のスロットは常に大きくなる

2次関数探査 2次関数探査 (quadratic probing) では h(k,i) = (h’(k)+c1i+c2i2) mod m (i=0,1,...,m1) を用いる c1, c2, m は適切に選ぶ必要がある h(k1,0) = h(k2,0) の場合は h(k1,i) = h(k2,i) となってしまう (副クラスタ化, secondary clustering) 異なる探査列は m 通りしかない (開始位置で決定)

11.4.1 ダブルハッシュ法 h(k,i) = (h1(k)+i h2(k)) mod m h2(k) と m の最大公約数が d のとき,ハッシュ表の1/d しか検査しない 例1: m を2のべき乗,h2 は常に奇数 例2: m を素数, h2 は m 未満の非負整数 h2(k)=1+(k mod m’) (m2) 個の探査列が利用できる