ソートされたリストに順不同リストから切り替えるにはいつですか? [最適化]
-
12-09-2019 - |
質問
私はボクセルでの3Dボリュームを分解するためのアルゴリズムを実装する必要があります。アルゴリズムは、カット・プランの各側にエッジは、切断平面を横切る第二段階にある頂点識別することによって始まります。
このプロセスは、ソートされたリストの利益を使用することによって、最適化することができます。スプリットポイントを識別することOログ(N)です。しかし、私は頂点と辺のための軸と、このあたりのそのようなソートされたリストを維持しなければなりません。これはGPUによって使用されるように実装されるので、私はまた、メモリ管理(すなわち、CUDA)にいくつかの制約を有しています。侵入listsM /樹木及びCが課されます。
完全な「ボクセル化」で、私は〜で4000ポイント、および12000のエッジをendupことを期待しています。幸いなことに、これは、処理のボクセルと最小値にその数を維持するために切断ため、残存容量を取り除くために、よりスマートな戦略を使用することにより最適化することができます。この場合、私は少ないし、100ポイントと300個のエッジを持っていることを期待します。これは、管理するのプロセスがより複雑になりますが、より効率的なbeeingて終わることができました。
質問は、ソートされたデータ構造を使用することの利点は、簡単な侵入リンクリストに比べて労力とオーバーヘッド複雑価値があるときに私が判断するための基準を識別しやすくすることである。
解決
質問は常にオペレータがアクセスし、または追加して、最も一般的であるに煮詰めるます。 あなたは順不同リストを持っている場合は、それに追加しても時間がかかりませんし、特定のアイテムにアクセスすることは、余分な時間がかかります。 あなたがソートされたリストを持っている場合は、それに追加することは、より多くの時間がかかりますが、それへのアクセスは高速です。
ほとんどのアプリケーションでは、ソートされたリストを作成する(ランニング)時のオーバーヘッドは通常、リストへのアクセスに保存された時点でバランスまたはカバーされることを意味し、データにアクセスして自分の時間の大半を費やして、というよりも、それに追加します。 あなたのデータで解約の多くは(そこにあるように、それは音しない)がある場合は、常にかなりのCPUコストとしてリストに頼ることになるので、その後、ソートされたリストを維持することは、必ずしも賢明ではありません。
のみ事項データ構造の複雑さを、彼らはを場合のは有効な方法でソートすることができません。彼らはソートできる場合は、
のヒューリスティックで行く必要がありますアクセス数:変化の数
ソートは良いアイデアであるかどうかを判断します。
他のヒント
chmike、これは本当にあなたが最初に簡単な方法をしたいものの一種のように聞こえる、それがどのように動作するかを参照してください。あなたは(あなたが持っていないようです)、少なくとも大きなボリュームに入ったら、GPUのボクセル化のアプローチの任意の並べ替えは、システムの詳細にはかなり壊れやすいです。チェック対象がない他の理由であれば、あなたの靴では、私は間違いなく
....、最初の簡単な実装をしたいと思いますすべての答えを検討した後、私は重複計算を避けるために使用後の方法があるため、データ構造に維持し、ナビゲートするための努力の少ない効率的になってしまうだろうことが分かりました。加えて、初期の方法は、いくつかの小さなカーネルルーチンを並列化するのは簡単とGPU実装のため、より適切です。
私も後ろにもボリュームのカット方法を残し重要な最適化の機会を発見した私の最初の方式をバックチェックます。
私は1つの答えを選択しなければならなかったので、彼は質問に答えるので、私はdevinbを選んだが、サイモンさんのコメント、私にとってとして貴重だった、トビアスWarreコメントによってバックアップされます。
この問題を整理私を助けるためにあなたのすべてに感謝します。 スタックオーバーフローが印象的なサービスです。