SlideShare una empresa de Scribd logo
1 de 10
00. First


数列で学ぶ初めての CommonLisp
      # fibonacci

       2012-04-28
01. Profile


  Akiko Terada (@pgf2)

Work : software developer
02. fibonacci


F(0) = 0
F(1) = 1
F(n) = F(n-2)+F(n-1) (n >= 2)

F(-n) = (-1)^{n+1}*F(n)
03. Recursion

再帰(さいき)とは、あるものについて記述する
際に、記述しているものそれ自身への参照が、そ
の記述中にあらわれることをいう。定義におい
て、再帰があらわれているものを再帰的定義とい
う。

                      再帰 - Wikipedia
03. Recursion


(defun fib(n)
 (cond ((< n 1) 0)
        ((= n 1) 1)
        (t (+ (f (- n 2)) (f (- n 1))))))
04. Dynamic Programming


動的計画法は、コンピュータ科学の分野におい
て、ある最適化問題を複数の部分問題に分割して
解く際に、そこまでに求められている以上の最適
解が求められないような部分問題を切り捨てなが
ら解いていく手法である。

                  動的計画法 - Wikipedia
04. Dynamic Programming

(defun fib(n)
 (let ((n0 0) (n1 1) (i 1) (tmp))
   (loop
     (if (> i n) (return n0))
     (setq tmp (+ n0 n1))
     (setq n0 n1)
     (setq n1 tmp)
     (incf i))))
05. Memoization


メモ化とは、プログラムの高速化のための最適化
技法の一種であり、サブルーチン呼び出しの結果
を後で再利用するために保持し、そのサブルーチ
ン(関数)の呼び出し毎の再計算を防ぐ手法であ
る。

                    メモ化 - Wikipedia
05. Memoization
(setf (symbol-function 'fib)
    (let ((table (make-hash-table :test #'equal)))
      (labels ((f (n)
               (let ((val (gethash n table nil)))
                 (unless val
                   (setf val
                       (cond ((< n 0) 0)
                              ((= n 1) 1)
                              (t (+ (f (- n 2)) (f (- n 1))))))
                   (setf (gethash n table) val))
                  val)))
        #'f)))
07. Last



ご清聴ありがとうございました!

Más contenido relacionado

La actualidad más candente

私を SKI に連れてって
私を SKI に連れてって私を SKI に連れてって
私を SKI に連れてってSusisu
 
ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)yutannihilation
 
Magnitude ~ extend the Euler Characteristics via Möbius Inversion ~
Magnitude ~ extend the Euler Characteristics via  Möbius Inversion ~Magnitude ~ extend the Euler Characteristics via  Möbius Inversion ~
Magnitude ~ extend the Euler Characteristics via Möbius Inversion ~Tatsuki SHIMIZU
 
最適化の手前の数学
最適化の手前の数学最適化の手前の数学
最適化の手前の数学俊介 後藤
 
SICP
SICPSICP
SICPS W
 
アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法nitoyon
 
はんなりPython#42 20210629
はんなりPython#42 20210629はんなりPython#42 20210629
はんなりPython#42 20210629takey Takesue
 
Infinite SVM - ICML 2011 読み会
Infinite SVM - ICML 2011 読み会Infinite SVM - ICML 2011 読み会
Infinite SVM - ICML 2011 読み会Shuyo Nakatani
 
kagami_comput2016_07
kagami_comput2016_07kagami_comput2016_07
kagami_comput2016_07swkagami
 
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~Yuma Inoue
 
ggplot2をつかってみよう
ggplot2をつかってみようggplot2をつかってみよう
ggplot2をつかってみようHiroki Itô
 
ディジタル信号処理 課題解説 その5
ディジタル信号処理 課題解説 その5ディジタル信号処理 課題解説 その5
ディジタル信号処理 課題解説 その5noname409
 

La actualidad más candente (20)

私を SKI に連れてって
私を SKI に連れてって私を SKI に連れてって
私を SKI に連れてって
 
ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)
 
ggplot2 110129
ggplot2 110129ggplot2 110129
ggplot2 110129
 
CG2013 03
CG2013 03CG2013 03
CG2013 03
 
Magnitude ~ extend the Euler Characteristics via Möbius Inversion ~
Magnitude ~ extend the Euler Characteristics via  Möbius Inversion ~Magnitude ~ extend the Euler Characteristics via  Möbius Inversion ~
Magnitude ~ extend the Euler Characteristics via Möbius Inversion ~
 
CG2013 07
CG2013 07CG2013 07
CG2013 07
 
CG2013 05
CG2013 05CG2013 05
CG2013 05
 
CG2013 02
CG2013 02CG2013 02
CG2013 02
 
最適化の手前の数学
最適化の手前の数学最適化の手前の数学
最適化の手前の数学
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
SICP
SICPSICP
SICP
 
アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法
 
はんなりPython#42 20210629
はんなりPython#42 20210629はんなりPython#42 20210629
はんなりPython#42 20210629
 
Infinite SVM - ICML 2011 読み会
Infinite SVM - ICML 2011 読み会Infinite SVM - ICML 2011 読み会
Infinite SVM - ICML 2011 読み会
 
CG2013 06
CG2013 06CG2013 06
CG2013 06
 
kagami_comput2016_07
kagami_comput2016_07kagami_comput2016_07
kagami_comput2016_07
 
CG2013 01
CG2013 01CG2013 01
CG2013 01
 
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~
 
ggplot2をつかってみよう
ggplot2をつかってみようggplot2をつかってみよう
ggplot2をつかってみよう
 
ディジタル信号処理 課題解説 その5
ディジタル信号処理 課題解説 その5ディジタル信号処理 課題解説 その5
ディジタル信号処理 課題解説 その5
 

Similar a pre: 数列で学ぶ初めての CommonLisp #fibonacci

命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへNaoki Kitora
 
言語処理系入門€5
言語処理系入門€5言語処理系入門€5
言語処理系入門€5Kenta Hattori
 
線形識別モデル
線形識別モデル線形識別モデル
線形識別モデル貴之 八木
 

Similar a pre: 数列で学ぶ初めての CommonLisp #fibonacci (6)

命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ
 
言語処理系入門€5
言語処理系入門€5言語処理系入門€5
言語処理系入門€5
 
表現行列の問題
表現行列の問題表現行列の問題
表現行列の問題
 
表現行列問題
表現行列問題表現行列問題
表現行列問題
 
PRML 10.4 - 10.6
PRML 10.4 - 10.6PRML 10.4 - 10.6
PRML 10.4 - 10.6
 
線形識別モデル
線形識別モデル線形識別モデル
線形識別モデル
 

pre: 数列で学ぶ初めての CommonLisp #fibonacci