2013-08-04 5 views
5

ルアのデフォルトのtable.sortが使用するアルゴリズムは、私が遭遇したいくつかの他のソートアルゴリズムよりも遅いからだけです。私はまた、Luaのtable.sortがC言語のEngineに書かれているのか、それがLuaのライブラリにあるのか不思議です。table.sortはどのアルゴリズムを使用していますか?

答えて

6

table.sortはどのアルゴリズムを使用していますか?

comment in tablib.c(ビットをスクロールアップ)あなたは、私が提供されたリンクのソースコードを読むことができます

/* 
** {====================================================== 
** Quicksort 
** (based on `Algorithms in MODULA-3', Robert Sedgewick; 
** Addison-Wesley, 1993.) 
** ======================================================= 
*/ 

を述べています。

Luaのtable.sortがCのエンジンで書かれているのか、それともLuaのライブラリにあるのか不思議です。このとき

は、Luaのと直接来るすべてのライブラリ( iotablemathは、...) table.sortはクイックソートを使用して、

+0

LuaJITは[smoothsort](http://en.wikipedia.org/wiki/Smoothsort)に切り替えることを検討しています。ライブラリ関数のいくつかは現在Luaバイトコードで実装されています(実際には有益ですJITコンパイルがより良い) –

3

内部的にはCで書かれている、そしてそれはC.注意に書かれていますクイックソートは安定していません。驚いたことに私にはちょっと驚いたことに、LuaはCのqsort()を直接使用しませんでした。

パフォーマンスに関しては、どの言語とどのアルゴリズムを比較しているか、どのような種類のデータがテストされているかなど、さまざまな要因があります。

+0

Luaを使用すると、デフォルトより少し速いということがわかったいくつかのアルゴリズムがあります。関連するサイズが小さければ、カクテルソートとバブルソートは実際にはデフォルトより高速です。サイズが大きければ、LSD基数ソートは、私が言った他の2つと共に、より速いです。私は、逆配列、ランダム配列、大部分はソートされた配列など、さまざまなタイプのデータでテストしていますが、各テストではデフォルトのソートはやや遅くなります。 – jocopa3

+2

@ jocopa3私が見る限り、これはルアの問題ではなく、クイックソートの問題です。たとえば、クイックソートはソートされた配列と逆の配列ではパフォーマンスが悪いです。特定の問題をソートする必要があり、Luaのデフォルトのソートがうまく動作しない場合は、C言語で特定のソートアルゴリズムを記述することをお勧めします。 –

+0

@YuHaoリンクされたソースを見ると、Luaのqsortが毎回ピボットとしてmiddleを選択しています。それはqsortの理想的なケースに近いものでなければならず、パフォーマンスが悪いはずはありません。私は、これらのすべてのLUA API呼び出しが、何かを遅くしているかもしれないと思っていますが、プロファイリングされていないと確信できません。 – greatwolf

関連する問題