アルゴリズムとデータ構造 補足資料14-1 「ハッシュ法」

Slides:



Advertisements
Similar presentations
SPIN. Seach Optimization Exhaustive search requires so much time and memory to perform verification realistically, must perform some shortcuts –reduce.
Advertisements

あなたは真夜中に 山の頂上を目指す登山者です
1 ソフトウェア工学 200 5 年 5セメスタ. 2 履修にあたって 教科書:「アルゴリズムとデータ構造」 平田富夫著 森北出版 講義:5セメスター開講、専門科目、 K318 、金曜4時限 担当: 草苅 良至 GI511, 2095、 参考書:「プログラミング作法」
この資料は、情報工学レクチャーシリーズ オペレー ティングシステム 松尾啓志 著(森北出版株式会 社)を用いて授業を行うために、名古屋工業大学松 尾啓志、津邑公暁が作成しました。 パワーポイント2007で最終版として保存しているため、変更はできませ
7.n次の行列式   一般的な(n次の)行列式の定義には、数学的な概念がいろいろ必要である。まずそれらを順に見ていく。
9.線形写像.
3.多項式計算アルゴリズム べき乗の計算 多項式の計算.
時間的に変化する信号. 普通の正弦波 は豊富な情報を含んでいません これだけではラジオのような複雑な情報 を送れない 振幅 a あるいは角速度 ω を時間的に変化 させて情報を送る.
情報処理A 第10回 Excelの使い方 その3.
九州大学 岡村研究室 久保 貴哉 1. 利用中のAPの数の推移 2 横軸:時刻 縦軸:接続要求数 ・深夜では一分間で平均一台、 昼間では平均14台程度の接続 要求をAPが受けている。 ・急にAPの利用者数が増えてく るのは7~8時あたり.
麻雀ゲーム 和島研究室 ソ 小林巧人
5.連立一次方程式.
1 情報量(2章). 2 物理的概念との対比1(入れ物と中 身) 塩水 塩 データ 情報 情報の量? 塩分の量! 情報の量は見た目ではわ からない。データと情報 は異なる概念。 塩分の量は見た目 ではわからない。 しかし、本質的な もの。
―本日の講義― ・平均と分散 -代表値 -ぱらつき(分散・標準偏差等) ・Excelによる演習
論理回路 第2回 今日の内容 前回の課題の説明 数の体系 – 数の表現 – 代表的な数 – 基数の変換 – 補数.
ノイズ. 雑音とも呼ばれる。(音でなくても、雑 音という) 入力データに含まれる、本来ほしくない 成分.
この資料は、情報工学レクチャーシリーズ オペレー ティングシステム 松尾啓志 著(森北出版株式会 社)を用いて授業を行うために、名古屋工業大学松 尾啓志、津邑公暁が作成しました。 パワーポイント2007で最終版として保存しているため、変更はできませ
素数判定法 2011/6/20.
フーリエ係数の性質. どこまで足す? 理想的には無限大であるが、実際に はそれは出来ない これをフーリエ解析してみる.
1章 行列と行列式.
本宮市立白岩小学校. 1 はじめに 2 家庭学習プログラム開発の視点 ① 先行学習(予習)を生かした 確かな学力を形成する授業づく り ② 家庭との連携を図った家庭学習の習慣化.
プログラミングⅠ( 1 組) 第 9 回
フーリエ級数. 一般的な波はこのように表せる a,b をフーリエ級数とい う 比率:
3.エントロピーの性質と各種情報量.
9.通信路符号化手法1 (誤り検出と誤り訂正の原理)
Excelによる積分.
1 6.低次の行列式とその応用. 2 行列式とは 行列式とは、正方行列の特徴を表す一つのスカ ラーである。すなわち、行列式は正方行列からスカ ラーに写す写像の一種とみなすこともできる。 正方行列 スカラー(実数) の行列に対する行列式を、 次の行列式という。 行列 の行列式を とも表す。 行列式と行列の記号.
計算のスピードアップ コンピュータでも、sin、cosの計算は大変です 足し算、引き算、掛け算、割り算は早いです
線形符号(10章).
1 0章 数学基礎. 2 ( 定義)集合 集合については、 3セメスタ開講の「離散数学」で詳しく扱う。 集合 大学では、高校より厳密に議論を行う。そのために、議論の 対象を明確にする必要がある。 ある “ もの ” (基本的な対象、概念)の集まりを、 集合という。 集合に含まれる “ もの ” を、集合の要素または元という。
10.PとNP完全問題との境界.
4.プッシュダウンオートマトンと 文脈自由文法の等価性
1 0章 数学基礎. 2 ( 定義)集合 集合については、 3セメスタ開講の「離散数学」で詳しく扱う。 集合 大学では、高校より厳密に議論を行う。そのために、議論の 対象を明確にする必要がある。 ある “ もの ” (基本的な対象、概念)の集まりを、 集合という。 集合に含まれる “ もの ” を、集合の要素または元という。
人工知能特論II 第7回 二宮 崇.
信号測定. 正弦波 多くの場合正弦波は 0V の上下で振動する しかし、これでは AD 変換器に入れら れないので、オフ セットを調整して データを取った.
1 9.線形写像. 2 ここでは、行列の積によって、写像を 定義できることをみていく。 また、行列の積によって定義される写 像の性質を調べていく。
通信路(7章).
アルゴリズムとデータ構造 補足資料 7-4 「単純交換ソート exsort.c 」 横浜国立大学 理工学部 数物・電子情報系学科 富井尚志.
3.プッシュダウンオートマトンと 文脈自由文法
6.符号化法(6章).
ビット. 十進数と二進数 十進数  0から9までの数字を使って 0、1、2、3、4、5、6、7、8、9、 10、11、12 と数える 二進数  0と1を使って 0、1、10、11、100、101、11 0、111 と数える.
人工知能特論 II 第 4 回 二宮 崇 1. CCG (COMBINATORY CATEGORIAL GRAMMAR) 組合せ範疇文法 2 今日の講義の予定.
創成C PROGRAMMING PROJECT 中部大学工学部情報工学科:創成Cインタラクティブデザイン( アプリ名: ZIP 2 GPS 作成者: EP00000 藤吉 弘亘.
重不況の経済学 第2章第2節 山下 真弘. 不均等成長 不均等成長=市場の特定の製品または特定の国・ 地域で付加価値の縮小が生じること 要因は2つ 製品別の「生産性向上速度の差」 付加価値総額の天井(=需要制約)
正弦波.
3.正方行列(単位行列、逆行列、対称行列、交代行列)
様々な情報源(4章).
論理回路 第1回. 今日の内容 論理回路とは? 本講義の位置づけ,達成目標 講義スケジュールと内容 受講時の注意事項 成績の評価方法.
伝わるスライド 中野研究室 M2 石川 雅 信. どのようなスライドを作れば良 いか 伝えたいこと.
C言語応用 構造体.
3.多項式計算アルゴリズム べき乗の計算 多項式の計算.
HKS Analysis Log Jul 2006 Part1 D.Kawama. 第壱部 HKS Sieve Slit Analysis.
HSPによる学習機能付き シューティングゲームの製作
移動エージェントプログラムの 動作表示のためのアニメーション言 語 名古屋大学情報工学コース 坂部研究室 高岸 健.
1 プログラミング言語論 第13回 プログラムの意味論と検証 (2) 表示的意味論 担当:犬塚. 2 表示的意味論 denotational semantics  表示的意味論では、プログラムの要素とそれが 意味するものを対応付ける。 変数 式 文 A B … A+2 2B+C A:=A+2 if.
「ネット社会の歩き方」レッスンキット プレゼンテーション資料集 15. チャットで個人情報は 言わない プレゼンテーション資料 著作権は独立行政法人情報処理推進機構( IPA )及び経済産業省に帰属します。
8.任意のデータ構造 (グラフの表現とアルゴリズム)
第14回 プログラムの意味論と検証(3) 不動点意味論 担当:犬塚
ことばとコンピュータ 2007 年度 1 学期 第 1 回. 2 ことばとコンピュータ 授業科目名:言語情報処理論 授業題目名:ことばとコンピュータ 履修コード: 5067 教室: 323 一学期開講 授業の進め方 – 基本的に講義中心ですすめ,時々コンピュー タを使う.
プログラミング演習( 1 組) 第 8 回
オセロの思考アルゴリズムについて 1103072 岩間 隆浩.
1 アルゴリズムの高速化. 2 アルゴリズムにおける 大幅な性能アップ 多項式時間アルゴリズム VS 対数時間アルゴリズム (最大公約数の問題) 指数時間アルゴリズム VS 多項式時間アルゴリズム (フィボナッチ数列を求める問題)
音の変化を視覚化する サウンドプレイヤーの作成
プログラミングの基礎知識 プログラミングの手順と重要概念 アルゴリズム. プログラミングの手順 コーディング エディタなどでコードを記述 コンパイル・インタープリタ 実行可能な形に翻訳 デバッグ(虫取り、不具合の調整) 完成!
1 オペレーティングシステム #7 計算機工学 III オペレーティングシステム #7 主記憶管理:主記憶管理基礎 2006/05/26 津邑 公暁.
本文. 考えながら読みましょ う 「いろいろなこと」( 3 行目)は何で すか 「①電話料金はコンビニで支払いをしていま す。いつでも払えますから、便利です。」 「②夕食はコンビニで買います。お弁当やお かずがいろいろありますから。」今、若者に 人気のあるコンビニは、いろいろなことをす るのに非常に便利な場所になった。
11万km上空のかぐやから見た地球. デジタル信号処理 Digital Signal Processing 2010 年度春学期 Spring Semester, 2010 担当者: 栗濱 忠司( Professor ) 第3週第3週.
IIR 輪講復習 #18 Matrix decompositions and latent semantic indexing.
今日の内容 高階関数  関数を値として扱う 関数を引数にとる 関数を返す関数 プログラミングの例題  クイックソート.
地球儀と様々な地図. 1 球体としての地球 こうした現象はあることをイ メージすると理解できる。
Presentation transcript:

アルゴリズムとデータ構造 補足資料14-1 「ハッシュ法」 横浜国立大学 理工学部 数物・電子情報系学科 富井尚志

今日の着席位置 自分の氏名を「ローマ字」で書いてください。(大学名簿に登録したもの) 次の値に変換し、総和を計算してください。 A→ 65 B→ 66 C→ 67 D→ 68 E→69 F→ 70 G→ 71 H→ 72 I→ 73 J→74 K→ 75 L→ 76 M→ 77 N→ 78 O→79 P→ 80 Q→ 81 R→ 82 S→ 83 T→84 U→ 85 V→ 86 W→ 87 X→ 88 Y→89 Z→ 90 スペース→ 32 ※ First NameとFamily Nameの間には一つスペース(32)を入れて その値をこの部屋の席数Bで割った余りの番号(1~B)の席に着席してください 余りがゼロの場合はB番 もし、すでに席が埋まっていたら、1を足した番号の席に着席してください それでもまだ席が埋まっていたら、空き席にあたるまで、1を足してください 氏名から、どこに座っているか当てます! できれば1発で

静的データと動的データ 静的データ 動的データ データの総量(件数)が変化しない 静的データを扱うデータ構造:配列 追加や削除がない 静的データを扱うデータ構造:配列 動的データ データの総量や内容が変化する 追加や削除が発生する 動的データを扱うデータ構造:線形リスト、木構造

時間計算量と空間計算量 時間計算量: 計算の回数や時間 空間計算量: 計算に必要な記憶量 ソートの問題は、主に時間計算量を見ていた。 時間計算量: 計算の回数や時間 空間計算量: 計算に必要な記憶量 ソートの問題は、主に時間計算量を見ていた。 今日のテーマ:動的データを格納する際 探索に必要な時間計算量を一定に データが増えても検索が超早い 記憶量は犠牲に メモリにはゆとりが必要

探索アルゴリズム(復習) 与えられたキーを持つデータを見つけ出す 静的データに対するデータ探索(第4回) データの件数nに対し、どのような時間計算量か? 静的データに対するデータ探索(第4回) 線形探索: 先頭から順番に探索→ O(n) 2分探索: 現在地より前か後か→ O(log n) ただし、あらかじめソートされている必要あり 配列のソート 単純ソート(第7回): 単純選択ソートなど → O( n2 ) 高速ソート(第8回): クイックソートなど → O( n log n )

探索アルゴリズム 与えられたキーを持つデータを見つけ出す 動的データに対するデータ探索 データの件数nに対し、どのような時間計算量か? 線形リストの探索(第11回) 順次探索: 先頭から順番に探索 → O(n) 探索木(2分木)の探索(第13回) 現在ノードより右か左か→ O(log n) ハッシュ法による探索(第14回:今回) ハッシュ関数で「散らして」配置 → O(1)

O( 1 ) O(log n) O(n) O(n x log n) O(n2) O(2n) データ件数 1,000 1,000,000 1,000,000,000 O( 1 ) 1 1 1 O(log n) 10 20 30 O(n) 1,000 1,000,000 1,000,000,000 O(n x log n) 10,000 20,000,000 30,000,000,000 O(n2) 1,000,000 1,000,000,000,000 1,000,000,000,000,000,000 O(2n) 10300 10300,000 10300,000,000

例題 70人が、128個ある席の一つをそれぞれ指定されて、着席します。 氏名を聞くだけで、席番号がわかるようにしたい。 利用者数(70)<座席数(128)<<氏名数(????超沢山) 氏名を聞けば、座っている場所がわかるようにする

例題 氏名を聞けば、座っている場所がわかるようにする 席番号=H(氏名) Hは、氏名を定義域、席番号を値域とする関数 「探索」の必要がなくなる (すべての席を「探索」しなくても、その人が座っている場所がわかる)

今日の着席位置 自分の氏名を「ローマ字」で書いてください。(大学名簿に登録したもの) key[i] 次の値に変換し、総和を計算してください。 SUM(key[i]) A→ 65 B→ 66 C→ 67 D→ 68 E→69 F→ 70 G→ 71 H→ 72 I→ 73 J→74 K→ 75 L→ 76 M→ 77 N→ 78 O→79 P→ 80 Q→ 81 R→ 82 S→ 83 T→84 U→ 85 V→ 86 W→ 87 X→ 88 Y→89 Z→ 90 スペース→ 32 ※ First NameとFamily Nameの間には一つスペース(32)を入れて その値をこの部屋の席数Bで割った余りの番号(1~B)の席に着席してください 余りがゼロの場合はB番 SUM(key[i]) % B もし、すでに席が埋まっていたら、1を足した番号の席に着席してください それでもまだ席が埋まっていたら、空き席にあたるまで、1を足してください 衝突→再ハッシュ 氏名から、どこに座っているか当てます! できれば1発で 遅刻、早退にも対応可能です                        追加・削除→動的データ

ハッシュ法 n件のデータの中から、キーを指定して、同じ値が登録されている該当データを探し出す スペースに十分なゆとりがある ハッシュ表に「散らして」上手に格納する 探索コスト 最良時: O(1) → データの件数nによらず一定 最悪時: O(n) 平均: O(1+n/B) Bは「バケット数」:格納する配列の要素数 n<<BならO(1) → あらかじめ用意できる配列に十分なゆとり

ハッシュ関数は一様に「ばらまく」関数がよい ハッシュ関数、ハッシュ値 ハッシュ関数: キー⇒インデックス(索引番号)の変換関数 H(key) H(key):ハッシュ値; インデックス、索引番号 ハッシュ関数は一様に「ばらまく」関数がよい H(key) = ORD(key) % B 同じハッシュ値をもつキー:衝突(collision) 衝突時は手順に従って別の関数を適用:再ハッシュ

ハッシュ表に対する基本操作 他の動的データ構造(線形リスト、木)の扱いと同じ 探索 挿入 削除 キーを与えると、ハッシュ表の該当位置を返す キーを持つデータをハッシュ表に格納する 削除 キーを持つデータをハッシュ表から削除する

衝突処理の違いによる 2種類のハッシング 外部ハッシュ法 内部ハッシュ法 チェイン法、ダイレクトチェイニング法 バケット個の線形リストを生成 ハッシュ表には同じハッシュ値をもつ線形リスト(の先頭アドレス)を格納 衝突時はリストに追加 格納できる要素数に制限がない 格納されたデータがハッシュ表の外にある:外部ハッシュ 内部ハッシュ法 オープンアドレス法、オープンアドレッシング法 バケット個の要素を持つ配列を作成 ハッシュ値を添え字(アドレス)とする 衝突時は再ハッシュ バケット数までの要素しか格納できない 格納されたデータがハッシュ表の内にある:内部ハッシュ