# 問題解決力を鍛える!アルゴリズムとデータ構造 ## 第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