ヒープソートの演習 第13回.

Slides:



Advertisements
Similar presentations
区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
Advertisements

4.3 マージソート.
初年次セミナー 第8回 データの入力.
離散システム特論 整列(sorting)アルゴリズム 2.
データ構造とアルゴリズム論 第5章 整列(ソート)のアルゴリズム
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
第12回 ソート(3): シェルソート、クイックソート
アルゴリズムとデータ構造 第8回 ソート(3).
第10回 整列 ~ バブルソート,挿入ソート,選択ソート~
第11回 整列 ~ シェルソート,クイックソート ~
データ構造とアルゴリズム論 第5章 整列(ソート)のアルゴリズム
第11回 整列 ~ バケットソート,基数ソート,ヒープソート~
On the Enumeration of Colored Trees
Problem G : Entangled Tree
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
データ構造とプログラミング技法 (第8回) ーデータの探索ー.
アルゴリズムとデータ構造 第6回演習解答 2015/11/18実施 アルゴリズムとデータ構造 2015.
第10回 ソート(1):単純なソートアルゴリズム
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
データ構造とアルゴリズム 分割統治 ~ マージソート~.
アルゴリズムとデータ構造 --- 理論編 --- 山本 真基
エージェントを管理するボスの苦悩 問題 n人のエージェントを部下に持つボスがいる. エージェントは出張・帰還を頻繁に繰り返す.
①データ構造 ②アルゴリズム ③プログラム言語 ④マークアップ言語
ヒープソートの復習.
第11回 整列 ~ シェルソート,クイックソート ~
精密工学科プログラミング基礎Ⅱ 第3回資料 今回の授業で習得してほしいこと: 2次元配列の使い方 (前回の1次元配列の復習もします.)
二分探索木によるサーチ.
2009/10/16 いろいろなデータ構造 第3講: 平成21年10月16日 (金) 4限 E252教室 コンピュータアルゴリズム.
算法数理工学 第3回 定兼 邦彦.
情報工学概論 (アルゴリズムとデータ構造)
ソートアルゴリズムの種類 選択ソート (selection sort) バブルソート (bubble sort)
講義では、Cプログラミングの基本を学び 演習では、やや実践的なプログラミングを通して学ぶ
データ構造とアルゴリズム論 第6章 整列(ソート)のアルゴリズム
アルゴリズムとデータ構造 第3章 ヒープ 6月10日分
第9回 優先度つき待ち行列,ヒープ,二分探索木
基本情報技術概論(第6回) 埼玉大学 理工学研究科 堀山 貴史
Cプログラミング演習 第10回 二分探索木.
アルゴリズムとプログラミング (Algorithms and Programming)
関数の再帰呼び出しとは ハノイの塔 リダイレクト レポート課題
データ構造とアルゴリズム論 第5章 整列(ソート)のアルゴリズム
プログラミング 4 整列アルゴリズム.
2009/10/23 整列アルゴリズム (1) 第4講: 平成21年10月23日 (金) 4限 E252教室 コンピュータアルゴリズム.
データ構造とアルゴリズム論 第5章 整列(ソート)のアルゴリズム
プログラミング 4 木構造とヒープ.
配列変数とポインタ 静的確保と動的確保 ポインタ配列 2次元配列 時間計測 第1回レポートの課題
15.cons と種々のデータ構造.
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分の復習
アルゴリズムとデータ構造 --- 理論編 --- 山本 真基
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
第9回 優先度つき待ち行列,ヒープ,二分探索木
ハフマン符号長の効率的な求め方.
アルゴリズムとデータ構造 2012年7月2日
アルゴリズムとプログラミング (Algorithms and Programming)
アルゴリズムとデータ構造 2011年6月28日
アルゴリズムとデータ構造 2011年6月16日
基本情報技術概論(第6回) 埼玉大学 理工学研究科 堀山 貴史
ヒープソートの復習 第12回.
アルゴリズムとデータ構造 2013年7月2日
アルゴリズムとデータ構造 --- 理論編 --- 山本 真基
ソートのプログラムの流れ 配列の中身を小さい順に並び替える a[1],a[2],…a[n]の値を順に出力する
平面走査法を使った 一般線分の 交点列挙アルゴリズム
ヒープソート.
ヒープソート.
アルゴリズムとデータ構造 2013年6月20日
情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.
情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.
参考:大きい要素の処理.
プログラミング入門2 第5回 配列 変数宣言、初期化について
Ibaraki Univ. Dept of Electrical & Electronic Eng.
Presentation transcript:

ヒープソートの演習 第13回

課題1 ヒープソートのサンプルプログラム(heapsort.pdf参照)は、ヒープソートを用いてデータを降順にソートする.これを実行すると以下のような結果が出力される このサンプルプログラムおよび教科書図4.7(p.95)を参考に、次ページの要求を満たすヒープソートのプログラムを作成しなさい

課題1の続き ・15個の整数 {29, 5, 4, 23, 6, 63, 12, 2, 53, 12, 33, 34, 14, 23, 37}  を昇順にソートする。 ・ソート前のデータ列と、ソート後のデータ列を出力する。 ・ソート後のデータ列を表示後、プログラム実行時にデータの交換   swap()と最大要素の出力と除去 deletemax()が何回呼び出されたか  出力する。 ・ソースファイル名は、t0629xx_hs.c とする。 (t0629xxは自分の学籍番号)

課題2 ・課題1のプログラムを修正して,乱数生成関数rand()を用いて発生  させた最大64000個の整数データをソートし,ソートにかかる時間  を測定できるようにせよ.  (演習I 課題3で学んだclock関数を使用するとよい.) ・データ列は表示しないでよい. ・ソースファイル名は,t0629xx_hs2.cとする. ・データ数nをいろいろ変えて実行し,各々のnにおいて、ソートにかか  る時間が、O(n2),O(nlogn),O(n)のどれに近いかを考察せよ。

レポートおよび課題の提出 ・レポート名はt0629xx.docとし、以下の項目を含むこと。 ・課題1のソースリスト ・課題1の出力 ・課題2のソースリスト ・課題2の出力 ・課題2の考察 課題の出力については、出力画面ウィンドウのダンプ、もしくは出力画面からのテキストコピーのどちらでも良い。 上記のファイルをコースナビのデータ構造とアルゴリズム(7/23)の レポートとして提出(アップロード)する。 〆切: 2008/8/6(水) 18時

ヒープソート(heap sort)(p.94) ヒープを用いてデータの整列を行うアルゴリズム 計算量 O (n log n) ヒープ : 配列により半順序木を実現したもの 常に子が親より 大きい木の例 常に子が親より 小さい木の例 3 10 5 9 8 9 6 8 9 10 6 3 7 6 10 18 9 4 1 2

ヒープソートの原理 リストL 2,9,5,6,… 1.ヒープ(半順序木)を作る(優先度つき待ち行列に入れる) 2.以下の処理を繰り返して並べかえる ヒープの先頭の要素と末尾の要素を交換 [先頭]~[末尾-1]の部分の半順序を回復させる 優先度つき 待ち行列 リストL 2,9,5,6,… 9 6 5 2

1.ヒープを作る 部分木の根の要素を適切な位置まで下げる操作を繰り返すことで,半順序木をボトムアップに構築する 10 6 9 5 15 15 ← a[0] 要素数 n = 15 6 9 5 15 15 12 ← a[n/2-1] (=a[6]) 3 18 9 8 11 9 20 10 ← a[n-1] (=a[14])

2.並べかえ 2-1 半順序木の根と右端の葉を交換 10 5 6 8 9 18 3 15 11 12 20 10 5 6 8 9 18 12 2-1 半順序木の根と右端の葉を交換 10 5 6 8 9 18 3 15 11 12 20 10 5 6 8 9 18 12 15 11 3 20 [0] [n-1] a 12 5 9 6 8 9 10 10 18 9 15 11 15 20 3

着目する節点の左の子は2*i+1、右の子はそのひとつ後ろにある 2.並べかえ(つづき) この部分の 半順序を 回復させる 2-1 残りの部分の半順序の回復 10 5 6 8 9 18 12 15 11 3 20 子が親より小さい間, 2つの子のうち 小さい方の子 と親を交換していく この部分のヒープを再構成 [0] [1] [2] [3] [4] [7] [8] [n-2] [n-1] a 12 5 9 6 8 9 10 10 18 9 15 11 15 20 5 12 6 10 3 着目する節点の左の子は2*i+1、右の子はそのひとつ後ろにある

プログラムの概要 1.ヒープ(半順序木)を作る 2.以下の処理を繰り返す begin heapsort ヒープの先頭の要素と末尾の要素を交換 トップダウンに[先頭]~[末尾-1]の部分の半順序を回復させる heapsort heapify downMin deleteMin downMin end