Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
鉄次 尾形
PDF, PPTX
2,913 views
再帰、漸化式、差分方程式とアルゴリズム Gx#20
2015/12/4に行われた Gaiaxグループエンジニア勉強会 #20 で発表したトークのスライドです。
Technology
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 45
2
/ 45
3
/ 45
4
/ 45
5
/ 45
6
/ 45
7
/ 45
8
/ 45
9
/ 45
10
/ 45
11
/ 45
12
/ 45
13
/ 45
14
/ 45
15
/ 45
16
/ 45
17
/ 45
18
/ 45
19
/ 45
20
/ 45
21
/ 45
22
/ 45
23
/ 45
24
/ 45
25
/ 45
26
/ 45
27
/ 45
28
/ 45
29
/ 45
30
/ 45
31
/ 45
32
/ 45
33
/ 45
34
/ 45
35
/ 45
36
/ 45
37
/ 45
38
/ 45
39
/ 45
40
/ 45
41
/ 45
42
/ 45
43
/ 45
44
/ 45
45
/ 45
More Related Content
PDF
IT業界における伝統芸能の継承 #hachiojipm
by
鉄次 尾形
PDF
Rでを作る
by
Nagi Teramo
PDF
RFinanceJはじめました
by
Nagi Teramo
PDF
お前の逐モン、GETだぜ!
by
Nagi Teramo
PPTX
211120 他人の書いたPythonスクリプトをステップ実行で理解する
by
Takuya Nishimoto
PPTX
210630 python
by
Takuya Nishimoto
PDF
イベント駆動とノンブロッキング #hokkaidopm
by
鉄次 尾形
PDF
今年作ったもの2013 #hokkaidopm
by
鉄次 尾形
IT業界における伝統芸能の継承 #hachiojipm
by
鉄次 尾形
Rでを作る
by
Nagi Teramo
RFinanceJはじめました
by
Nagi Teramo
お前の逐モン、GETだぜ!
by
Nagi Teramo
211120 他人の書いたPythonスクリプトをステップ実行で理解する
by
Takuya Nishimoto
210630 python
by
Takuya Nishimoto
イベント駆動とノンブロッキング #hokkaidopm
by
鉄次 尾形
今年作ったもの2013 #hokkaidopm
by
鉄次 尾形
What's hot
PPTX
他人が書いたコードのリファレンスをSphinxで作る方法
by
Takeshi Sugiyama
PDF
スクレイピングとPython
by
Hironori Sekine
PDF
次世代言語 Python による PyPy を使った次世代の処理系開発
by
shoma h
PDF
本気でPythonで宛名書きした話
by
Satoshi Yamada
PDF
自作かな漢字変換「Genji」をつくったよ
by
Masahiko Hashimoto
PDF
gemの複数バージョンカジュアルテスト #shibuyarb
by
Go Sueyoshi (a.k.a sue445)
PDF
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
by
suno88
PDF
Use Japanese with vcd/vcdExtra package
by
Tsuda University Institute for Mathematics and Computer Science
PDF
プリキュアのRuby実装の紹介 (2015 ver) #MeguroStartup
by
Go Sueyoshi (a.k.a sue445)
PPTX
Django learning
by
Yusuke Muraoka
PDF
るりまの1/nはMatsue.rbでできています。
by
Sho Hashimoto
PDF
10分でわかるPythonの開発環境
by
Hisao Soyama
ODP
@nukokusa_botを支える技術
by
Joe_noh
PPTX
2つのmosaic plotと日本語表示
by
Tsuda University Institute for Mathematics and Computer Science
PDF
松江Ruby会議03 LT るりまアピール
by
Sho Hashimoto
PDF
Rubyと機械学習の現状
by
Aki Ariga
PDF
ルネサスナイト
by
yamanekko
PDF
pythonでemlファイルを扱う話
by
Satoshi Yamada
PDF
DBエンジニアに必要だったPythonのスキル
by
Satoshi Yamada
PPTX
Atnd地域検索作ったよー
by
Ohishi Mikage
他人が書いたコードのリファレンスをSphinxで作る方法
by
Takeshi Sugiyama
スクレイピングとPython
by
Hironori Sekine
次世代言語 Python による PyPy を使った次世代の処理系開発
by
shoma h
本気でPythonで宛名書きした話
by
Satoshi Yamada
自作かな漢字変換「Genji」をつくったよ
by
Masahiko Hashimoto
gemの複数バージョンカジュアルテスト #shibuyarb
by
Go Sueyoshi (a.k.a sue445)
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
by
suno88
Use Japanese with vcd/vcdExtra package
by
Tsuda University Institute for Mathematics and Computer Science
プリキュアのRuby実装の紹介 (2015 ver) #MeguroStartup
by
Go Sueyoshi (a.k.a sue445)
Django learning
by
Yusuke Muraoka
るりまの1/nはMatsue.rbでできています。
by
Sho Hashimoto
10分でわかるPythonの開発環境
by
Hisao Soyama
@nukokusa_botを支える技術
by
Joe_noh
2つのmosaic plotと日本語表示
by
Tsuda University Institute for Mathematics and Computer Science
松江Ruby会議03 LT るりまアピール
by
Sho Hashimoto
Rubyと機械学習の現状
by
Aki Ariga
ルネサスナイト
by
yamanekko
pythonでemlファイルを扱う話
by
Satoshi Yamada
DBエンジニアに必要だったPythonのスキル
by
Satoshi Yamada
Atnd地域検索作ったよー
by
Ohishi Mikage
Viewers also liked
PDF
穏やかにファイルを削除する
by
鉄次 尾形
PDF
Executive Summary report
by
Harshwardhan Kulkarni
PDF
コードの動的生成のお話
by
鉄次 尾形
PDF
最近のメールまわりのお仕事のお話
by
鉄次 尾形
PDF
4月16日だからFoursquare 位置情報とライフログ
by
鉄次 尾形
PDF
穏やかにファイルを削除する続き
by
鉄次 尾形
PDF
超小規模環境のMySQL #mysqlcasual
by
鉄次 尾形
PDF
三角関数の加法定理はなぜ難しいのか
by
鉄次 尾形
PDF
fwfsf
by
professional-journey
PDF
日本全国ぶらりPerl旅
by
鉄次 尾形
PDF
Perlで生きる10年
by
鉄次 尾形
PDF
Perl ウェブ開発の中世〜CGI と Plack の間〜
by
鉄次 尾形
穏やかにファイルを削除する
by
鉄次 尾形
Executive Summary report
by
Harshwardhan Kulkarni
コードの動的生成のお話
by
鉄次 尾形
最近のメールまわりのお仕事のお話
by
鉄次 尾形
4月16日だからFoursquare 位置情報とライフログ
by
鉄次 尾形
穏やかにファイルを削除する続き
by
鉄次 尾形
超小規模環境のMySQL #mysqlcasual
by
鉄次 尾形
三角関数の加法定理はなぜ難しいのか
by
鉄次 尾形
fwfsf
by
professional-journey
日本全国ぶらりPerl旅
by
鉄次 尾形
Perlで生きる10年
by
鉄次 尾形
Perl ウェブ開発の中世〜CGI と Plack の間〜
by
鉄次 尾形
Similar to 再帰、漸化式、差分方程式とアルゴリズム Gx#20
PDF
最適化の手前の数学
by
俊介 後藤
PPTX
情報科学シケスラ Fibonacci
by
tozan gezan
PDF
Functional Way
by
Kent Ohashi
PDF
Rで学ぶ逆変換(逆関数)法
by
Nagi Teramo
ODP
関東第2回r勉強会
by
Paweł Rusin
PDF
「現実世界に活かす数学」 (麻布高等学校、教養総合、数学講義 5 回目)
by
Kensuke Otsuki
PDF
コンピュータで全く使われない数表現
by
Yu(u)ki IWABUCHI
PPTX
純粋関数型アルゴリズム入門
by
Kimikazu Kato
PPTX
LLM は数学を理解しているのか?
by
Hide Koba
ODP
第三回R勉強会
by
Paweł Rusin
PDF
【Unity道場】ゲーム制作に使う数学を学習しよう
by
Unity Technologies Japan K.K.
PDF
PRML復々習レーン#7 前回までのあらすじ
by
sleepy_yoshi
PDF
フレッシュマンセミナー2005
by
Takeo Kunishima
PDF
フィボナッチ数列の作り方
by
Tomoya Kawanishi
PDF
指数時間アルゴリズムの最先端
by
Yoichi Iwata
PDF
指数時間アルゴリズム入門
by
Yoichi Iwata
PDF
命令プログラミングから関数プログラミングへ
by
Naoki Kitora
PDF
PRML4.3.3
by
sleepy_yoshi
PDF
第15回 配信講義 計算科学技術特論B(2022)
by
RCCSRENKEI
PDF
Tokyo.R #19 発表資料 「Rで色々やってみました」
by
Masayuki Isobe
最適化の手前の数学
by
俊介 後藤
情報科学シケスラ Fibonacci
by
tozan gezan
Functional Way
by
Kent Ohashi
Rで学ぶ逆変換(逆関数)法
by
Nagi Teramo
関東第2回r勉強会
by
Paweł Rusin
「現実世界に活かす数学」 (麻布高等学校、教養総合、数学講義 5 回目)
by
Kensuke Otsuki
コンピュータで全く使われない数表現
by
Yu(u)ki IWABUCHI
純粋関数型アルゴリズム入門
by
Kimikazu Kato
LLM は数学を理解しているのか?
by
Hide Koba
第三回R勉強会
by
Paweł Rusin
【Unity道場】ゲーム制作に使う数学を学習しよう
by
Unity Technologies Japan K.K.
PRML復々習レーン#7 前回までのあらすじ
by
sleepy_yoshi
フレッシュマンセミナー2005
by
Takeo Kunishima
フィボナッチ数列の作り方
by
Tomoya Kawanishi
指数時間アルゴリズムの最先端
by
Yoichi Iwata
指数時間アルゴリズム入門
by
Yoichi Iwata
命令プログラミングから関数プログラミングへ
by
Naoki Kitora
PRML4.3.3
by
sleepy_yoshi
第15回 配信講義 計算科学技術特論B(2022)
by
RCCSRENKEI
Tokyo.R #19 発表資料 「Rで色々やってみました」
by
Masayuki Isobe
More from 鉄次 尾形
PDF
Perl入学式 2018年度の報告
by
鉄次 尾形
PDF
【公開版】AWS基礎 for 新卒エンジニア
by
鉄次 尾形
PDF
俺のこだわりデスクのその後
by
鉄次 尾形
PDF
Hokkaido.pmと7年
by
鉄次 尾形
PDF
WordPress 運用を支える Perl
by
鉄次 尾形
PDF
障害対応とその防止策
by
鉄次 尾形
PDF
働きやすい社内を目指す!二酸化炭素計測ツール
by
鉄次 尾形
PDF
mod_perlプログラマーがYAPCで語るレガシー開発論
by
鉄次 尾形
PDF
東京近郊のPerlコミュニティのご紹介 #lcs2015
by
鉄次 尾形
PDF
設定ファイルに使われそうなデータ形式
by
鉄次 尾形
PDF
ライフログ、時系列メモ
by
鉄次 尾形
PDF
今に伝えるメールの技術 #yapcasia #yapcasiareject
by
鉄次 尾形
PDF
マルチタスクって奥が深い #mishimapm
by
鉄次 尾形
PDF
2014年には役に立たないセッションの昔話 #hachiojipm
by
鉄次 尾形
PDF
そのsleep、ちょっと待った! #perlbeginners
by
鉄次 尾形
PDF
環境が変わって最近知ったもの #hachiojipm
by
鉄次 尾形
PDF
これからPerlを使っていくみなさんへ #Perl入学式
by
鉄次 尾形
PDF
エディタ遍歴2014 #hachiojipm
by
鉄次 尾形
PDF
プロセスの永続化でコスト削減 #perlbeginners
by
鉄次 尾形
Perl入学式 2018年度の報告
by
鉄次 尾形
【公開版】AWS基礎 for 新卒エンジニア
by
鉄次 尾形
俺のこだわりデスクのその後
by
鉄次 尾形
Hokkaido.pmと7年
by
鉄次 尾形
WordPress 運用を支える Perl
by
鉄次 尾形
障害対応とその防止策
by
鉄次 尾形
働きやすい社内を目指す!二酸化炭素計測ツール
by
鉄次 尾形
mod_perlプログラマーがYAPCで語るレガシー開発論
by
鉄次 尾形
東京近郊のPerlコミュニティのご紹介 #lcs2015
by
鉄次 尾形
設定ファイルに使われそうなデータ形式
by
鉄次 尾形
ライフログ、時系列メモ
by
鉄次 尾形
今に伝えるメールの技術 #yapcasia #yapcasiareject
by
鉄次 尾形
マルチタスクって奥が深い #mishimapm
by
鉄次 尾形
2014年には役に立たないセッションの昔話 #hachiojipm
by
鉄次 尾形
そのsleep、ちょっと待った! #perlbeginners
by
鉄次 尾形
環境が変わって最近知ったもの #hachiojipm
by
鉄次 尾形
これからPerlを使っていくみなさんへ #Perl入学式
by
鉄次 尾形
エディタ遍歴2014 #hachiojipm
by
鉄次 尾形
プロセスの永続化でコスト削減 #perlbeginners
by
鉄次 尾形
再帰、漸化式、差分方程式とアルゴリズム Gx#20
1.
再帰、漸化式、差分方程式と アルゴリズム OGATA Tetsuji (@xtetsuji) 2015/12/03
Gaiaxグループエンジニア勉強会 #20
2.
自己紹介 • 尾形 鉄次
(OGATA Tetsuji) a.k.a. @xtetsuji • Blog: http://post.tetsuji.jp/ • mod_perl 芸人 • RND インフラチーム (2015/06/10∼) • 社内勉強会初デビュー
3.
インフラチーム? • Perl は社会人になってから10年ほど書いているけれど、 もともとは大学院時代に数学科のメールサーバを作って くれと頼まれたのがIT系の始まり→インフラだ •
学生時代はさほどプログラミングできなかったし、興味 も無かったけれど、なんとかIT業界で生きてます • 学生時代はメールとLaTeXの生活で、逆に数学とコン ピュータが結びついていなかったのを最近リハビリ中
4.
最近の社内のアウトプットで 結構印象に残ったもの
7.
単純だけど奥が深い数学 • フィボナッチ数列 • カプレカ数
8.
どっちも再帰的 • フィボナッチ数列もカプレカ数も、手続きがあってアル ゴリズム感満点な割にシンプルで良い • その他の古典的なものはハノイの塔とか •
フィボナッチ数列は高校数学では漸化式と言ったりする • ときどき差分方程式とも呼ばれたりして、微分方程式の 数値解析などにも顔を出したり
9.
Fn+2 = Fn+1
+ Fn n 2 N, F1 = F2 = 1
10.
#!/usr/bin/perl use strict; use warnings; sub
fib { my $n = shift; if ( $n <= 0 ) { die; } if ( $n == 1 || $n == 2 ) { return 1; } else { return fib($n-1) + fib($n-2); } } print fib(7); # 13
11.
再帰呼び出しの良い教材
12.
じゃ、100項目はいくつかな?
13.
あれ?結果が返ってこない!
14.
手元では、50項目でも 10分で処理が終わらない
15.
#!/usr/bin/perl use strict; use warnings; my
$n = shift || die "input number"; my $call_count = 0; sub fib { $call_count++; my $n = shift; if ( $n <= 0 ) { die; } print " " x ($n - 1) . ".n"; if ( $n == 1 || $n == 2 ) { return 1; } else { return fib($n-1) + fib($n-2); } } print fib($n) . "n"; print "call_count=$call_countn";
16.
関数の呼び出し回数が多い • $call_count すなわち
fib の呼び出し回数が多い • $n に対応する $call_count の増加量は元のフィボナッチ 数列と同程度に巨大になる • call_count($n+2) = call_count($n+1)+call_count($n)+1
17.
再帰関数の呼び出し回数 • 再帰の実装はシンプルになっても、呼び出し回数が甚大 になるとツラい • 今回は回数だけが問題だけれども、再帰が深すぎると deep
recursion で例外になることも • 今回はサブルーチンに副作用がないまさに関数なわけで、 無駄だらけじゃない?
18.
メモ化の手法 • 他の条件によらず x
に対して y = func(x) が固定なら、 func(x) の計算結果をキャッシュすればいい • このことをメモ化 (memoize) という • 関数型言語的に言えば、参照透過性とかナントカ
19.
#!/usr/bin/perl use strict; use warnings; use
Memoize; memoize('fib'); my $n = shift || die "input number"; my $call_count = 0; sub fib { $call_count++; my $n = shift; die if $n <= 0; print " " x ($n - 1). ".n"; if ( $n == 1 || $n == 2 ) { return 1; } else { return fib($n-1) + fib($n-2); } } print fib($n) . "n"; print "call_count=$call_countn";
20.
速∼いヽ(=´▽`=)ノ
21.
Memoizeモジュール • 参照透過性のある関数であれば、メモリと相談の上で Memoize をすると、一度計算した引数で関数を二度目 以降実行すると、キャッシュの結果を返すと効率的 •
Memoize モジュールの適用が透過的なのでキャッシュ 変数を用意したりしなくてよいのが便利
22.
Function.prototype.memoized = function(key){ this._values
= this._values || {}; return this._values[key] !== undefined ? this._values[key] : this._values[key] = this.apply(this, arguments); }; Function.prototype.memoize = function(){ var fn = this; return function(){ return fn.memoized.apply(fn, arguments); }; }; // 用例 var fib = (function(n) { if ( n == 1 || n == 2 ) return 1; return fib(n-1) + fib(n-2); }).memoize(); console.log(fib(100)); JavaScript Ninja の極意 (ジョン・レシグ著) より
23.
一発で導出する式はないの? • どんな巨大な n
でも一発で fib(n) が求められる式? • 再帰などの反復手続きによらない閉じた式または一般項 • 母関数論などを使うと導けます(詳細割愛)
24.
Fn = 1 p 5 ( 1 + p 5 2 !n 1 p 5 2 !n)
25.
さらに • 小数点以下の誤差を丸めるようにすれば、以下の公式ま で簡略化するらしい(Wikipediaより) Fn = $ 1 p 5 1
+ p 5 2 !n + 1 2 %
26.
#!/usr/bin/perl use strict; use warnings; use
Benchmark qw(:all); use Memoize; memoize('fib_r'); sub fib_r { my $n = shift; if ( $n == 1 || $n == 2 ) { return 1; } return fib_r($n-1)+fib_r($n-2); } sub fib_t { my $n = shift; return int(sqrt(5)*((1+sqrt(5))/2)**$n + 1/2); } timethese(1_000_000, { recursion => sub { fib_r(100); }, theorem => sub { fib_t(100); }, });
27.
$ perl bench-fib.pl Benchmark:
timing 1000000 iterations of recursion, theorem... recursion: 3 wallclock secs ( 2.73 usr + 0.01 sys = 2.74 CPU) @ 364963.50/s (n=1000000) theorem: 1 wallclock secs ( 0.42 usr + 0.00 sys = 0.42 CPU) @ 2380952.38/s (n=1000000)
28.
速∼いヽ(=´▽`=)ノ
29.
一般項、最高∼
30.
カプレカ数
31.
カプレカ数:定義1 • 正の整数を2乗し、それが偶数桁 2n
桁である場合は先頭 n 桁と末尾 n 桁に 分け、奇数桁 2n + 1 桁である場合は先頭 n 桁と末尾 n + 1 桁に分けて和を 取る。この操作によって元の値に等しくなる数をカプレカ数と呼ぶ。 • 例えば、2972 = 88209 であるが、これを前の2桁 88 と後ろの3桁 209 に分 けて足すと、88 + 209 = 297 となるので、297 はカプレカ数である。 • この定義でのカプレカ数は、小さな順に • 1, 9, 45, 55, 99, 297, 703, 999, 2223, 2728, 4879, 4950, 5050, 5292, … (オンライン整数列大辞典の数列 A006886) • である。(Wikipediaより)
32.
文字列操作と数値操作 • 「偶数桁 2n
桁である場合は先頭 n 桁と末尾 n 桁に分 け、奇数桁 2n + 1 桁である場合は先頭 n 桁と末尾 n + 1 桁に分けて和を取る」 • 文字列操作なら length と substr などを使う • 数値操作なら、桁数を求める関数や床関数を使っていく
33.
数値操作の役立つ君 • 桁数関数: • 上n桁を求める関数: •
下n桁を求める関数: keta(x) = blog10 xc + 1 An(x) = j x 10keta(x) n k Bn(x) = x 10n Aketa(x) n(x)
34.
数値操作の役立つ君 • これだけでも文字列操作から離れられる • とはいえ明示的な条件分岐・制御構造は必要 •
条件分岐・制御構造も「閉じた式」にできない? • 面白そうなのでやってみる
35.
数値操作の役立つ君 • 偶数なら1、奇数なら0: • 奇数なら1、偶数なら0: •
公式: even(x) = cos ⇡x 2 odd(x) = sin ⇡x 2 even(x) + odd(x) = 1
36.
数値操作の役立つ君 • 定義1を書き換えるとこうなる • xの桁が2nの場合 •
xの桁が2n+1の場合 • 先ほどの even と odd 関数があるので、これもさらにま とめられるぞ! An(x2 ) + Bn+1(x2 ) = x An(x2 ) + Bn(x2 ) = x
37.
定義1の閉じた式を求めて (Aketa(x2)(x2 ) + Bketa(x2)(x2 ))even(x2 ) +
(Aketa(x2) 1 2 (x2 ) + Bketa(x2) 1 2 +1 (x2 ))odd(x2 ) = x
38.
ちょっとボリュームある…
39.
定義1の閉じた式を求めて • この方程式を満たす x
を求めれば定義1のカプレカ数が 求まる…のか? • さらに手元で計算したけれど、余白がどんどん無くなる • 一般項が求まらない、または非常に難しい形になる場合 もあるので、不必要なら妥協する場合もある • 面白いから計算練習として計算するというのも良い
40.
高校数学が分からない? • 今回の漸化式や数列は高校数学の範囲 • 大学レベルの数学の勉強会はちらほらあるものの、高校 数学をやり直せる勉強会が今まで無かった •
今まで?
41.
ITエンジニアのための 高校数学勉強会 #1 http://highschoolmath.connpass.com/event/23792/
42.
高校数学をやり直す • 今まで構想を温めていた高校数学をやり直す勉強会 • 第1回目は12月9日、会場はモバイルファクトリーさん •
数学 I II A B を丁寧にかつ俯瞰して扱います • 理系の数学である数学IIIと数学活用の取り扱いも検討中 • 興味ありましたらぜひお越しください
43.
モバイルファクトリーさんを 会場に選んだ理由?
44.
ホワイトボードが 超書きやすいんですよ!
45.
🍻おしまい🍣
Download