2024年度 アルゴリズムとデータ構造1 (金3) (1731, 1732)
情報工学科1年



例題集 (構文)
例題集 (変数の役割)
プログラムに コメント
ガイドライン
写経ツール (2021)
学生用ポータル
スタイルと読み
例題1(読みやすくしよう)
例題2 (少し長い例)
情報技術者試験
(午後問題 疑似コードを)
レポート例

15回目へジャンプ



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

  1. Cプログラミング 復習演習の時間1
  2. Cプログラミング 復習演習の時間2
  3. アルゴリズム、時間計算量入門
  4. 時間計算量を形式的に求める方法
  5. 時間計算量を形式的に求める方法 線形探索と二分探索
  6. 時間計算量 和の規則と積の規則 文字列照合
  7. ハッシュ法、素朴なアルゴリズム、kmp法(失敗関数)
  8. kmp法 (失敗関数), bm 法 (スキップ関数)
  9. bm法 (スキップ関数), 再帰(基本編)
  10. 最大公約数の問題とアルゴリズム
  11. 素数の列挙の問題とアルゴリズム
  12. 素数と暗号、巧いアルゴリズム
  13. ソートA (Selection Sort)
  14. ソートB (Insertsion Sort)
  15. ソートC


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

いじわるな問題
(MaNaBoクイズ)
例題集
(アルゴリズム1)

2つの課題問題
(ページ中盤
課題 0101
課題0102)
プログラムスタイル と 読み 1章 pp.1-6を確認

資料1. .アルゴリズム、フローチャート、疑似言語
(2)
10/4
ウォーミングアップ2

例題集 0102の
フローチャート
(二分岐型(双岐)選択
0103
(二重ループ)

0104
複数の解法を意識
nが大きくなると、実行時間が、どのように増加するかを考えてみよう)
プログラムにコメント
  やってみよう
資料2
(表)アルゴリズムの定義
(裏) 時間計算量、実行回数とO記法の「ざっと入門」編

1章 pp. 7-14を準備
(3)
10/11
アルゴリズム)

配列操作
STEP1.0
(配列中の最大値)
(教科書p6 例1.1)

解答例
(ツールから)
要素数nが大きくなると、実行時間はどのように増加するかを考えること

1桁の乱数 (1〜9) N個の 
配列中に

STEP1.1
(7があるとき、ある)
解答例

STEP1.2
(なければ、ない)
解答例

STEP1.3
(あれば、個数も)
解答例
<
  • 乱数使用法 (確認)
  • 7 定番操作 0702 (1桁乱数 (1〜 9) の生成、格納と表示) (乱数の説明はこちらも)
イメージとコードの
対応付け ツール (2018)
(4)
10/18

探索(検索)

線形探索

レポートに注意!
STEP 2
(キーxが、配列sの要素にあるか。あれば、添え字を.
まずは、素直に探そう)
解答例

STEP2.1 (p.73)
(線形探索; 上から探索)
(パーツ分解;関数)
解答例

コーディング過程例
少しずつコーディングする例
(2018)
   探索の準備と他の話題を
  • プログラミング技法
    • フラグ (flag) (STEP1.2)
    • 番兵 (sentinel) (STEP 2)
  • いつでも要素データを全て調べる 問題 (STEP 1)

    vs

    あれば、そこで終わってよい問題 (最悪、ないなら全てを調べる) (STEP 2)

  • 全体をパーツに分解、組み合わせて作る
     (STEP2.1は、 STEP2.0のmain部を、機能ごと関数に分割. p178 問4.1の解答プログラムも参考に)
3.線形探索

breakは、例題0302
関数は、例題08


4章71-73
(5)
10/25
二分探索

STEP2.2 (p.75)
(二分探索;半分ずつ範囲を。
古い教科書の回答はそのままでは課題の解答になりません。課題中のデータは整列済です)
解答例


STEP2.2
python解答例


STEP2.3
ハッシュ法

STEP2.4
(ファイル中の整列化データを線形探索)

STEP2.5
(ファイル中の整列化データを二分探索)

STEP2.2
  • ファイル作成、読み書き法
    以下、例題集
  • 10万個データ検索の準備
    0104
    データファイルを作る
    (10万個、ソート)
    (data.txt)
  • 0105
    ファイルから10万個のデータを配列に (現実的な読み込み)
  4.二分探索


STEP2.3の実装は自習

  STEP2.4
  STEP2.5
は、使ってください。
(6)
11/1
ハッシュ法
(STEP 2.3)

文字列照合
イントロ
STEP3.1
(テキストとパターン
素朴な方法)
  文字列の定番処理

  k=0;
  while(s[k] != '\0') {
    各文字の処理;
    k++;
  }

  例題集では、5
4. (裏) まとめ、ハッシュ法 O (1)
11/3 学校祭です!
(7)
11/8
kmp法のエッセンス
kmp法
失敗関数のなぞり
STEP3.1A
(素朴な方法の解答、教科書との対応)

STEP3.1AA
(別解の例)

STEP3.1
python解答例

(以下、付録)

STEP3.1B
(入力方法変更)

STEP3.1C
(文字列操作の組み込み、標準関数の利用。p.101脚注にある比較終了条件)

STEP3.1D
(配列とポインターによるもの)


  • kmp法
    P="abcab"を例に
  • kmp法観察ページ (2019)
  • 種明かしは、授業で
  • Pに対する失敗関数
  • 失敗関数を用いた照合過程

5. kmp法演習
(8)
11/15
(簡略)bm法
スキップ関数のなぞり
以下、2つの問題はオプション

STEP3.2

(kmp法)
(解答例)

STEP3.3
(簡略bm法)
(解答例)
(別の例)

課題の〆切は2023年12月3日
  • kmp 資料5 解答 (課題)
  • 計算量も上のページに

  • Pを利用するスキップ関数
  • スキップ関数を用いた照合過程
6. bm法演習
(9)
11/22
再帰
Part 1
(基本編)

基本例題

STEP4.1a
(階乗、非再帰)
クイズ編(2013)
解答

STEP4.1b
(階乗、再帰)
クイズ編(2013)
解答



演習問題

STEP4.2
(よくわかるC p.51
解答)

STEP4.3
(数式表現を読む)
(作る)
解答

STEP4.4

(実行過程)

STEP4.5
(より面倒な数式表現)
解答


定番の例題
フィボナッチ数列
(解答は例題集 9 )

STEP4.6
(STEP2.2 二分探索
再帰版)
解答

STEP4.6
Python解答例
 階乗(再帰)を 写経 (2021) 

1. 再帰的(定義、プログラム)
  • 停止条件
    • 条件は
    • 戻り値は
  • 再帰条件
    • 条件は
    • N-1次の問題にするには
    • N-1次の問題の答があるとしたら、Nの答は
 2. 実行過程のイメージ
    STEP4.3は、複雑な例

 3. (資格試験にあるような)数式表現
    問題例

 4. 再帰の考え方で問題を見る。作る。
ループと再帰
実行イメージページ


再帰的なプログラミング
(10)
11/29
最大公約数
イントロ

解説
巧くない,
素朴法
STEP5.0


巧い方法

STEP5.1
(ループで; ガイド付き)
解答例)
実行 (2016)

STEP5.2
(再帰で; ガイド付き)
解答例)
実行 (2016)

参考 python


STEP5.3
(もう一つの方法)
(資格問題例の実装)
  • 自分でやってみる
  • 語る
  • 仲間の表現も参考に
課題はパワーポイントで
確認のこと
  • 5.1
  • 5.2
  • 計算量 O 記法 
(11)
12/6
N以下素数列挙
イントロ


MaNaBoで

競争の部屋
(STEP6.1 ②を
自分がやってみる)

みんなの方法一覧

代表的な解法確認
(自分はどの方法なのかをMaNaBoに)
STEP6.1
(自分の方法をプログラム)

3解答例比較(2016)

STEP6.1a
STEP6.1b
STEP6.1c
二重ループを 写経 !

「iより前」、「iより後ろ」など

iのループを固定して
jの動きを考えよう
  • 授業中は、自分の方法を表現するところまで
(12)
12/13
MaNaBoで

謎解きの部屋
(エラトステネスのふるいの確認)



解説 
(数学は自習)

STEP6.2
(エラトステネス法の実装)

解答例

関数を用いた例

再帰的関数

なぞりのイメージから
プログラムのイメージ


対応付けツール (2018)
コーディング過程 (2018)
実装と
計算量
(直観レベルでよい)

素因数分解と暗号、署名
(RSA暗号)
プログラム
(13)
12/20
ソート  イントロ

MaNaBoで

謎解きの部屋
1. 自分がやってみる
2. ソートA

Sort Aについて
(まとめはMaNaBo)

ソート

STEP7

(全体のテンプレート)

STEP7.1
(STEP7をうめよう)

解答

swapを 写経

STEP7
使用している配列は大域変数
  (よくわかるC p.46)
実装と
計算量分析

教科書:解説
pp. 33-38
2024     よいお年を
2025     飛躍の年に


(14)
1/10
MaNaBoで

謎解きの部屋
1. ソートB

Sort Bについて
(まとめはMaNaBo)

STEP7
(全体のテンプレート)

STEP7.2
(STEP7をうめよう)

解答1

解答2
  • 1回だけ。。
  • 繰り返し:肉付けしよう
実装と
計算量分析

教科書:解説
pp. 38-42

計算量は42ページ
ついに
(15)
1/17
MaNaBoで

SortC

STEP7.3
(ソートC)

解答

教科書p.48の工夫と
実装 p.171は自習
  • 1回だけ。。。
  • 肉付けしよう

アルゴリズム確認のあと

教科書:解説
pp.. 43-48
計算量は47ページ

バケットソートは65ページ
1/31 試験

13:00開始
12:50には着席、準備

座席指定です

13:20 入室不可 (判定F)
13:30 退室可
     課題 (重視)
      +
     試験
  • 25問 4択問題
  • 筆記問題
春へ
    春は:
  • 3章 3.3 から
    • マージソート
    • クイックソート
    • 再帰、分割統治法
  • 2章
    • スタック
    • キュー
    • リスト
  • 6章
    • グラフと探索
  • 4章
    • 二分探索木
    • ヒープ
  • 7章
    • 難問とは

   C言語による実装のためには
  • 再帰
  • 構造体
  • アドレス、ポインター
  • メモリ
情報工学科には「よくわかるC言語の7章以降」を、準備しておくことを、アドバイス
2025年度 アルゴリズム2 木曜日1時間目です 2時間目も必修授業
以下 予定です