SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
MATH NIGHT 2



最適化の
手前の数学




  @antimon2
チャプタ 1

自己紹介




         1
セク ショ ン 1




自己紹介 (1)
•名前:後藤 俊介 (@antimon2)

•最終学歴:名古屋大学大学院多元数理科学研究科

      博士前期課程修了 (1999/03)(数学修士)

•現役時代の専攻:組合せ数学(代数的組合せ論、グラフ理論)

•修論のタイトル:Planer Vertex-transitive Graph の Hamiltonian 性




                             2
セク ショ ン 2




自己紹介 (2)
•所属:株式会社コスモルート

    CRD(クラウドR&Dグループ) 数学班

•研究テーマ:

       •データ分析手法・ノウハウ(多変量解析、ベイズ解析、etc…)

       •ビッグデータ分析・機械学習

       ※まだ実績なし

•ブログ始めました:

       •名古屋で数学するプログラマ(仮)(http://antimon2.hatenablog.jp/)

                             3
チャプタ 2

フィボナッチ数




         4
みんな大好き
フィボナッチ数列♪
 もちろんみんな知ってるよね?


       5
 …一応、定義から説明します。




                  6
セク ショ ン 1




フィボナッチ数列とは?




前の2つの数の和が次の数となる数列。




                     7
(0,) 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …




                                                    8
フィボナッチ数列の一般項 Fn を

           フィボナッチ数
                 と言います。



5 は 5 番目のフィボナッチ数。

144 は 12番目のフィボナッチ数。etc…


                     9
チャプタ 3

フィボナッチ数を求める




              コミック版「数学ガール」第13話(下巻 p.144) をTeXで再現




         10
セク ショ ン 1




問題

【問題1】
100番目のフィボナッチ数 F100 を求めよ。


【問題2】
n 番目のフィボナッチ数 Fn を求めるプログラムを書け。




                11
問題2 だけを考えます。
問題1は、問題2ができれば n=100 を代入すれば解けるので。

(テトラちゃんのようにがんばって手計算で解かなくても良いのでw)




                   12
セク ショ ン 2




fib 関数 (1)
def fib n
    return n.even? ? -fib(-n) : fib(-n) if n < 0
    a, b = 0, 1
    n.times { a = b + b = a }
    a
end



手続き指向の解答例。



                            13
F0 (= 0)、F1 (= 1)から、

F2 = F1 + F0、F3 = F2 + F1、…を順に n まで計算しているだけ。



•シンプル。

•計算量:O(n)。

•F100は余裕で計算可能。




                              14
セク ショ ン 3




fib 関数 (2)
def fib n
    return n.even? ? -fib(-n) : fib(-n) if n < 0
    return n if n < 2
    fib(n-1) + fib(n-2)
end




関数指向の解答例。



                            15
フィボナッチ数の定義(漸化式)をそのまま実装。再帰。

Fn = Fn-1 + Fn-2 , 

 Fn-1 = Fn-2 + Fn-3 ,

  Fn-2 = Fn-3 + Fn-4 , …



•直感的。

•計算量:???

•F50すらまともに計算できない(1時間以上かかる)。

 F100なんて計算始めた日にゃ…(>_<)




                            16
⇒何らかの最適化が必要。

•メモ化

…一度計算した値は覚えておいて、再利用する。

 →計算量を O(n) に抑えることが出来る。

•末尾再帰

…再帰呼び出しを関数の最後に1回だけにするようにする。

 →こちらも計算量が O(n) に。




                     17
でもその前に。




          18
セク ショ ン 4




倍数公式




n 番目のフィボナッチ数を (n/2) 番目あたりのフィボナッチ数を使って表す公式。




                     19
証明概要:




        20
セク ショ ン 5




fib 関数 (3)
def fib n
    return n.even? ? -fib(-n) : fib(-n) if n < 0
    return n if n < 2
    n.even? ?
       (fib(n/2-1)*2 + fib(n/2)) * fib(n/2) :
       fib(n/2)**2 + fib(n/2+1)**2
end

倍数公式を利用した実装例。




                             21
倍数公式をそのまま実装。再帰。



•計算量:O(log n) ※1

•F100はもちろん、F1000くらいは余裕で実用に耐えうるスピード。

 F10000とかになるとやはり重くなってくる。

 ※普通の再帰と同じ問題。

→メモ化、または末尾再帰による最適化が必要。

※1: 最適化実施後の計算量。




                        22
セク ショ ン 6




参考:メモ化の例
   ※仮想コードです。このままでは動作しません。

cache = Hash.new
def fib n
   return n.even? ? -fib(-n) : fib(-n) if n < 0
   return n if n < 2
   cache[n] ||= n.even? ?
      (cache[n/2-1]*2 + cache[n/2]) * cache[n/2] :
      cache[n/2]**2 + cache[n/2+1]**2
end

Point: 計算結果をキャッシュに保持。2回目以降はキャッシュ値を利用。




                                23
セク ショ ン 7




参考:末尾再帰の例
   ※仮想コードです。このままでは動作しません。

def fib n
   return n.even? ? -fib(-n) : fib(-n) if n < 0
   fib_iter 1, 0, 0, 1, n
end
def fib_iter a, b, p, q, c
   return b if c.zero?
   case c
      when even; p, q, c = p**2 + q**2, (2*p+q)*q, c/2
      else a, b, c = b*q + a*q + a*p, b*p + a*q, c-1
   end
   fib_iter a, b, p, q, c
end

Point: 再帰呼び出しを最後に1回だけにする(呼び出し回数削減)。

※処理系によっては末尾再帰に対して最適化コンパイルが実施されさらに高速化。



                                           24
セク ショ ン 8




参考:フィボナッチ数の公式




導出方法は略。

(証明するだけなら F0, F1 の値と Fn = Fn-1 + Fn-2 を満たすことは容易に確認可能)




                           25
セク ショ ン 9




まとめ

•数学的考察による「根本的な高効率化」はとっても重要。

 ⇒場合によっては O(n) → O(log n) の高速化。



•メモ化(キャッシュ)、末尾再帰(イテレーション)等の最適化も重要。

 ⇒でもこれらは「次の手段」。




                            26
チャプタ 4

その他のトピック




         27
セク ショ ン 1




例えば…

•コンピュータパズル

 ⇒解探索の前に、できる限り数学的に考察して枝刈り・高効率化。

  •例:「変形魔方陣」(http://antimon2.hatenablog.jp/entry/2012/05/15/230829)

•素数列挙

 ⇒既知のアルゴリズムでも、数学的考察に基づく少しの工夫で倍速化。

  •例:「汎用的で省メモリかつかなり速い素数無限列挙」

    (http://antimon2.hatenablog.jp/entry/2012/06/19/221335)




                                            28
チャプタ 5

The library is closed !


         ご清聴、ありがとうございます




               29

Contenu connexe

Tendances

[第2版]Python機械学習プログラミング 第16章
[第2版]Python機械学習プログラミング 第16章[第2版]Python機械学習プログラミング 第16章
[第2版]Python機械学習プログラミング 第16章Haruki Eguchi
 
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介MITSUNARI Shigeo
 
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介MITSUNARI Shigeo
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxpsMITSUNARI Shigeo
 
kagami_comput2016_06
kagami_comput2016_06kagami_comput2016_06
kagami_comput2016_06swkagami
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 
研究生のためのC++ no.4
研究生のためのC++ no.4研究生のためのC++ no.4
研究生のためのC++ no.4Tomohiro Namba
 
8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティング8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティングTakeshi Takaishi
 
研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法Takeshi Yamamuro
 
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門Shiqiao Du
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mclMITSUNARI Shigeo
 

Tendances (20)

NumPy闇入門
NumPy闇入門NumPy闇入門
NumPy闇入門
 
[第2版]Python機械学習プログラミング 第16章
[第2版]Python機械学習プログラミング 第16章[第2版]Python機械学習プログラミング 第16章
[第2版]Python機械学習プログラミング 第16章
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
 
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介
 
全探索
全探索全探索
全探索
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
 
フラグを愛でる
フラグを愛でるフラグを愛でる
フラグを愛でる
 
kagami_comput2016_06
kagami_comput2016_06kagami_comput2016_06
kagami_comput2016_06
 
Boost.SIMD
Boost.SIMDBoost.SIMD
Boost.SIMD
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
LLVM最適化のこつ
LLVM最適化のこつLLVM最適化のこつ
LLVM最適化のこつ
 
研究生のためのC++ no.4
研究生のためのC++ no.4研究生のためのC++ no.4
研究生のためのC++ no.4
 
8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティング8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティング
 
研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法
 
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
 
optimal Ate pairing
optimal Ate pairingoptimal Ate pairing
optimal Ate pairing
 
emcjp Item 42
emcjp Item 42emcjp Item 42
emcjp Item 42
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
 
Emcjp item21
Emcjp item21Emcjp item21
Emcjp item21
 

Similaire à 最適化の手前の数学

命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへNaoki Kitora
 
数列で学ぶ初めての CommonLisp #fibonacci
数列で学ぶ初めての CommonLisp #fibonacci数列で学ぶ初めての CommonLisp #fibonacci
数列で学ぶ初めての CommonLisp #fibonaccipgf2alpha
 
数式をnumpyに落としこむコツ
数式をnumpyに落としこむコツ数式をnumpyに落としこむコツ
数式をnumpyに落としこむコツShuyo Nakatani
 
情報科学シケスラ Fibonacci
情報科学シケスラ Fibonacci情報科学シケスラ Fibonacci
情報科学シケスラ Fibonaccitozan gezan
 
Or seminar2011final
Or seminar2011finalOr seminar2011final
Or seminar2011finalMikio Kubo
 
はんなりPython#42 20210629
はんなりPython#42 20210629はんなりPython#42 20210629
はんなりPython#42 20210629takey Takesue
 
Cython intro prelerease
Cython intro prelereaseCython intro prelerease
Cython intro prelereaseShiqiao Du
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Seiya Tokui
 
代数トポロジー入門
代数トポロジー入門代数トポロジー入門
代数トポロジー入門Tatsuki SHIMIZU
 
Fftw誰得ガイド
Fftw誰得ガイドFftw誰得ガイド
Fftw誰得ガイドchunjp
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたってTsuyoshi Matsudate
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座bleis tift
 
cp-5. 繰り返し計算
cp-5. 繰り返し計算cp-5. 繰り返し計算
cp-5. 繰り返し計算kunihikokaneko1
 

Similaire à 最適化の手前の数学 (17)

動的計画法
動的計画法動的計画法
動的計画法
 
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ
 
数列で学ぶ初めての CommonLisp #fibonacci
数列で学ぶ初めての CommonLisp #fibonacci数列で学ぶ初めての CommonLisp #fibonacci
数列で学ぶ初めての CommonLisp #fibonacci
 
数式をnumpyに落としこむコツ
数式をnumpyに落としこむコツ数式をnumpyに落としこむコツ
数式をnumpyに落としこむコツ
 
情報科学シケスラ Fibonacci
情報科学シケスラ Fibonacci情報科学シケスラ Fibonacci
情報科学シケスラ Fibonacci
 
Or seminar2011final
Or seminar2011finalOr seminar2011final
Or seminar2011final
 
cp-9. 再帰関数
cp-9. 再帰関数cp-9. 再帰関数
cp-9. 再帰関数
 
はんなりPython#42 20210629
はんなりPython#42 20210629はんなりPython#42 20210629
はんなりPython#42 20210629
 
Cython intro prelerease
Cython intro prelereaseCython intro prelerease
Cython intro prelerease
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
 
代数トポロジー入門
代数トポロジー入門代数トポロジー入門
代数トポロジー入門
 
HPC Phys-20201203
HPC Phys-20201203HPC Phys-20201203
HPC Phys-20201203
 
会津合宿2015Day3:D問題
会津合宿2015Day3:D問題会津合宿2015Day3:D問題
会津合宿2015Day3:D問題
 
Fftw誰得ガイド
Fftw誰得ガイドFftw誰得ガイド
Fftw誰得ガイド
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座
 
cp-5. 繰り返し計算
cp-5. 繰り返し計算cp-5. 繰り返し計算
cp-5. 繰り返し計算
 

Dernier

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 

Dernier (11)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 

最適化の手前の数学