Lua のようなスクリプト言語は、ビジネス ロジックを設定ファイルとして処理する場合には便利で問題がありませんが、大量の計算が必要な場合には少し不十分です。Lua の組み込みソート アルゴリズムを比較してください。 C/C++、PHP、Javaなどのクイックソートアルゴリズム。
クイック ソート アルゴリズムはバブル ソートに基づいており、時間計算量は T(n)=O(nLog2n) であることがわかります。
LuaIDE LDT で直接実行する方が、C++ を介して Lua スクリプトをロードして実行するよりもはるかに効率的であることがわかりました。例として 500 万のデータを並べ替えるスクリプトは次のとおりです
同じ並べ替えを実行します。スクリプト Lua インタープリター 組み込みソート アルゴリズムは、C/C++ 組み込み Lua インタープリターを介して呼び出すよりも LDT で 14 倍高速に実行されます
そして、C/C++ クイック ソートの速度は、組み込み Lua よりも 40 倍高速ですソートアルゴリズムでは、LDT での Lua ソートの 3 倍もの効果があり、少なくとも私のコンピュータではこれが見られます。
PHP によって実装されたクイック ソート アルゴリズム
PHP は単にページ キャッシュ プールの容量が小さすぎて、5W のデータ ソートではすでに多すぎます。 。 。 。 。 Lua に比べると効率がかなり劣るので、Web CRUD だけに使いましょう。 。ページメモリプールサイズを設定しても、5000 では 2 秒近くかかります。Java ビッグデータ処理 JVM はスタックオーバーフローを起こしやすいため、効率は同じです。 C/C++ またはそれ以上の JVM は、.NET と同じタイム コンパイル テクノロジであり、小さなコードの実行効率は非常に高いですが、大きなプログラムはそうではありません。
以前は、どの言語で書かれたほとんどのプログラムも、コンピュータ プラットフォームごとに再コンパイルし、場合によっては書き直す必要がありました。 Java の最大の利点の 1 つは、プログラムを一度作成してコンパイルするだけで済むことです。どのプラットフォームでも、Java はコンパイルされたバイトコードを特定のプロセッサが理解できる命令に解釈します。それにもかかわらず、Java 仮想マシンは一度に 1 つのバイトコード命令しか処理できません。特定のシステム プラットフォームで Java ジャストインタイム コンパイラ (実際には 2 番目のコンパイラ) を使用すると、(プログラムが元々そのプラットフォーム用にコンパイルされたものであっても) バイトコードをシステム固有のコードにコンパイルできます。コードが JIT コンパイラーによって (再) コンパイルされると、通常はコンピューター上でより高速に実行されます。
<?php define('ARRAY_SIZE',5000); function QuickSort($arr,$low,$high) { if($low>$high) return ; $begin=$low; $end=$high ; $key=$arr[$begin]; while($begin<$end) { while($begin<$end&&$arr[$end]>=$key) --$end ; $arr[$begin]=$arr[$end]; while($begin<$end&&$arr[$begin]<=$key) ++$begin; $arr[$end]=$arr[$begin]; } $arr[$begin]=$key; QuickSort($arr,$low,$begin-1); QuickSort($arr,$begin+1,$high); } $arr=array(); echo '插入前时间:'.time().'<br/>'; for($i=0;$i<ARRAY_SIZE;$i++) { array_push($arr,rand(1,50000)); } echo '插入后时间:'.time().'<br/>'; echo '排序前时间:'.time().'<br/>'; QuickSort($arr,0,ARRAY_SIZE-1); echo '排序后时间:'.time().'<br/>';?>
上記の Lua スクリプトを Lua C++ 経由でロードして実行した後の結果は次のとおりです。 80S では、挿入と並べ替えの速度が遅くなったため、C++ を使用して Lua をロードして同様の操作を行うことは価値がありません。C++ の組み込み解釈を通じて呼び出される速度が非常に遅いことを見てみましょう。 C++PHP JAVA の内部ソートのアルゴリズムの効率。
C/C++ が大量のデータを処理する場合、次のような利点があります。500W のデータ コンテンツをソートするのにかかる時間はわずか 2 秒です。これは、C/C++ の 40 倍の Lua スクリプトを介して実行されます。
print("插入前时间",os.clock())--定义table变量sorTable={} for i=1,5000000,1 do sorTable[i]=iendprint('插入数据后时间:',os.clock())print('插入了',#sorTable,'个数据!')print('排序前时间:',os.clock())table.sort(sorTable,function(a,b) if(a<b) then return true else return false endend )print("排序后时间:",os.clock())
C/C++ の場合、実行結果はほぼ 2 秒かかることが想像できるため、Lua などのスクリプト言語の場合、ビッグ データ操作を処理するのは決して賢明な行動ではありません。
Java のクイック ソート アルゴリズムに基づくと、JVM 上で実行される Java の同じクイック ソート アルゴリズムは、実際には 500 万のデータをソートするのに 2 秒もかかりません。 ...
れー