# 問題解決力を鍛える!アルゴリズムとデータ構造
## 第8章(8.1~8.4)
- 任意参加
- ファシリテーター: tsujita
### 話す・書く順番決めルーレット
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=tsujita]
- 配列は特定の要素を探すと重たくなる
- なので、特定の位置に挿入する・削除することが、配列は向いてない(データ量による?)
- それを解決できるのが連結リスト
- 個人的にわかりやすかった記事:https://zenn.dev/masahiro_toba/books/436c018f5cd4e2/viewer/af0195
>[name=chen]
### 8.2 配列
よく使っていてデータ構造も理解しやすい章節。
この図↓が重要だと思います。

### 8.3 連結リスト& 8.4 連結リストの挿入操作と削除操作
面白くて簡単に理解できる説明ですね。
C言語もよくポインタを使っています。
ロジック的には配列とは違うので、
最初は少し分かりにくいと思ったんですが、
考え方が変わるとなるほど!と感じになりました。
`javascript`では連結リストの概念がないので残念...
>[name=teruya]
> 各データ構造の各クエリに対する計算量
それぞれ強みがありますがhashって強いですよね…
[Ruby の delete\_ats メソッドを書いた(配列の複数要素を O\(N\) で高速に削除) \- ごぐたんのブログ](https://gogutan.hatenablog.com/entry/2020/03/19/044546)
[ruby でのシンプルな連結リストの実装 \- dak ブログ](https://blog.goo.ne.jp/dak-ikd/e/095434ea3ece4393769aae2112a6bc10)
>[name=hsu]
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array
> 配列使うときにBigO意識することが多い
> LinkedListはインデックスないArrayを考えるとよいかも
> Javascriptの配列はDynamic、C++もです,固定的な配列はJavaとか?
Java - LinkedListとArrayListの違い
https://rainbow-engine.com/arraylist-linkedlist-difference/
## 振り返り
> [name=tsujita]
ベンチマークの使い方を学んだ👏🏻
>[name=teruya]
データ構造に詳しいと、仕事のプロダクトでもたまーに役に立ちますね!
>[name=chen]
照屋さんのコードがすごい!
メソットの計算量の比べには面白かった。
ポインタの概念を運用したいですね。
>[name=hsu]
>linkedlistの例は思いつかなくて残念です。
## 終了後ファシリテーターがやること
- 次回のファシリテーターを決める
- chenさん
- 読む範囲を決める
- 8,5~8,7