データセット用のハッシュを見つけるには多くの計算時間がかかる可能性があるため、完全なハッシュは実現できない可能性があります。
特定のx、y、zの組み合わせが処理されたことを意味しますbool[][][]
か?true
以下は、3次元ビット配列のプロトタイプです。Int32の制限により、これは最大インデックスが約1,024までしか機能しません(ただし、128 MB以内に収まります)。BitArray [] []を作成すると、10,000に達する可能性があります。ただし、116 GBを超えるRAMを占有するため、このサイズではおそらく実用的ではありません。
正確な問題のサイズとニーズによっては、(衝突のある)単純な古いハッシュテーブルが最善の策かもしれません。そうは言っても、プロトタイプコードは次のとおりです。
public class ThreeDimensionalBitArray
{
// todo: consider making the size configurable
private const int MAX_INDEX = 1000;
private BitArray _bits = new BitArray(MAX_INDEX * MAX_INDEX * MAX_INDEX);
public bool this[int x, int y, int z]
{
get { return _bits[getBitIndex(x, y, z)]; }
set { _bits[getBitIndex(x, y, z)] = value; }
}
public ThreeDimensionalBitArray()
{
}
private static int getBitIndex(int x, int y, int z)
{
// todo: bounds check x, y, and z
return (x * MAX_INDEX * MAX_INDEX) + (y * MAX_INDEX) + z;
}
}
public class BitArrayExample
{
public static void Main()
{
ThreeDimensionalBitArray bitArray = new ThreeDimensionalBitArray();
Console.WriteLine(bitArray[500, 600, 700]); // "false"
bitArray[500, 600, 700] = true;
Console.WriteLine(bitArray[500, 600, 700]); // "true"
}
}