4 ポイント 投稿者 GN⁺ 2023-11-17 | 1件のコメント | WhatsAppで共有

B木についての学習

  • 二分探索木(Binary Search Trees, BSTs): 各ノードはキーを持ち、左のノードはより小さいキー値、右のノードはより大きいキー値を持つ。

  • BSTはキーがソート可能な場合にのみ機能し、片側にだけ値が追加されるとバランスが崩れて効率が低下する。

  • バランスの崩れたBSTはピボット操作によって修正できるが、ディスクベースのストレージには適していない(頻繁な再平衡化が必要で、隣接ノードが別のページに保存される可能性があるため)。

  • B木(B-Trees): 二分木よりも多くのキーとポインタを持つノードで構成される。

  • 各ノードは複数のキーを持ち、各キーに応じて複数のポインタを持つ(例: キーが17と24のノードは、17より小さいキーを持つノード、17と24の間のキーを持つノード、24より大きいキーを持つノードへのポインタを持つ)。

FactorioでのB木実装

  • Factorio(工場建設ゲーム)でのシンプルな二分探索木の実装: 各ノードは木製チェスト(キー)と2つの経路(ポインタ)で構成される。
  • 材料の価値を比較する方法がないため任意の順序を与え、フィルターインサーターを使って比較する。
  • B木の実装はさらに複雑で、各ノードは3つのキーと4つの子ノードへのポインタを持つ。
  • B木はより多くの情報を保存でき、手動でアイテムを並べ替える代わりに、後でよりよい表現方法を見つけるまで木を空のままにしておく。

GN⁺の見解

  • この記事で最も重要なのは、B木の概念を理解し、それをゲーム『Factorio』で実装してみる創造的なアプローチであること。
  • 読者にとって興味深い点は、コンピュータサイエンスの複雑なデータ構造をゲームを通じて視覚的かつ直感的に理解できる機会を提供していること。
  • このようなアプローチは学習をより楽しく魅力的なものにし、ソフトウェアエンジニアリングの基本概念をゲームのような非伝統的な媒体を通じて探究する新しい方法を示している。

1件のコメント

 
GN⁺ 2023-11-17
Hacker Newsの意見
  • Factorioというゲームの設計はコンピュータサイエンス理論を完全には反映しておらず、理論的に最適化されたプレイよりもゲームを楽しむことに重点を置いている。
  • Factorioでは自己平衡二分木(2-3木、赤黒木、B木)は再構成できないため、最も重要な機能である自己平衡機能が欠けている。
  • 最適化の観点では、Factorioのインサーターはベルトより遅く、インサーター4台でベルト1本あたり毎秒12個のアイテムを処理する一方、青ベルトは毎秒45個のアイテムを処理できるため、最適なベルト専用設計にはスプリッターの使用が推奨される。
  • コンピュータサイエンスとスプリッターの組み合わせには、ベネスネットワーク(2入力2出力クロスバーのみで構成されるネットワーク)の概念が含まれており、効率的な工場設計のためにはこれを研究する必要がある。
  • Factorioでは混合ベルト設計が重要であり、データベースの内部構造に関する本を読むのが役立つかもしれない。
  • 二分探索木(BST)はディスクベースのストレージには適しておらず、B木ノードの探索は二分木のポインタ走査より高速である。実装の複雑さは増すが、C言語を使わない限り、自分で木ベースのマップを実装することはめったにない。
  • 大文字が使われていないことが、文章を読むうえで妨げになりうると指摘している。
  • Factorio関連のコンテンツが共有され、また何百時間もこのゲームに注ぎ込みたくなる衝動をかき立てられる。
  • すべての作業はスプリッターだけで実行でき、チェストやフィルターインサーターは不要である。
  • Factorioの回路を使って実装されると予想していたが、そうではなかったと指摘している。