ルアのデフォルトのtable.sort
が使用するアルゴリズムは、私が遭遇したいくつかの他のソートアルゴリズムよりも遅いからだけです。私はまた、Luaのtable.sort
がC言語のEngineに書かれているのか、それがLuaのライブラリにあるのか不思議です。table.sortはどのアルゴリズムを使用していますか?
答えて
table.sortはどのアルゴリズムを使用していますか?
comment in tablib.c
(ビットをスクロールアップ)あなたは、私が提供されたリンクのソースコードを読むことができます
/*
** {======================================================
** Quicksort
** (based on `Algorithms in MODULA-3', Robert Sedgewick;
** Addison-Wesley, 1993.)
** =======================================================
*/
を述べています。
は、Luaのと直接来るすべてのライブラリ(Luaのtable.sortがCのエンジンで書かれているのか、それともLuaのライブラリにあるのか不思議です。このとき
io
、
table
、
math
は、...)
table.sort
はクイックソートを使用して、
内部的にはCで書かれている、そしてそれはC.注意に書かれていますクイックソートは安定していません。驚いたことに私にはちょっと驚いたことに、LuaはCのqsort()
を直接使用しませんでした。
パフォーマンスに関しては、どの言語とどのアルゴリズムを比較しているか、どのような種類のデータがテストされているかなど、さまざまな要因があります。
Luaを使用すると、デフォルトより少し速いということがわかったいくつかのアルゴリズムがあります。関連するサイズが小さければ、カクテルソートとバブルソートは実際にはデフォルトより高速です。サイズが大きければ、LSD基数ソートは、私が言った他の2つと共に、より速いです。私は、逆配列、ランダム配列、大部分はソートされた配列など、さまざまなタイプのデータでテストしていますが、各テストではデフォルトのソートはやや遅くなります。 – jocopa3
@ jocopa3私が見る限り、これはルアの問題ではなく、クイックソートの問題です。たとえば、クイックソートはソートされた配列と逆の配列ではパフォーマンスが悪いです。特定の問題をソートする必要があり、Luaのデフォルトのソートがうまく動作しない場合は、C言語で特定のソートアルゴリズムを記述することをお勧めします。 –
@YuHaoリンクされたソースを見ると、Luaのqsortが毎回ピボットとしてmiddleを選択しています。それはqsortの理想的なケースに近いものでなければならず、パフォーマンスが悪いはずはありません。私は、これらのすべてのLUA API呼び出しが、何かを遅くしているかもしれないと思っていますが、プロファイリングされていないと確信できません。 – greatwolf
- 1. pythonのsorted()はどのアルゴリズムを使用していますか?
- 2. RDBMSはどのアルゴリズムを使用していますか?
- 3. OpenCVのバイエル変換はどのアルゴリズムを使用していますか?
- 4. Rubyのソート方法はどのアルゴリズムを使用していますか?
- 5. C++ブーストプリムのアルゴリズムはカスタムウェイトを使用していますか?
- 6. scipy.optimize.leastsqはどの最適化アルゴリズムを使用していますか?
- 7. Perlはどのようなハッシュ関数/アルゴリズムを使用していますか?
- 8. Math.randomはどのようなアルゴリズムを使用していますか?
- 9. Lua table.sortメソッドはいつ安定しますか?
- 10. WPF 3Dアルゴリズムの質問:どのモデルを使用していますか?
- 11. どのような遺伝的アルゴリズム/プログラミングライブラリを使用していますか?
- 12. Array#にはどのアルゴリズムが含まれていますか?使用?
- 13. 標準的なZIPではどのアルゴリズムが使用されていますか?
- 14. メモリ管理アルゴリズムはどこで使用されていますか?
- 15. なぜscikit-learn truncatedSVDはデフォルトで「ランダム化」アルゴリズムを使用していますか?
- 16. WinRarでどのデータ圧縮アルゴリズムが使用されていますか?
- 17. ask.fmでどの暗号化アルゴリズムが使用されていますか?
- 18. SQL Server CEはどのような暗号化アルゴリズムを使用しますか?
- 19. MsOfficeはファイル暗号化にどのようなアルゴリズムを使用しますか?
- 20. MRI Ruby 1.8はどのようなメモリ再生アルゴリズムを使用していますか?他の言語で
- 21. Androidのスペルチェッカーで使用されているアルゴリズムはどれですか?
- 22. OpenCV cvtColor()はどのようなグレースケール変換アルゴリズムを使用していますか?
- 23. GMPは、プライムフィールド反転(mpz_invert)にどのようなアルゴリズムを使用していますか?
- 24. 人の属性に基づいてクラスタリングするためにどのようなアルゴリズムを使用しますか?
- 25. アルゴリズムを使用して未知のテキストメッセージをグループ化するにはどうすればよいですか?
- 26. AndroidのContext.openFileOutput()はどのファイルシステムパスを使用していますか?
- 27. 私はどのバージョンのC++を使用していますか?
- 28. OTP.NETはどのバージョンの.NETを使用していますか?
- 29. 私はどのバージョンのC#を使用していますか?
- 30. jenkinsのスレーブはどのsettings.xmlを使用していますか?
LuaJITは[smoothsort](http://en.wikipedia.org/wiki/Smoothsort)に切り替えることを検討しています。ライブラリ関数のいくつかは現在Luaバイトコードで実装されています(実際には有益ですJITコンパイルがより良い) –