たとえば、マージソートでのパフォーマンスを改善するにはどうすればよいですか?マージソート2のマージステップでは、サイズn/2のより小さいリストがサイズnのリストに結合される。これが再帰的に起こっているので、次のティエム・マージが2つの配列をマージするために呼び出されます。これらのリストはサイズnを持ち、新しいリストは2nのサイズを持ちます。エリクシールリストでは不変ですが、初期リストの値、つまりソートしようとしているリストの値を変更することはできません。代わりに、マージの各ステップで新しいリストを作成します。これをどのように改善できますか? 1つはetsを使うだろうか?リスト使用時のエリクサーでのパフォーマンスの向上
0
A
答えて
2
エリクサーには、このようなパフォーマンスの問題が多く解決されています。たとえば、mergesortでのマージでこの問題が発生した場合、事前に配列されている配列:lists.merge
が返され、ソートされた配列が1つ返されます。完全なマージソートは、次のようになります。私はエリクシールは右、ソートされた多くのものを持って書いた
defmodule Sort do
def merge_sort(input) when length(input) <= 1 do
input
end
def merge_sort(input) do
splitting_point = length(input) |> div(2)
{ left, right } = Enum.split(input, splitting_point)
:lists.merge(merge_sort(left), merge_sort(right))
end
end
? mergesortも例外ではありません。フードの下でmergesortを使用するEnum.sort
を使用して、それを1日と呼びます。
関連する問題
- 1. リスト上のAnyなどを使用したときのパフォーマンスの向上
- 2. C#リストのパフォーマンスを向上させる
- 3. パフォーマンスの向上
- 4. C++でのパフォーマンスの向上
- 5. クエリでのパフォーマンスの向上
- 6. パフォーマンスの向上は
- 7. スパークストリーミングジョブのパフォーマンス向上
- 8. ウェブサービスのパフォーマンス向上
- 9. パフォーマンスの向上は
- 10. 2sumのパフォーマンス向上
- 11. ISNULL:パフォーマンスの向上?
- 12. Symfony2のAppCacheのパフォーマンス向上
- 13. ASP.NETユーザーコントロールのパフォーマンスの向上
- 14. スライドショーのパフォーマンスが向上
- 15. Windowsアプリケーションのパフォーマンスを向上
- 16. asp.netページのパフォーマンスを向上
- 17. vlookupとreplace - パフォーマンスの向上
- 18. Pg-promiseパフォーマンスの向上:オンコンフリクト
- 19. PythonとOpenGLのパフォーマンス向上
- 20. SQLite WALのパフォーマンス向上
- 21. ARMアセンブラNEON - パフォーマンスの向上
- 22. WPF DataGridのパフォーマンスを向上
- 23. パフォーマンスの向上Spark ORC
- 24. MySQLクエリのパフォーマンス向上
- 25. Postgresqlクエリのパフォーマンスを向上
- 26. fopen/fcloseシナリオでのパフォーマンスの向上
- 27. OpenLayers3でのgeoJSONパフォーマンスの向上
- 28. drushドライバでのパフォーマンスの向上
- 29. パブリック変数の使用によるパフォーマンスの向上?
- 30. データフレームとSQLを使用したPysparkのパフォーマンスの向上
新しいリストの作成を避けることはできますが、新しい要素をリストに追加することは、リストに追加するときとは違って古いリストをコピーしないので安価ですこのアルゴリズムで活用されています。 – JustMichael
@JustMichael ++演算子を使用していました。これは、リストを反復しなければならないことを意味し、マージを行うたびにO(n)です。アイテムをリストの先頭に接頭し、必要に応じてリストを逆にする方がよいでしょう。 – sashang
はい、正確には、逆は高度に最適化されているので、このようにする方がよい – JustMichael