民芸的プログラミング 〜ソフトウェア開発日記〜

アクセスカウンタ

zoom RSS 色々な言語で連想配列のテスト

<<   作成日時 : 2010/12/12 21:45   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

Pythonで連想配列と配列での動作速度の違いを検証したついでに、他の色々な言語でもどうなるか試してみた。
それぞれの言語で連想配列を使ったテストを実行し、速度の違いを見てみる。
テストに使ったコードは次のとおり。

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

<?php
$start=microtime(true);
$buff=array();
$cnt=0;
$fi=fopen('php://stdin','r');
while (!feof($fi)) {
    $line = fgets($fi);
    if($buff[$line]) $cnt++;
    else $buff[$line]=1;
}
fclose($fi);
print $cnt."\n";
print (microtime(true)-$start)."\n";


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回目
CPython0.080.070.07
Groovy0.440.390.39
Perl0.110.110.10
PHP0.620.580.57
JScrpit1.071.081.09
Java0.080.100.09
Jython0.220.210.21


まあ、こんなものかな。

CPythonが意外と速いことが分かる。Pythonは遅いと思っていたのだが。
Pythonが速いのか、単にループと連想配列(辞書型)だけが速いのか、それは分からないが。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
色々な言語で連想配列のテスト 民芸的プログラミング 〜ソフトウェア開発日記〜/BIGLOBEウェブリブログ
文字サイズ:       閉じる