回 2-0 道 2 データ構造とアルゴリズム
アルゴリズムは、
読み終えたら身近な
この頁の流れ
身近な
5 つの 値段から 一番安い物を、 知らない 人に 渡せる 手順で 書けますか
アルゴリズムとは、
480 円、320 円、650 円、299 円、410 円の 5 つの値段から、
「一番安いのを
- 最初の
値段を、 今いちばん安い 値段として覚える - 残りの値段を 1 つずつ見る
- 見た
値段が 覚えている 値段より 安ければ、覚え直す - 全部
見終わったら、 覚えている 値段が答え
この 4 行がアルゴリズムです。
アルゴリズムは どう書くのか
アルゴリズムは、
決まった 手順で、 必ず終わる
アルゴリズムは、
この
- あいまいさが
無い。 「塩少々」のように 人に よって 量が 変わる 書き方をしない - 必ず
終わる。 繰り返しには、 止まる 条件がある - 答えが
正しい。 どんな 入力を 渡しても、 望む 答えを返す
順次、 分岐、 反復の 3 つの形
どの
| 形 | 意味 | 値段の手順では | Python では |
|---|---|---|---|
| 順次 | 上から | 最初の | 行を |
| 分岐 | 条件で | 覚えている | if 文 |
| 反復 | 同じ | 残りの | for 文、 |
分岐は
言葉、 フローチャート、 擬似コード、 プログラム
同じ
| 書き方 | 向いている場面 |
|---|---|
| 言葉 (日本語の | 人に |
| フローチャート (流れ図) | 分岐と |
| 擬似コード (言語に | 試験や |
| プログラム (Python など) | コンピュータに |
プログラムは、
フローチャートは、
同じ 答えでも、 手順しだいで 手間が変わる
同じ
値段の
もっと
探す手順 (2-1)、
動かして確かめる
1 本目は、冒頭の 4 行の手順を
動かす 一番安い値段を探す
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
299cheapest = prices[0] が順次、for が反復、if が
2 本目は、
動かす 比べた回数を数える
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
5 4 4 0
10 9 9 0
1000 999 999 0
1000000 999999 999999 0比べた
3 本目は、math.gcd と
動かす 最大公約数の 2 つの手順
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
48 18 6 4 3 True
1071 1029 21 26 3 True
1000000 1 1 999999 1 True3 組とも、2 つの手順のmath.gcd とも
アルゴリズムは どこで 壊れるのか
手順は、
止まる 条件に 届かない反復
反復は、
動かす 止まらない反復
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
10 5
7 打ち切り10 は 5 回で 0 にn != 0 ではなく n > 0 と
順番を 入れ替えると 答えが変わる
順次は、
動かす 順番を入れ替える
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
10% 引きが先 400
券が先 450同じ 2 つの操作でも、10% 引きが先なら 400 円、券が先なら 450 円です。
初めの 値を 0 に すると、 一番安い 値段を見落とす
一番安い
動かす 初めの値の誤り
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
初めを 0 0
初めを先頭 299初めを
手順が 正しいかを 仕事で どう 確かめるのか
仕事では、
- 確かな
答えと 照らす。 一番安い 値段なら Python の min、最大公約数ならmath.gcdと同じ 答えに なるかを、たくさんの 入力で比べる - 境目を
試す。値段が 1 つだけ、 同じ 値段が 並ぶ、 負の 数が ある、 空の 並び、の 4 つは書き間違いが 出やすい。 Python の minは、空の 並びを渡すと ValueErrorを出すと 公式文書に 書かれている。 自分の 手順も、 空の ときどう するかを 決めておく - 反復ごとに、
止まる 条件へ 近づいているかを読む。 whileを書いたら、 どの 値が 毎回どちらへ 動くかを 言葉で 言えるようにする - 回数を
数える。 比べた 回数を 出して、 データが 2 倍に なった とき回数が 何倍に なるかを見る
照らす試験
def test_cheapest():
cases = [[5], [3, 3],
[-1, 4, -7],
[480, 320, 650]]
for xs in cases:
assert cheapest(xs) == \
min(xs)関わる実例
コードの 順番の 入れ替えと 止まらない 注文 (2012年8月1日)
2012年8月1日、アメリカの
発表は、2 つの技術の
崩れた前提は 2 つあります。
出典は SEC Charges Knight Capital With Violations of Market Access Rule (SEC) です。
よくある問い
アルゴリズムの 読み方と 語源は何ですか
読み方は
アルゴリズムと プログラムは 何が 違いますか
アルゴリズムは
SNS の アルゴリズムとは 何の ことですか
SNS で
アルゴリズム思考とは何ですか
問題を、
アルゴリズムは どう 勉強すれば よいですか
まず、
確認クイズ
答えだと
1 問目
「全部の
2 問目
値段が 1,000 個並んでいます。
3 問目
止まる
4 問目
この
一番高い値段
prices = [480, 320, 650,
299, 410]
top = 0
for p in prices:
if p > top:
top = p
print(top)説明課題
朝起きてから
自分の
この回の 先の一歩
仕事では、
一次資料
どれも 2026年10月27日に開いて、
- algorithm (NIST、
Dictionary of Algorithms and Data Structures、英語) 。アルゴリズムを望む結果を 得る ための 計算できる 手順の 集まりと 定めている こと、 語源が ペルシャの 著者アル・フワーリズミーで、 計算の 決まりの本が 825 年ごろであること - Euclid's Elements、
Book VII、 。2 つの数のProposition 2 (Clark University、英語) 最大公約数を 求める 命題である こと、 小さい ほうを 大きい ほうから 引き続けて 残った 数で 続ける手順 - SEC Charges Knight Capital With Violations of Market Access Rule (アメリカ証券取引委員会、英語)。2013年10月16日の発表、2012年8月1日の取引の
始まりから 45 分で 212 件の客の 注文を 埋めようとして 400 万件を 超える 注文を 送った こと、 3 億 9,700 万株を 超える 取引、 4 億 6,000 万ドルを 超える損、2005 年にコードの 一部を 前へ 動かしたこと、2012 年 7 月の終わりに 新しい コードを 正しく 入れなかった こと、 注文が 埋まった ことを 見分けられなかったこと - Built-in Functions、
min (Python 公式文書、英語) 。一番小さい物を 返すこと、 空の 並びに default が無いと ValueErrorを出すこと - math、
gcd (Python 公式文書、英語) 。整数の最大公約数を返すこと
次へ
道 2 データ構造とアルゴリズムの回
- 2-0アルゴリズムとは順次、
分岐、 反復の 3 つで書く手順この回 - 2-1線形探索と二分探索100 万件でも
20 回で見つかる頁で読む - 2-2バブルソートと
挿入・選択ソート遅い ソート 3 つ、 2 倍で 約 4 倍頁で読む - 2-3クイックソートと
マージソート速い ソート 2 つ、 平均と最悪頁で読む - 2-4スタックとキュー積む順と並ぶ順頁で読む
- 2-5再帰自分を
呼んで 小さくする頁で読む - 2-6木と
二分探索木たどる 順、片寄り頁で読む - 2-7ハッシュテーブル鍵から
一気に 引く、衝突頁で読む - 2-8ダイクストラ法と最短経路点と
線、 幅優先、 重みのある道頁で読む - 2-9動的計画法同じ
計算を 2 度しない頁で読む - 2-10試験と
面接で確かめる基本情報 科目B、 道場 10 問、 面接 20 問頁で読む
