問題タブ [multiway-tree]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - ゲーム ツリー (潜在的に無限のバラの木) の繰り返されるサブツリーを記憶する方法は?
Haskell でNegamaxアルゴリズムを実装しようとしています。
このために、私はゲームが取り得る将来の可能性をバラの木 ( Data.Tree.Forest (depth, move, position)
) で表しています。ただし、多くの場合、2 つの異なる一連の移動で到達できる位置があります。繰り返される位置 (のサブツリー) を再評価するのは無駄です (そしてすぐに非常に遅くなります)。
これが私がこれまでに試したことです:
Tying the Knotのバリアントを実装して、共通のサブ結果を共有します。ただし、(潜在的に無限の)リストの結び目を結ぶことについての説明しか見つけることができず、サブツリーの再利用については何も見つかりませんでした。
私が検討した別のアプローチは、
State
モナド内にツリーを構築することでした。保持する状態は、Map (depth, position) (Forest (depth, move, position))
明示的なメモ化を実行することですが、これも適切に設定できていません。
どちらのアプローチにも、コアカーシブな方法でしかゲーム ツリーを構築できないという問題があると思います。リーフからルートまでツリーを構築するのではなく、ルートから下に向かって (潜在的に無限の) ツリーを遅延して構築します。
編集:私が現在使用しているコードの例を示すには(遅すぎます):
( TypeFamilies は、各Game
実装が独自の a の概念を持つことを可能にするために使用され、その後、 FlexibleContexts は実装するMove
ために強制する必要があります。Move s
Ord
haskell - Haskell の多元木 (バラの木) の特定のノードの隣接ノードの数を見つける
次のローズ ツリーの定義を考えてみましょう 。ツリーには一意のノードを含めることができます。
バラの木の特定のノードの隣人の数を見つける方法は? 私が意味する例:
関数の実装方法がわからない
機能の実装を手伝ってもらえますか?
編集: 私はこの解決策を思いつきました:
そして、それは非常に悪い解決策だと思います。いくつかの改善点を提案していただけますか?
ocaml - OCamlを使用してマルチウェイ(一般的なツリー)の高さを見つける
関数型プログラミング (OCaml) の初心者として、私はその問題に固執しました。
以下に示すコードを思いつきました。
しかし、OCaml のトップレベル (utop) は警告を出します:
そして、私が走るとき
utop は、一致の失敗に関する例外をスローします。
私もこれを実装しました:
そしてそれは
さらに、別の方法も試しました。
エラーは次のとおりです。
では、どうすればこの問題を克服できますか?