Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kotlinと探索アルゴリズムでスマートに 木構造データをさばく / Handle Tree ...

YuitoSato
September 22, 2021

Kotlinと探索アルゴリズムでスマートに 木構造データをさばく / Handle Tree Data with Kotlin and BFS

https://server-sider-kotlin.connpass.com/event/224077/

こちらのイベントの資料です。
Kotlinと探索アルゴリズムをつかって木構造のデータをKotlinのコレクションクラスのようにスマートに扱う実装について紹介しています。

YuitoSato

September 22, 2021
Tweet

More Decks by YuitoSato

Other Decks in Technology

Transcript

  1. @ 2021 Loglass Inc. 2 • 佐藤 有斗(ゆいと) • 株式会社ログラス

    • TypeScriptとKotlinとScalaの民 • 好きなゲーム: スマブラ、原神 # 自己紹介
  2. @ 2021 Loglass Inc. 3 # 株式会社ログラスについて • 創業2年目のシードスタートアップ •

    プランニング・クラウド • Kotlin × Spring Boot 次世代型プランニング・クラウド「Loglass」を開発するログラス、 ICCサミット 「カタパルト・グランプリ」で優勝 https://prtimes.jp/main/html/rd/p/000000036.000052025.html
  3. @ 2021 Loglass Inc. 16 tree.map { it * 10

    } な感じで書きたいな〜
  4. @ 2021 Loglass Inc. 21 # 1. 木構造を抽象化する • これでどんなデータでも木構造にできる!

    あ い え う Tree<String> True False False Tree<Boolean> Hoge1 Hoge2 Hoge3 Tree<Hoge>
  5. @ 2021 Loglass Inc. 26 # 2. mapのインターフェースを考える tree.map {

    data -> data * 10 } つまり (Treeの中身) -> 変換したい型の関数
  6. @ 2021 Loglass Inc. 28 # 2. mapのインターフェースを考える 1 2

    4 3 Tree<T = Int> あ い え う Tree<S = String> f: (T) => S • つまりこう
  7. @ 2021 Loglass Inc. 41 # ⚠ここからは尺の関係上ざっくり説明します • 全てを理解しようとしないでください •

    あ〜こんなやり方あるんだな〜で大丈夫です 👍 • コードはこちらです ◦ https://github.com/YuitoSato/kotlin-sandbox/blob/master/src/main/kotlin/tree/Tre e.kt
  8. @ 2021 Loglass Inc. 44 # 末尾再帰最適化 (tail call optimization)

    とは~ ざっくり説明 • 一部のプログラムではビルド時に 末尾呼び出しの再帰関数を単なる While文に最適化してい る
  9. @ 2021 Loglass Inc. 73 # まとめ → 世の中にツリーは多い →

    ツリーのデータ変換は再帰関数が多くてつらい → map関数を作って再帰処理を隠蔽する → と思ったらスタックオーバーフローしてしまった → スタックオーバーフローを回避するために幅優先探索で実装する → ハッピー!
  10. @ 2021 Loglass Inc. 75 # 余談: Q. スタックオーバーフローってどれくらいで起きるの? 🤔

    A. 手元のマシンで試したら10000階層くらいで発生した(※JVM内で格納しているスタックの量 に寄ります)