与えられた重みの最小値をすでに知っている場合、どのようにプリムのアルゴリズムを変更できますか?たとえば、グラフがエッジ重み0と1で構成されている場合、どのようにプリムのアルゴリズムを高速化できますか?既知のエッジ重みに最適化されたプリムアルゴリズム?
答えて
最初の戦略は、データを活用するために優先度キューを改善しているようです。ウェイトがCより小さい離散値であることが分かっている場合は、通常使用されるバイナリヒープを基数ヒープに置き換えることができます。こうすることで、フィボナッチヒープを実装するのがはるかに難しい場合と同じアルゴリズムの複雑さを簡単に得ることができます。ダイクストラ法はまったく同じデータ構造を使用し、ここでそれを基数ヒープを実装する方法の完全な説明です:
http://www.cosc.canterbury.ac.nz/tad.takaoka/alg/spalgs/radixheap.txt
サンプルコードradixheap.cppがここで見つけることができます:
http://www.cosc.canterbury.ac.nz/tad.takaoka/alg/spalgs/spalgs.html
プリムのアルゴリズムに同じデータ構造を適用するだけで、Dijkstraのアルゴリズムについて解説し、複雑さO(m + n log C)を得ることができます。ここで、mはエッジ、nは頂点、Cは最大エッジウェイトです。エッジウェイトが小さい整数の場合、これは実際には非常に良いことです。
基数ヒープの概念を要約すると、項目は優先順位(整数でなければならない)に従ってバケットに配置されます。バケツNによってカバーされる値の範囲は、およそ2^Nのサイズであるため、正しいバケットを見つけることは可能な最大数のログに比例します。最小の優先度を持つアイテムを抽出するとき、アイテムは時々、償却される下位のバケットに再配分され、対数的な複雑さにも作用します。
エッジウェイトが0と1の間の任意の浮動小数点数であることを意味する場合、最適化は許可されません。明らかに、すべてのエッジ重みを最大エッジ重みで除算することで、すべてのグラフを0から1の間にすることができます。この変換は、プリムのアルゴリズムをより高速に実行することはできません。結果をすべて変更せずに、すべてのエッジに同じ番号を追加するか、同じ正の数でそれらを掛けることによって、すべてのエッジを変形することができます。
- 1. 最適化されたページングソリューション
- 2. 最適化されたjQuery
- 3. 既存のシステム接続を最適化する最適化アルゴリズム
- 4. 最適化されたstrcmpの実装
- 5. 最適化されたSQLの出力
- 6. 最適な検索エンジン最適化されたWordpressのテーマ?
- 7. 回避方法PHPで既に最適化されている画像を最適化しますか?
- 8. OCRに最適化された/適切なカメラアクティビティの作成
- 9. ポリラインdrawMapRect最適化された図面
- 10. 最適化された方法
- 11. 最適化されたバブルソート(Java)
- 12. 最適化されたSQLクエリ
- 13. QPixmapで最適化された図面
- 14. 最適化された検索
- 15. 最適化:大きなMySQLテーブル、最近使用されたレコードのみ
- 16. 未知のデータベースのクエリを最適化
- 17. Time-to-Temperature、最適化された開始、最適化された停止、サーモスタットレベルのNest APIアクセスAway
- 18. コードサイズのために最適化されたNewlib
- 19. FacebookのAPI&iPhoneに最適化されたログインページ
- 20. WPF WindowChrome:最大化されたウィンドウのエッジが画面外です
- 21. ビューステートた最適化
- 22. MySQLデータベースを最適化するための最適化
- 23. Joomla最適化を使用したJoomlaウェブサイトの最適化
- 24. Androidで最適化されたテキストをテキストに変換
- 25. 署名済み:gccの最適化 "バグ"
- 26. Q:分岐されたエンティティとバージョン化されたエンティティの最適化されたデータ構造
- 27. Microsoft Chartの積み重ねられた列が非積み重ねでグループ化されました
- 28. インテル®SSEコンパイラ組み込み関数を使用したベクトル化の最適化
- 29. 最小重みのエッジを削除してノードの集合を切断する
- 30. UIScrollViewでの最適化されたイメージのロード
- > http://cstheory.stackexchange.com/? – Vlad