2025年度 アルゴリズムとデータ構造2 (木 1)(木 5) (1731, 1732)
情報工学科2年、メディア工学科2年



例題集 (構文)
例題集 (変数の役割)
プログラムに コメント
ガイドライン
アルゴリズムとデータ構造1 (2024)
ルーブリック
スタイルと読み
例題1
(読みやすくしよう)
例題2 (少し長い例)
内部データのイメージツール (2021)
情報技術者試験
(午後問題 疑似コードを)
レポート例 (アルゴ1の最初)

14回目へジャンプ



各回のポイント一言 (2025)  

  1. イントロ、計算量(グラフのイメージ、O記法)、配列、マージ
  2. 再帰、マージソート、アドレス渡しのswap関数(定番プログラムの復習)
  3. マージソート確認、分割コンパイル (swap関数を例に), partition関数
  4. クイックソート、ソートまとめ、構造体 (typedef sturuct), 動的確保 (malloc)
  5. リスト 2つの表記法 配列による実装法 2つの表現
  6. リスト 構造体による実装法 ③はメモリ図 ④はC言語のプログラム
  7. スタックとキュー この授業ではリストをスタックとキューに見立てます
  8. グラフ,  定義と2つの実装法, 木 (工学実験1との関連), 深さ優先探索と幅優先探索
  9. 深さ優先探索と実装
  10. 幅優先探索と実装
  11. ダイクストラ法
  12. 二分探索木 (Cプログラミングのゴール)
  13. ヒープ (プログラミング課題は、ここで終了)
  14. 定番問題と関連話題、再帰 vs 積み上げ、部分解の利用

  15. P ≠ NP 問題、ナップザック問題と動的計画法


話題、キーワード 例題、演習 ポイント 配布資料、教科書
(1)
4/10
ウォーミングアップ

A. 配列処理

B. 再帰
(停止条件、再帰条件)


マージソートの
根幹部

マージ
すぐ、始めましょう

PROG 4.3
(要素数固定 配列処理)
例題集 403 に 解答例

PROG 9.4
(長さMの配列
再帰関数)
例題集 904 に 解答例

STEP1.1
(マージ)

解答例
(p 50 疑似コードと解説を読もう)

Pythonの例

 配列とループ

 再帰
  停止条件
  再帰条件

(2)
4/17
マージソート
(merge sort)


ウォーミングアップ


C. アドレス/ポインタ
STEP1.2
(マージソート)

解答例

Pythonの例
アドレスとポインタ

アルゴリズム2 例題集 11
(復習、準備すること)
アドレスとポインタ
入門編 解説資料

(パワーポイント内で指示)
(3)
4/24
ウォーミングアップ

D. 分割コンパイル


クイックソートの根幹部

partition

例題集 0704
分割コンパイル
(教科書の解答プログラムを読むために)

MaNaBo 3回目
フォーラムに分割コンパイルが
うまくいかない場合について

STEP2.1
(パーティション)

1.swap関数を再利用
分割コンパイルバージョン
解答例
(pp.49-55)
解答例
(プリント文付)

2. 全ての関数を1ファイル
べったり1ファイルバージョン
解答例


Pythonの例
  アーキテクチャの
資料5
(コンパイル過程)

コンパイラ、リンカ
  
  ソースファイル、オブジェクトファイル
   エクゼファイル

(カタカナ語がたくさん)
(4)
5/8
分割統治法
(divide-and-conquer

クイックソート
(quick sort)


ウォーミングアップ


E. 構造体
F. 動的確保

例題集 12,13

ここまで準備は終了

STEP2.2
(クイックソート)
解答例

Pythonの例


STEP9.2
(バケットソート)
  
(自習) その他の
ソートアルゴリズム
STEP9.1
(シェルソート)

STEP9.2
(バケットソート)

STEP9.3
(基数ソート)
  • 基本ソート:選択ソート、バブルソート、挿入ソート
  • 改良ソート:ヒープソート、シェイカーソート、コムソート、シェルソート
  • 高速ソート:マージソート、クイックソート
  • 条件付きで高速:バケットソート、基数ソート
資格試験対策に必要
(5)
5/15
基本的データ構造

連結リスト
(配列による実装)
STEP3.1
(配列による実装)

STEP3.1A
ノーヒント
STEP3.1B
少しコメント

STEP3.1C
自分の例 解答実行例
  2章pp.17-32

STEP3.1は教科書p.31の2.12から17までの解答をまとめたもの


実行例は問2.11
(6)
5/22
連結リスト
(構造体の動的確保による実装)
STEP3.2
(構造体の動的確保による実装)

STEP3.2A
ノーヒント

STEP3.2B
delete以外少しコメント

STEP3.2C
(課題 cons関数、append関数の作成
解答

STEP3.3
(新幹線駅問題実行例)
分割コンパイル STEP3.2は、演習問題2.3の解答をまとめたもの
(7)
5/29
スタック
キュー


STEP4.1A
(スタック;配列)
STEP4.1B
(スタック;構造体)

STEP4.2A
(キュー;配列)
STEP4.2B
(キュー;構造体)



STEP.4.1C
(リストとスタック)
解答
STEP4.2C
(リストとキュー)
解答

教科書との対応

4.1A 問2.2 - 2.5
4.1B 演習2.1

4.2A 問2.7 - 2.10
4.2B 演習2.2

STEP4.1C 演習問題2.6
STEP4.2C 演習問題2.7


教科書の解答を利用してよい
(8)
6/5
グラフ

コンピュータ上の表現

例題0705
(パイプとリダイレクト)

例題0703
(main関数の引数と二次元配列)



STEP5.0 (課題の準備)
(モデル木の辺の情報生成)

STEP 5.1 (課題)
(モデル木 接続行列)
解答


(情報工学実験向け 参考)
STEP5.1.1
(モデル木 深さdのノード)
解答
(工学実験では、もっと小さいプログラムをnode.cとして配布予定)

例題1303
(リストの別実装
append関数)
隣接リストを、隣接行列で表現 6章
(pp.123 - 128)

工学実験受講者は
例題をみておくこと


やさしく学べる離散数学
5章§1 1グラフ
(pp. 129-139)
(9)
6/12
深さ優先探索
(縦型探索)
STEP5.2
(図6.7のグラフをリスト構造にしてみただけ。STEP5.4に組み込み))

STEP5.3
(リストとスタック、キュー関係まとめただけ。
練習問題を実行してみよう)

STEP5.4
(深さ優先探索)
解答

隣接リストを、リスト構造で表現
(メモリ図の例はSTEP5.2)

隣接リストを辿るプログラム
探索の管理法
(探索の順番、訪問済情報)
6章
(pp.129 - 134)

疑似コードを読む
巻末の問題の解答コードを参考にしよう
(10)
6/19
幅優先探索
(横型探索)

STEP5.5
(幅優先探索)
解答1

解答2 (リスト)
  教科書を読む
疑似コードを読む
プログラム例を利用する

2つの探索の特徴比較

探索管理リストの操作
(深さ スタック
幅 キュー)
6章
(pp.129 - 134)
(11)
6/26
グリーディ法
(貪欲法)

ダイクストラ法
(最短経路)
STEP6.1
(STEP5.2を改良
重み付きグラフ
例題の準備)

STEP6.2
コイン問題

STEP6.3
(ダイクストラ法)
p.139 問6.3
解答例


以下、オプション

STEP6.4
(最短距離と最短経路。STEP6.3の問題)
p.140 演習問題6.3

STEP6.5
(富山からの問題)
STEP6.1をベースに
教科書の疑似コードを
プログラム

(minのエラーが出る人は、関数名をlessなどに変更のこと)

(deleteにエラーが出る場合は、関数名をdelete1などに変更のこと)
ダイクストラ法は
6章
(pp. 135-140)

6章p.140の
演習問題の
6.2 6.3は自習
(12)
7/3
二分探索木
STEP7.1 (必須)
要素を追加
探索
(insert)

STEP7.2 (オプション)
要素を削除
(delete)

STEP7.1解答
STEP7.2 解答
STEP7.1
printtree
max_v

printtreeについては
もっとよい出力を作れるなら
もちろん、そちらでOK
4章
(pp. 76-82)

4.3.3 平衡木(AVL木, 2-3木、B木)については データベースの授業

秋期の工学実験2
伊藤先生担当
(13)
7/10
ヒープ

ヒープソート
STEP8.1
配列でヒープ
削除により再構成
下方移動(down_heap)

STEP8.2
追加により再構成
上方移動(up_heap)
解答

STEP8.3
入力後に、ヒープ作成

STEP8.4
ヒープソート
(降順)
解答
  • 課題 STEP8.2
  • オプション課題 STEP 8.4
4章
(pp. 88-94)
(14)
7/17
有名な例題と関連話題

フィボナッチ数列

(部分解の記録と利用)

(やってみよう)
ハノイの塔
エイトクイーン
ナップサック問題
STEP10.1
(フィボナッチ数
 再帰)

久しぶりに
写経ツール(2021)

STEP10.2
(部分解の記録、利用)
(再帰)

STEP10.3
(部分解の記録、利用)
(非再帰、積み上げ)

  • フィボナッチ数 n=45で実行を
  • STEP10.2が、考えたいこと
  • 再計算(時間) vs 計算記録 (空間)

7章
(pp.141 - 153)
ナップサック問題
(p.146 例 7.3)


以下 予定
(15)
7/24
再帰

全解探索
バックトラック

動的計画法

STEP11.1

(ハノイの塔)

STEP11.2
(8クイーン)

STEP12.1
(ナップサック問題)
  • 7章を紹介します
  • P, NP
  • NP完全
  • 近似解
準備済
以上、15回です