2012-03-12 12 views
1

私は3次元ボリュームの2次元配列を持っています。この2次元アレイは、3次元ボリュームのすべてのトップダウンビューを表す。3Dボリュームの2D空間を1D空間(ファイル)にマッピングする

このデータを非常に迅速に取得できるような方法でファイルに保存します。私の問題は、2次元配列がサイズと形状を変えるかもしれないということです。それは常に良いと正方形ではありません。これは、未使用のセクションとそれらの非常に多くを残す傾向があります。

私の検索方法では、現在、ボリュームレベルの2Dビューを使用して読み込みが必要なボリュームを検索していますが、良好なデータ構造とストレージ技術を考えるのは難しいです。私が遭遇した方法の大部分は、2Dビューが同じ長さと幅であること、または長さまたは幅に依存することを要求しています。

ファイル内の未使用領域を避けたいと思っています。マッピングされたポイントのローカリティも必要であることに注意してください。ポイントをマッピングするときには、動作するソリューションを考え出すのはかなり一般的ですが、奇妙な関係を作り出します。 {0、0}は{0}以外のものにはマップしてはならず、{1}は{0}にかなり近く、{34}のようなものではないはずです。

時間と空間の効率的なやり方でこれをどうやってやりますか?

+0

{0,1}は{34}にマッピングできますか? – Beta

答えて

0

私はいくつかの異なるスペース塗りつぶしカーブを実装し、それらを使用して上位ディメンションデータを単一ディメンションファイルにマップして変換することで、この問題を解決しました。私は、ヒルベルト曲線が完全に働いていることを発見しました。

0

モデルスペースの2次元スライスを保存しているだけですか?

私は、最も簡単でおそらく最も良いことは、すべてを保存することだと思います。これは非常にシンプルなものになり、ファイル内の特定の場所にも簡単に検索することができます。

次に、zlib、またはbz2などを使用してファイルストリームを圧縮します。ゼロが多い場合は、圧縮が非常にうまくいきます。私がこれをやり始めると、私のHPCコードがかなりスピードアップしました。

私はいくつかのもっと複雑なことを考えることができますが、実際には何を達成しようとしていますか?圧縮はそれを小さくし、シンプルなフォーマットを持つことはいいです。

+0

アイデアは、3D空間内の特定の座標を与えられた探索時間O(1)を作り、マップされた1Dファイルから2D空間内の親要素を検索することでした。したがって、ファイルは、2D空間内の3D空間のレイアウトによって直接変化するレイアウトを有することになる。圧縮は、我々がマッピングしているデータのタイプのために非効率的であり、これはPRNGおよび平滑化関数によって生成される。このトリックは、疎なファイルを避け、高速検索を容易にするためのものでした。 –

関連する問題