Minimax-Algorithm Iコードでは、ビット単位の操作で実験を行い、高速化したいと考えています。各gamestateはUInt128として保存され、4x4タイルベースのボードを記述します。各タイルは0〜32(排他的)の値を持つことができ、1タイルあたり5ビットです。2次元のビット配列からビットを抽出する
+-------+-------+-------+-------+
| 0-4 | 5-9 | 10-14 | 15-19 |
+-------+-------+-------+-------+
| 20-24 | 25-29 | 30-34 | 35-39 |
+-------+-------+-------+-------+
| 40-44 | 45-49 | 50-54 | 55-59 |
+-------+-------+-------+-------+
| 60-64 | 65-69 | 70-74 | 75-79 |
+-------+-------+-------+-------+
実際にボード上で操作を実行するには、3x3の中心に基づいて4x4から3x3ブロックを抽出する必要があります。どのように私はそれについて約行くだろうか?ビットシフトを使ってすべてのセルに簡単にアクセスすることで手動で問題なく動作しますが、より高速な方法があるのだろうかと思います。
ありがとうございました!
(問題がある場合は言語がCです)
awnserに感謝します。バイトアレイはそれをコピーするときに非常に高価にならないでしょうか? (構造体の中でそれらを使用) –
これは、私が見てほしいと提案したものでした。私の要点は、1つの128ビットアレイを別のものに抽出することよりもコストがかかるため、ビットマスクの読み取り/書き込み(計算位置など)になります。いくつかの構造体(おそらくUInt128は何ですか?)を作成することもできます.16バイトの変数Cell1-16(System.Numerics.Matrix4x4とよく似ています)とCell1-9を持つものがあります。これらは現在ValueType(参照型のバイト配列ではなく)なので、UInt128のようにコピーされます。 – Rob