PowerPoint Presentation

Similar documents
Microsoft PowerPoint - algo ppt [互換モード]

Microsoft PowerPoint - 05.pptx

データ構造

Taro-リストⅢ(公開版).jtd

Taro-リストⅠ(公開版).jtd

情報処理Ⅰ

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

Microsoft Word - 第5回 基本データ構造2(連結リスト).doc

memo

memo

Microsoft PowerPoint - kougi10.ppt

memo

始めに, 最下位共通先祖を求めるための関数 LcaDFS( int v ) の処理を記述する. この関数は値を返さない再帰的な void 関数で, 点 v を根とする木 T の部分木を深さ優先探索する. 整数の引数 v は, 木 T の点を示す点番号で, 配列 NodeSpace[ ] へのカーソル

次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1

新・明解Javaで学ぶアルゴリズムとデータ構造

PowerPoint Template

PowerPoint Presentation

memo

Microsoft Word - 13

Microsoft Word - no12.doc

Taro-スタック(公開版).jtd

Taro-2分探索木Ⅰ(公開版).jtd

第2回

Taro-2分探索木Ⅱ(公開版).jtd

memo

Microsoft PowerPoint - 06.pptx

プログラミングI第10回

第2回

Microsoft PowerPoint - kougi9.ppt

相続支払い対策ポイント

150423HC相続資産圧縮対策のポイント

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

ハピタス のコピー.pages

Copyright 2008 All Rights Reserved 2

PowerPoint プレゼンテーション

Taro-再帰関数Ⅱ(公開版).jtd

Taro-再帰関数Ⅲ(公開版).jtd

nlp1-04a.key


Microsoft Word - NonGenList.doc

文字列操作と正規表現

Taro-ポインタ変数Ⅰ(公開版).j

GEC-Java

1000 Copyright(C)2009 All Rights Reserved - 2 -

Taro-最大値探索法の開発(公開版

Microsoft PowerPoint - kougi11.ppt

人工知能入門

Microsoft PowerPoint - lec10.ppt

明解Javaによるアルゴリズムとデータ構造

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

untitled

初心者にもできるアメブロカスタマイズ新2016.pages

- 2 Copyright (C) All Rights Reserved.

memo

Microsoft Word - NonGenTree.doc

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

Microsoft PowerPoint - algo ppt [互換モード]

PowerPoint プレゼンテーション

PG13-6S

Microsoft PowerPoint - 6.pptx

Copyright All Rights Reserved. -2 -!

Quick Sort 計算機アルゴリズム特論 :2017 年度 只木進一

program7app.ppt

Analysis of Algorithms

5after探索( )

JAVA入門

JAVA入門

IPA:セキュアなインターネットサーバー構築に関する調査

Microsoft PowerPoint - C4(反復for).ppt

Prog1_10th

Microsoft Word - 最終版 バックせどりismマニュアル .docx

alg2015-6r3.ppt

alg2015-3r3.ppt

Analysis of Algorithms

PowerPoint プレゼンテーション

Microsoft PowerPoint - Pro110111

PowerPoint Presentation

kiso2-09.key

Microsoft PowerPoint - ca ppt [互換モード]

Microsoft Word - no206.docx

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

アルゴリズムとデータ構造

Microsoft Word - 3new.doc

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

プログラミング入門1

データ構造

Microsoft PowerPoint - prog03.ppt

INTRODUCTION TO ALGORITHMS

<4D F736F F F696E74202D20352D335F8D5C90AC CF909482CC90B690AC82C695D28F572E707074>

プログラム言語及び演習Ⅲ

論理と計算(2)

Microsoft PowerPoint - lecture02.pptx

Microsoft Word - 中間試験 その1_解答例.doc

untitled

PowerPoint Presentation

基礎計算機演習 実習課題No6

Microsoft Word - 12

Microsoft PowerPoint - 7.pptx

Microsoft PowerPoint - mp11-06.pptx

Transcription:

今週のトピックス アルゴリズムとデータ構造 第 10 回講義 : 探索その 1 探索 (search) 逐次探索 (sequential search) 2 分探索 (binary search) 内挿探索 (interpolation search) Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 1 Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 2 探索 (search) 探索 簡単に言えば データの中から データを探すこと. 前もって格納されている多くのデータの中からほしいデータを引き出す操作. 探索のプロセス 与えられた探索キーと一致するキーを持つ ( 全ての ) データを探し出す. 探索キーはほしいデータの特徴である 探索は与えられた特徴を持つデータを探し出すこと. 探索の例 辞書 (dictionary) 英 - 英辞書 英 - 日辞書 など キー : 単語 レコード : 単語に関連する情報 探索 : 与えられた単語の発音 意味などを調べること 記号表 (symbol table): プログラムを管理するためにシステムが作った 辞書 キー : プログラムで使用されている変数名 レコード : 変数の種類 サイズ 関連メソッドなどの情報 探索 : コンパイラが プログラム中の変数名に従ってプログラムを機械語に翻訳するために 必要な情報を引き出す 一般的に 辞書はデータベース 知識ベースと考えられる Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 3 Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 4 1

データベースの基本操作 Initialize: データ構造を初期設定する Search: 与えられたキーをもつレコードを探索する Insert: 新しいレコードを挿入する Delete: 指定されたレコードを削除する Join:2つの辞書を合併して1つの辞書を作る Sort: 辞書を整列する 逐次探索 (sequential search) プログラミング C のリニャサーチである 基本的な考え方 配列にレコードを格納し 新しいレコードを挿入する時に配列の最後におき レコードを探索する時には配列を順番に探していく 実現法 配列による 連結リストによる Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 5 Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 6 配列によるプログラム例 (p. 5, Vol. 2) static struct node {int key; int info; ; static struct node a[maxn+1]; static int N; seqinitialize() { N = 0; 最後の項目から調べ 見つ int search(int v) { かったら終了 ;a[0].keyにvを int x = N+1; 入れたので 必ず終了する a[0].key = v; a[0].info = -1; while (v!= a[--x].key) ; return a[x].info; seqinsert(int v, int info) { a[++n].key = v; a[n].info = info; Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 7 リストによる実現 : 初期化 static struct node { int key, info; struct node *next; ; static struct node *head, *z; listinitialize() { head = (struct node *) malloc (sizeof *head); z = (struct node *) malloc (sizeof *z); head->next = z; z->next = z; z->info =-1; (p. 7, Vol. 2) Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 8 2

連結リストによる実現 int listsearch(int v) { struct node *t = head; z->key = v; while (v > t->key) t = t->next; if (v!= t->key) return z->info; return t->info; リストは事前に整列されていることを前提とする リストによる実現 : 挿入 listinsert(int v, int info) { struct node *x, *t = head; z->key = v; while (v > t->next->key) t = t->next; x = (struct node *) malloc(sizeof *x); x->next = t->next; t->next =x; x->key = v; x->info = info; メリット : 整列が簡単にできる Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 9 Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 10 逐次探索の計算量 配列による実現 不成功探索 N+1 回の比較 成功探索 平均約 N/2 回の比較 整列リストによる実現 成功 不成功とも 平均約 N/2 回の比較 整列されていないリストによる実現 配列とほぼ同じ 2 分探索法 (binary search) 基本的考え方 : 分割統治法を適用 目的 : 探索時間を減らす レコードの集合を 2 つの部分に分けて 探すキーがどちらの部分に属しているかを判定し キーが属する部分を調べる レコードの集合を分割する方法 レコードを整列し 整列した配列の添字を用いて調べるべき部分を指定する Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 11 Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 12 3

2 分探索のプログラム ( 非再帰 ) int binarysearch(int v) { int l = 1, r = N, x; while (r >= l) { x = (l+r)/2; if (v < a[x].key) r = x-1; else l = x+1; if (v == a[x].key) return a[x].info; return 1; (p. 9, Vol. 2) 2 分探索の様子 キー M を探す様子 Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 13 Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 14 内挿探索 (interpolation search) 内挿探索の意味 : 線形予測 2 分探索の x = (r+l)/2 = l + (r-l)/2 を x = l + (v-a[l].key)(r-l)/(a[r].key-a[l].key) にすると 内挿探索 l a[r].key v a[l].key x r x l v a[ l]. key r l a[ r]. key a[ l]. key Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 15 Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 16 4

内挿探索の例 i 番目のアルファベットを i で表す M(=13) を探索するようす 2 分探索と内挿探索の比較 両方とも整列されているデータを探索する 2 分探索 真ん中のデータが 探したいデータかどうか調べ 探したいデータより小さければ左側に対して 大きければ右側に対して 同じことを繰り返す 内挿探索 真ん中のデータのかわりに 探したいデータの位置をある程度予測してからデータを調べる Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 17 Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 18 2 分探索の例 :20 を探したい 内挿探索の例 :20 を探したい Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 19 Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 20 5

2 分探索と内挿探索の計算量 2 分探索 : 成功 不成功とも 比較は lgn+1 回以下 内挿 : 成功 不成功とも 比較は lglgn+1 回以下 例 :N=10 億の場合 内挿探索の比較回数は 5 より小さいので 2 分探索よりかなり良い クイズ 次のようなソートされたデータがある : 1 4 6 9 10 13 19 23 25 30 (1) このデータから二分探索を用いて 9 を探索する過程を書きなさい (2) このデータから内挿探索を用いて 9 を探索する過程を書きなさい Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 21 Produced by Qiangfu Zhao (Since 2009), All rights reserved (c) 22 6