KUMA TYPE

猫、パソコン、プログラム、映画、ドラマ、アニメ、perl、etc.

【perlメモ】配列の処理を改善したら処理がずいぶん早くなった件

下のような配列の処理をしてたプログラムを前に適当に書いたんですが

@list1 親配列

@list2 子配列

親配列のループで親の配列からキーを取り出して、子の配列のループで親のキーと子のキーが一致したら子のデータを連結していくというありがちな2重ループです。

これだと子の配列のデータがが多いととっても遅いんですね、親のループの回数分、子の配列のループを繰り返すわけですから、毎回子の配列を全部ナメるわけです。かなり無駄な処理が有ります。実際ほんとに遅かったんです。数分掛かるくらいに。

my $STR = ”;
foreach my $line1 (sort rank @list1){
    my($key,$num) = split(/\t/,$line1);
    $STR .= "$key\n";

    foreach my $line2(sort rank @list2){
        my($key2,$num2,$key3,$key4) = split(/\t/,$line2);
        next if($key ne $key2);
        $STR .= "$key3,$key4\n";
    }
}

sub rank{
    my(undef,$n1) = split(/\t/,$a);
    my(undef,$n2) = split(/\t/,$b);

    if($n1 > $n2){
        -1;
    }elsif($n1 < $n2){
        1;
    }else{
        0;
    }
}

 

自分なりに試行錯誤して下のように改善してみました。

あらかじめ子の配列(@list2)をキーごとに分類して、配列のハッシュにしてみたら分類の前処理は増えるけど後のループで全く無駄なループがなくなるのでほぼ一瞬で終わるようになった。

my %keyh =();
foreach my $list2 (@list2){
    my($key2) = split(/\t/,$list2);
    push(@{$keyh{"$key2"}},$list2);
}

my $STR = ”;
foreach my $list1 (sort rank @list1){
    my($key,$num) = split(/\t/,$list1);

    next unless(defined($keyh{"$key"}));

    foreach my $line2(sort rank @{$keyh{"$key2"}}){
        my($key2,$num2,$key3,$key4) = split(/\t/,$list2);
        next if($key ne $key2);
        $STR .= "$key3,$key4\n";
    }
}

sub rank{
    my(undef,$n1) = split(/\t/,$a);
    my(undef,$n2) = split(/\t/,$b);

    if($n1 > $n2){
        -1;
    }elsif($n1 < $n2){
        1;
    }else{
        0;
    }
}

 

元々の処理がアレだと言われるとそうなんですが、こうやって試行錯誤してちょっとした改善で処理が高速化するとうれしいしおもしろいですね。プログラミングの醍醐味というかたのしみというか。専門用語でリファクタリングと言うそうです。

タグ : ,

【ニコニコ動画】こんなMADで大丈夫か?【エルシャダイ】

なんだか、『そんな◯◯で大丈夫か?』 というコメントをいろんな動画で見かけるので、なんだろうと思ってたんだけど『エルシャダイ』っていうゲームのMADが流行っているみたいですね。今もブームに便乗したクソ動画がものすごい勢いでニコニコ動画にアップされ続けていますw。色々見たけど個人的に面白かったものをいくつかピックアップ。(多すぎて見切れない)

とりあえず、元ネタを知らない人は下の元ネタを見てからMADを見ると意味がわかっておもしろいと思います。


【PS3/Xbox360】 El Shaddai -エルシャダイ- E3 2010 ルシフェルver‐ニコニコ動画(9)

(続きを読む)

タグ :

【ニコニコ動画】ゲームグラフィックTV第122回~第129回【レゲー】【おっさんホイホイ】

ゲームグラフィックTVの第122回~第129回までご紹介。


ゲームグラフィックTV第122回‐ニコニコ動画(9) – ゲーム雑誌


ファミコン通信系の雑誌はよく買っていたけど、買っていた目的はほぼソフトのレビューを見るためであの点数をみてソフトを買う参考にしていたが、ずいぶん騙されたなーと思うwww。今考えてもアレの所為でよくクソゲーを買わされた。

(続きを読む)

タグ : , , ,

ニンテンドー3DSの詳細発表!任天堂カンファレンス2010(2010.9.29開催)‐ニコニコ動画(9)

ニンテンドーのカンファレンス2010の動画を見ていい歳して久しぶりにゲーム機が発売と同時にほしい気持ちになった。お金貯めて待ってよう。ただ年取ると携帯ゲーム機は肩が痛くなって困るんだよね。画面が小さいのも年寄りには辛いw。ニンテンドー3DS LLをすぐに出してくださいwww。世間ではキモイとか言われている3DSラブプラスとかもやってみたいwww。

(続きを読む)

タグ :

秀丸メールの拡張機能『HTMLメールViewer』をインストールしてみた

秀丸メールを使い始めて9年くらいになります。昔はOutlook ExpressやAL-MAILを使っていました。HTMLメールViewerは1年ほど前から開発されている純正の秀丸メールの拡張機能でこれをインストールすることでHTMLメールを秀丸メール単体で表示出来るようになります。セキュリティに関しても考慮されているので比較的安心に利用出来るかと思います。

秀まるおのホームページ(サイトー企画)-HTMLメールViewer for 秀丸メール

下のような感じでHTMLメールをそのまま表示できるようになります。

20100337

(続きを読む)

タグ :

【楽天】北海松葉ずわいがに4Kgをプレゼント様に買って送った【訳あり品】

上の商品ですが、楽天の『かに匠』というショップで売っている北海松葉ずわいがにという商品です。実家の両親がふたりとも10月が誕生日なので誕生日のプレゼントとしてこのかにを贈りました。父の日と母の日もまとめてこのかにを送ったりしてます。他になにか欲しい物ないのと聞いても特に無いらしくかにでいいというのでいつもここでこのずわいがにを購入しておくっています。足折れがあったりする訳あり品ですが、味に問題があるわけではなくあくまで足が折れていたりするだけなのでそれで安くてその分量を多くしておくってあげられるのならこれがいいだろうと思ってこれにしています。両親からお礼の電話がかかってきたときに美味しかったか聞くと美味しかったというので(社交辞令だとしても)毎回ここで買っています。まあ、父はこういう事で社交辞令は言わない人なので本当に美味しいのだと思う。父が海産物が大好きなので元々かにを送るようにしたんですが、気に入ってもらえて何よりです。安いしw。

今回はいつも買っていた3Kgのものがなかったので4Kgの物にしました。(これしかなかったので)ちょっと高くなってしまいましたが、今年は父の日と母の日に何もしてあげなかったのでまとめてというとでいいかなと思って決めました。

本当はもっといいものを買ってあげたいのだけどごめんなさい。

ムービーもあるみたいなので貼りつけておきます。見ちゃうとちょとたべたくなっちゃうかもしれないので注意ですw。

タグ :

ターミネーター・プラネット|無料動画 GyaO![ギャオ]|ターミネーター・プラネット|映画の感想

ターミネーター・プラネット [DVD]

ターミネーター・プラネット|無料動画 GyaO![ギャオ]|ターミネーター・プラネット|映画

GyaOでB映画ターミネーター・プラネットを視聴。

(続きを読む)

タグ : , , ,

ロジクールのトラックボール TrackMan WheelことTM-250でFirfoxでUniversal Scrollしたくてアドオン作ろうとしたけど諦めた件

ロジクールのトラックボールTrackMan WheelことTM-250を使っています。個人的にはすごく気に入ってて、Universal Scrollという機能も気に入っています。Universal Scrollについては実際に体験してみないとその便利さの感覚がわからないかと思いますが、ホイールの様にホイールを回してズルズルページをスクロールするのではなく、トラックボールを軽く見たい方向に動かすだけで目的の位置にスクロールできるような感じです。ボールなのでスクロールスピードやスクロール量が指先で微妙な操作ができます。マウスの似たような機能にAuto Scrollがありますが似て異なるものです。Universal Scrollを覚えてしまうとAuto Scrollには戻れません。

 

LOGICOOL トラックマン トラックボール スクロールホイール搭載 TM-250

 

(続きを読む)

タグ :

GoogleがJPEGより平均で約4割サイズを減らすことが出来る新画像フォーマットWebPを発表しました。

WebPホーム  ギャラリー  よくある質問[http://code.google.com/intl/ja/speed/webp/faq.html]

グーグルが新しい画像フォーマットを発表しました。インターネット上のトラフィックを抑えるのが目的のようです。画質はそのままで画像サイズ(容量)が抑えられるのならそれに越したことはないですよね。ページの表示も早くなるしトラフィックも減るし、サーバーの負荷も下がるし。JPEGってもうずいぶん古いフォーマットだしでファイルサイズも思ったほど小さくならないのでもっと圧縮率の高い画像フォーマットできないのかなーと思うことがたまにありました。またGoogleさんがやってくれたわけです。早く普及するといいですね。ファイルサイズもJPEGより平均で約4割減らすことが出来るようですし期待してます。


よもやま話

ウェブサーバの管理をしたことがあればわかりますがanalog等の解析結果を見みるとトラフィックのほとんどが画像なんですよね。現在は動画なんかも扱うサイトはもっと大変だと思いますが、インターネットが常時接続&ブロードバンド化して来てデジカメの性能がどんどん上がってきた頃、画像によるトラフィックの増加はサーバ管理者には結構悩ましいものがあったのではないかと思います。ナローバンドの頃は大きな画像をアップロードする人はまずいなかったのですが、ブロードバンドになって一瞬で大きな画像もアップロード・ダウンロード出来るようになって、表示も一瞬で出来るようになって来ると構わず大きな画像をアップロードしてしまう人が出てきました。

ナローバンド時代にはなるべく画像をアップしないかアップロードするにしても画質を許容できるギリギリまで落として画像の縦横幅も適当な大きさに縮小してからアップロード人がほとんどでした。そうしないとアップロードにも時間がかかるし画像が表示されるのにも時間がかかるからでした。

しかし、インターネットが普及し始めブロードバンド化し始めナローバンドの人とブロードバンドの人が入り交じっていた頃にブロードバンドの人(特にナローバンドの経験がなくブロードバンドからインターネットに入った人)が大きなサイズの画像を何も考えないでサイトに貼り付けてナローバンドの人がなかなかページが表示されないなんて事が起こり始めました。デジカメから取り出した画像をそのままアップする人が結構いたんですね。画像を縮小するという事が思いつかない人や思ってもやり方が解らない人が結構いたんですね。

中には、1280×1240ピクセル位のメガバイト級の画像をイメージタグで240×160ピクセル位で表示してホームページのタイトルにして、サイトのトラフィックの99%がタイトルバナーなんて人もいたりしました。

誰でもホームページを簡単に作れるホームページビルダーの様なソフトが元凶だったのですが、どうせなら画像も適当に縮小圧縮するようなデフォルト設定になっていればいいのになーとよく思ってました。

グーグル、画像フォーマット「WebP」を発表–ウェブの高速化を図る – CNET Japan

タグ :

自動メール振り分けツールPOPFileをv.1.1.0からv1.1.1にバージョンアップ

20100331
(クリックで元のサイズで表示)

(続きを読む)

タグ : ,

 
© KUMA TYPE