2012-10-10-01-アルゴリズムとクロージャと - 3 - project-enigma

2012-10-10-01-アルゴリズムとクロージャと - 3

>> Site top >> weblog >> 月別アーカイブ >> 2012年10月のlog >> 2012-10-10-01-アルゴリズムとクロージャと - 3

最終更新日付:2014/01/02 00:00:00


アルゴリズムとクロージャと - 3

2012 年 10 月 10 日

先日の続き。クロージャ以外の方法を検討する前に、気になっていることを確認した。それは、最初の(リストや配列を直接扱う)実装と、クロージャを使った反復子、それぞれについてリストと配列、合計4種類の実行時間を比べることだ。

以下、type-1 は最初の実装、type-2 はクロージャによる反復子の実装での実行結果だ。その他の条件は前回と同じ。ただし、コードは全てコンパイルしている(非常に遅く見えるかもしれないが、それは古いノートPCを使っているから)。

type-1, list:
    Real time: 1.5625 sec.
    Run time: 1.562 sec.
    Space: 8800088 Bytes
    GC: 12, GC time: 0.807 sec.

type-1, vector:
    Real time: 1.765625 sec.
    Run time: 1.766 sec.
    Space: 8800088 Bytes
    GC: 11, GC time: 0.624 sec.

type-2, list:
    Real time: 3.625 sec.
    Run time: 3.625 sec.
    Space: 12800256 Bytes
    GC: 17, GC time: 0.939 sec.

type-2, vector:
    Real time: 4.71875 sec.
    Run time: 4.718 sec.
    Space: 13600280 Bytes
    GC: 18, GC time: 1.015 sec.

type-2 の方が全体的に遅いのはまぁ予想どおりとして、それぞれの type でベクタの方がリストよりも遅いのが直観に反するので気になる(直観を信じ過ぎるのが良くないのはもちろんとして)。しかも、type-2 ではベクタの方がメモリも余計に使っているようだ。これも、前回の記事でコメント頂いた、CLISP であるという理由によるものか、それとも自分の書き方がどこかおかしいからか。自信がないから後者だと思うことにしよう。

まぁ、とにかくクロージャ以外の方法で反復子を実装する方法を考えてみよう。実際にはそれはもう動いていて、type-3 として次回書くものだ。だがこれも意外な結果になってしまった。続きは次回。

 

コメント

このページにコメントする

 

このページのタグ

Page tag : Common Lisp

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.