1

単純なナビゲーションアルゴリズムのために以前に3D空間の場所にアクセスしたかどうかを示す、ブール値の3次元配列を作成しようとしています。配列は非常に大きくなる可能性があります(1,000,000 x 1,000,000 x 1,000,000またはそれ以上の線に沿ったもの)ので、そのサイズの配列を宣言して各ブール値をfalseに設定する方が速いのか、それとも座標(x、y、z)のキーとbool型の値を持つマップ。

私が理解していることから、配列は座標を検索または変更するためにO(1)を取り、マップは値を見つけるまたは挿入するためにO(log n)を取ります。明らかに、値にアクセスするために、配列はより高速です。しかし、これはそのような配列を宣言するのにかかる時間を相殺しますか?

ありがとう

4

3 に答える 3

3

ブールあたり 1 ビットでも、配列は 2**39 バイト以上を占めます。setになる要素が多すぎない場合は、をお勧めしますtrue

クラスを使用して実装の詳細を非表示にし、1D セットを使用できます。

于 2012-09-23T00:23:08.460 に答える
1

このような配列に必要なメモリ量を計算してみましたか? 多くの!ポイントの順序付けが重要な場合は std::map を使用し、そうでない場合は std::unorded_map を使用します。また、順序付けられていないマップにより、一定時間の挿入と検索が可能になります。おそらく、ある種の検索ツリーが探しているものだと思います(kdツリーなど)。

于 2012-09-23T00:26:52.613 に答える
0

ポイントあたり8ビットを使用すると仮定して、1エクサバイトの配列を作成するつもりですか? うわー、あなたはたくさんのRAMを持っています!

やり方を考え直したほうがいいと思います。

于 2012-09-23T03:13:29.407 に答える