4

私はコンピュータ サイエンスの質問について勉強していましたが、最初の面接が非常に成功した後、2 番目の面接コード テストで私を苦しめました。そうでなければ、私はそれをスラムダンクと見なしていたでしょう.

基本的に、ラティス セルを使用したマインスイーパを 2 時間以内に実装する予定でした。

1X1 の場合、セルは 1 つです。

次に、2X2 の場合、1 つのセルには 4 つのセル (子?) があり、それぞれが親に二重にリンクされています。また、2人の子供は二重にリンクしています。他の二人の子供もそうです。

子セルから別の子セルへのトラバースは、次の子リンク (兄弟) にジャンプするか、最初に親に戻ってから、他の子リンク ペア セット内の宛先の子にトラバースする必要があることを意味します。(注:ツリーのアイデアは私のアイデアであり、要件ではありません)

私が持っていた一般的なアイデアは、深さのパラメーターに従って暗黙のうちにどんどん大きくなるパターン作成メカニズムを確立することでした。一種のツリー構造が最良のアプローチのようです。

それは十分に簡単に思えました。しかし、私はパターン作成ロジックに頭を悩ませることができませんでした:

複数の子を持つツリー構造 (オクト ツリー、クワッド ツリー、バイナリ ツリーなど) は十分に簡単ですが、親が複数の子を生成するたびに、子も特定の兄弟のみに暗黙的にリンクされるエレガントなシステムを考え出します。私にとってはマインドツイスターでした。したがって、基本的に、私の考えによれば、ルートは格子図の中心であり、最も遠い子ノードはエッジにあります。

また、私が理解していない格子セルの多くの側面があるかもしれません。なぜ、またはどのようにこれが役立つのかについての根本的な説明を見つけようとして、インターネットを掘り下げました。部分順序集合、累乗集合、再帰性、およびハッセ図などのそれらの原則に基づく格子図など、論理の基本について説明している主題に関する入門書を見つけました。

ただし、これでもまだ十分ではありません。C++ や疑似コードの例さえありませんでした。

ハッシュ テーブル、連結リスト、連結リストの反転 (再帰/反復)、二分木 (バランス/アンバランス)、ベクトル、文字列、反転など (すべての基本的な基本事項) を理解しています。三角関数、線形代数、四元数。いくつかの計算。そして、多数のグラフィックス プログラミングのトリック/テクニック。ゼロから 2 つのゲーム エンジンを作成したこともありますが、単純なラティスの問題は解決できません。私は恥ずかしい。私は格子についてできる限り学びたいので、二度とそのように燃えることはありません. ただし、必要なドキュメントを見つけるのは困難です。

ラティスの主題に関する優れた入門書/チュートリアルを探しています (C++ アルゴリズムの作成に関連するため) -- 願わくば、典型的な Sam が 21 日間で C++ を独学するように (初心者から) 私の手を握ってくれるものを探しています。 、 か何か。格子は中級者から上級者向けのように見えるので、これは不可能かもしれません。

チュートリアルではない場合でも、このテーマに関する知識を教えていただければ幸いです。

ありがとう。

4

1 に答える 1

1

混乱は、ラティスという単語の誤解を招く使用から生じます。数学では、ラティスは、2 つの要素ごとに lub (最小上限) と glb (最大下限) を持つポーズセットです。ゲームの「ツリー」 (ノードはボードの状態であり、移動のエッジは、ツリーの一意のパス プロパティにより明らかに glb を持たない)、異なる一連の移動で到達した同一の状態に参加した場合でも (この場合ツリーは有向グラフになります)、特定の状態から 2 つの異なる最終状態に到達できる場合、glb はありません。私はマインスイーパを 10 年間プレイしていませんが、このような形でゲームを終わらせることができるというのが私の印象です。したがって、考える必要がある基礎となるデータ構造は有向 (おそらく非巡回) グラフであり、これは数学的な意味で格子 (エッジの方向を無視する) である場合があります。

于 2013-08-24T12:25:27.207 に答える