色々な言語で連想配列のテスト
Pythonで連想配列と配列での動作速度の違いを検証したついでに、他の色々な言語でもどうなるか試してみた。
それぞれの言語で連想配列を使ったテストを実行し、速度の違いを見てみる。
テストに使ったコードは次のとおり。
Groovy
Perl
PHP
それぞれの言語で連想配列を使ったテストを実行し、速度の違いを見てみる。
テストに使ったコードは次のとおり。
Groovy
long start=System.currentTimeMillis();
def buff=[:]
def cnt=0
System.in.eachLine() {
if (buff[it]) cnt++;
else buff[it]=1;
}
println cnt;
println ((System.currentTimeMillis()-start)/1000);
Perl
$start=(times())[0];
%buff=();
$cnt=0;
while(<>) {
if (exists($buff{$_})) {$cnt++;}
else {$buff{$_}=1;}
}
print $cnt."\n";
print ((times())[0])-$start;
PHP
JScript
var start=new Date().getTime();
var buff={};
var cnt=0;
while(!WScript.StdIn.AtEndOfStream) {
var line = WScript.StdIn.ReadLine();
if (buff[line]) cnt++;
else buff[line]=1;
}
WScript.Echo(cnt);
WScript.Echo(parseFloat(new Date().getTime() - start)/1000);
Java
import java.util.*;
import java.io.*;
class looptest {
public static void main(String args[]) {
long start=System.currentTimeMillis();
Hashtable buff = new Hashtable();
int cnt = 0;
String line;
BufferedReader fi = new BufferedReader(new InputStreamReader(System.in));
try {
while((line=fi.readLine())!=null) {
if(buff.get(line)!=null) ++cnt;
else buff.put(line, 1);
}
} catch(IOException e) {
}
System.out.println(cnt);
System.out.println (((float)(System.currentTimeMillis()-start))/1000);
}
}
さらに、Python のスクリプトもJythonで実行して、どの程度の差が出るか調べる。
で、手元のPCで、これらのプログラムに5万件のランダムなデータを突っ込んだ結果が次のとおり。
言語 1回目 2回目 3回目 CPython 0.08 0.07 0.07 Groovy 0.44 0.39 0.39 Perl 0.11 0.11 0.10 PHP 0.62 0.58 0.57 JScrpit 1.07 1.08 1.09 Java 0.08 0.10 0.09 Jython 0.22 0.21 0.21
まあ、こんなものかな。
CPythonが意外と速いことが分かる。Pythonは遅いと思っていたのだが。
Pythonが速いのか、単にループと連想配列(辞書型)だけが速いのか、それは分からないが。
この記事へのコメント