2012-10-10-01-アルゴリズムとクロージャと - 3
>> Site top >> weblog >> 月別アーカイブ >> 2012年10月のlog >> 2012-10-10-01-アルゴリズムとクロージャと - 3
最終更新日付:2012/10/10 01: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-2021 project-enigma.
Generated by CL-PREFAB.