---
# System prepended metadata

title: 問題解決力を鍛える！アルゴリズムとデータ構造

---

# 問題解決力を鍛える！アルゴリズムとデータ構造

## 日程

12/9

## 第1章

- 任意参加
- ファシリテーター: okura

### 話す・書く順番決めルーレット

in Ruby
```ruby
['hsu', 'chen', 'teruya', 'kanazawa', 'okura', 'tsujita'].shuffle.each { |v| puts ">[name=#{v}]\n\n" }
```

in JavaScript
```javascript
const l = ['hsu', 'chen', 'teruya', 'kanazawa', 'okura', 'tsujita']
l[Math.floor(Math.random()*l.length)]
```

### ファシリテーター決め方

- `%w(hsu chen teruya kanazawa okura kanno)`の順番でやっていく

### 参加者がやること
- 事前に決められた章を読む
- 学んだことやわからなかったことを書き込む（任意）
 
当日
- 最初に感想や質問を書く時間を設ける(10分)
- 時間枠 60分
- 延長枠 30分

### 勉強会時にやること

    各自学びや気付き、疑問を発表していく
    ファシリテーターがよしなに議論を進める
    終了前に勉強会を振り返る？（KPTなどで）← 60分のときに仮締め

## 各自が書き込む場所



>[name=kanazawa]

内容特に書くことなし。
数学が苦手なので「1−2−3−5−4」の順番で読みたい。
ひとまず素数と素因数分解を復習しました。

>[name=chen]

### 1.1 アルゴリズムは何か
- 二分探索法 (binary search method)：真ん中で切ってどちらかに絞っていく
- 線形探索法 (linear search method)：選択肢を順に調べていく方法

自分の質問：例えば 0~10000 なら、二分探索法で何回の質問で当てる可能って、どう計算します？

-> 2log10000

### 1.4 アルゴリズムの記述方法
> - 年齢当てゲームに対する線形探索法、二分探索法　
> - 虫食算パズルに対する深さ優先探索
>   - 「とりあえず突き進む」という動作を行き詰るまで繰り返し、行き詰ったら一歩戻って次の選択肢を試すことを繰り返す。　
> - 迷路に対する幅優先探索
>   - 出発点に近いところから順に探索する

自分の質問：問題を解決する時、何の方法を使うのがどう判断します？
例えば素数判定の問題なら？

>[name=okura]

### 1.1 アルゴリズムとは何か

「誰でも繰り返せる・再現できる」みたいな説明があった気がする。

### 1.2 深さ優先探索と幅優先探索

単語は知っていたけど、説明を読んでだいぶ納得した。

### 1.3 マッチング

なるほど。

### 1.4 アルゴリズムの記述方法

実際に動くコードのほうが自分はわかりやすいのでありがたい。

### 1.5 アルゴリズムを学ぶ意義

ちょうど今日、uzduraさんがコンピューターサイエンスを学ぶ意義をフィヨルドのDiscordで語っていたけど、似ているところがある。

> 僕の考えとしては
> 1. 趣味プログラミングなら別にCSやらなくていい。しかし、後述するようにインターネットにコードを公開することは責任を伴うことは理解しないといけないと思う
> 2. お金をもらう立場になりたいなら、CSの素養がない時にできるプログラミングと、CSの素養を伴い、CSの課題を解決するためのプログラミングでは解決できる問題のレベルが格段に違うということを知っておくべきだし、より多くの人の問題を解決したいなら、CSを知っている人になるべき
> 3. 残念なことに、ソフトウェアは攻撃を受けることが前提の世界になってしまった。そのため、脆弱性に関する知識が必要で、そのためにはそれなりにちゃんとCSを理解していないといけない。なのでやはりこれもCSを知るべき理由になる
> 3.1. 従って趣味でもインターネットにソフトウェア（Webサービスを含む）を公開するのであれば、脆弱性や攻撃手法についてキャッチアップできる程度にはCSの知識を持っていないと、最悪自分の財産を失ったり人に迷惑をかけることになりかねない（で、そのレベルのCSはなんというか、情報系の学部4年生レベルには必要）

章末問題は1.4以外はできた気がする（虫食い算のプログラムってどう書くんだろ）

https://recursionist.io/

>[name=tsujita]

- 幅優先探索と深さ優先探索をコードでどう実現するのか気になります（次週以降への期待・・！）

## 振り返り

- kanazawa
    - 別の本を読んでいた...!

-  chen 
    - 第二章面白そうですw 

- okura
  - 虫食い算コードを書くぞ…

- tsujita
    - 私は1.4は力技で解きました

## 終了後ファシリテーターがやること
- 次回のファシリテーターを決める
  - @tsujita-haruna 
- 読む範囲を決める
  - 第2章