---
# System prepended metadata

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

---

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

## 第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 配列
よく使っていてデータ構造も理解しやすい章節。
この図↓が重要だと思います。
![](https://i.imgur.com/2VbYFzB.jpg)


### 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
   