0

私の現在のサイド プロジェクトでは、3x3x3 マルコフ連鎖を使用する必要があります。私が思いついた最初の実装は、マトリックス内の各位置をその位置に移動する機会にすることです (すべての位置の値の合計が 1 になる場所)。マトリックスの値に応じて、これは次のようになります。

  • 平均13.5回の比較
  • 1つの比較の最良のケース
  • 27 回の比較の最悪のケース

私の次のアイデアは、各行とレイヤーの合計を追加のクラス変数配列として格納することです。これにより、次の場所で正しい位置を見つけることができます。

  • 平均 4.5 回の比較 (レイヤーの検索に 1.5 回、行の検索に 1.5 回、位置の検索に 1.5 回)
  • 3つの比較の最良のケース
  • 9回の比較の最悪のケース

これは実装比較に関してははるかに優れていることがすでにわかりますが、保存する必要がある余分なデータもあります。

これを実装するより良い方法はありますか?

4

1 に答える 1

1

マルコフ連鎖は、遷移行列を介して進化します。これは、おそらくあなたの場合は 27x27 行列です。ただし、質問の仕方は、一般的なケースを扱っているわけではなく、適用される特別な条件があることを暗示しています。

私がこれを行うとしたら、最近のコンピューターは非常に高速であるため、初期バージョンの効率について心配する価値はなく、予備的な結果を得た方がよいと最初に考えます。そのため、次のバージョンの効率について心配するだけでした。特に、より効率的なバージョンは明らかに正しくするのが少し難しくなり、保存された変数の一部がマルコフ連鎖の基礎となる状態と同期しなくなると、おそらく少し危険になります。したがって、そのようなより効率的な実装をテストするための重要なツールは、最初に考えた力ずくの非効率的な実装です。

于 2013-04-25T15:34:33.710 に答える