Submit Search
Upload
Matrix Multiplication in Strassen Algorithm
•
0 likes
•
1,602 views
T
Taku Miyakawa
Follow
Matrix Multiplication in Strassen Algorithm
Read less
Read more
Software
Report
Share
Report
Share
1 of 9
Download now
Download to read offline
Recommended
数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013
Shuyo Nakatani
AtCoder Regular Contest 026 解説
AtCoder Regular Contest 026 解説
AtCoder Inc.
Nimで競技プログラミングを始めた話(1ヶ月)
Nimで競技プログラミングを始めた話(1ヶ月)
tattaka_sun
【DL輪読会】Semi-Parametric Neural Image Synthesis
【DL輪読会】Semi-Parametric Neural Image Synthesis
Deep Learning JP
詳説word2vec
詳説word2vec
Haruka Oikawa
色々なダイクストラ高速化
色々なダイクストラ高速化
yosupo
2SAT(充足可能性問題)の解き方
2SAT(充足可能性問題)の解き方
Tsuneo Yoshioka
[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...
[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...
Deep Learning JP
Recommended
数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013
Shuyo Nakatani
AtCoder Regular Contest 026 解説
AtCoder Regular Contest 026 解説
AtCoder Inc.
Nimで競技プログラミングを始めた話(1ヶ月)
Nimで競技プログラミングを始めた話(1ヶ月)
tattaka_sun
【DL輪読会】Semi-Parametric Neural Image Synthesis
【DL輪読会】Semi-Parametric Neural Image Synthesis
Deep Learning JP
詳説word2vec
詳説word2vec
Haruka Oikawa
色々なダイクストラ高速化
色々なダイクストラ高速化
yosupo
2SAT(充足可能性問題)の解き方
2SAT(充足可能性問題)の解き方
Tsuneo Yoshioka
[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...
[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...
Deep Learning JP
Grad-CAMの始まりのお話
Grad-CAMの始まりのお話
Shintaro Yoshida
RMQ クエリ処理
RMQ クエリ処理
HCPC: 北海道大学競技プログラミングサークル
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
Preferred Networks
深層学習による非滑らかな関数の推定
深層学習による非滑らかな関数の推定
Masaaki Imaizumi
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
私とOSSの25年
私とOSSの25年
MITSUNARI Shigeo
ベイズ最適化によるハイパラーパラメータ探索
ベイズ最適化によるハイパラーパラメータ探索
西岡 賢一郎
Rolling Hashを殺す話
Rolling Hashを殺す話
Nagisa Eto
双対性
双対性
Yoichi Iwata
Marp Tutorial
Marp Tutorial
Rui Watanabe
Kaggleのテクニック
Kaggleのテクニック
Yasunori Ozaki
AutoGluonではじめるAutoML
AutoGluonではじめるAutoML
西岡 賢一郎
abc032
abc032
AtCoder Inc.
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善
Naoaki Okazaki
グラフと木
グラフと木
京大 マイコンクラブ
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Preferred Networks
動的輪郭モデル
動的輪郭モデル
Arumaziro
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
Graph Algorithms Part 1
Graph Algorithms Part 1
Taku Miyakawa
More Related Content
What's hot
Grad-CAMの始まりのお話
Grad-CAMの始まりのお話
Shintaro Yoshida
RMQ クエリ処理
RMQ クエリ処理
HCPC: 北海道大学競技プログラミングサークル
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
Preferred Networks
深層学習による非滑らかな関数の推定
深層学習による非滑らかな関数の推定
Masaaki Imaizumi
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
私とOSSの25年
私とOSSの25年
MITSUNARI Shigeo
ベイズ最適化によるハイパラーパラメータ探索
ベイズ最適化によるハイパラーパラメータ探索
西岡 賢一郎
Rolling Hashを殺す話
Rolling Hashを殺す話
Nagisa Eto
双対性
双対性
Yoichi Iwata
Marp Tutorial
Marp Tutorial
Rui Watanabe
Kaggleのテクニック
Kaggleのテクニック
Yasunori Ozaki
AutoGluonではじめるAutoML
AutoGluonではじめるAutoML
西岡 賢一郎
abc032
abc032
AtCoder Inc.
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善
Naoaki Okazaki
グラフと木
グラフと木
京大 マイコンクラブ
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Preferred Networks
動的輪郭モデル
動的輪郭モデル
Arumaziro
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
What's hot
(20)
Grad-CAMの始まりのお話
Grad-CAMの始まりのお話
RMQ クエリ処理
RMQ クエリ処理
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
深層学習による非滑らかな関数の推定
深層学習による非滑らかな関数の推定
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
私とOSSの25年
私とOSSの25年
ベイズ最適化によるハイパラーパラメータ探索
ベイズ最適化によるハイパラーパラメータ探索
Rolling Hashを殺す話
Rolling Hashを殺す話
双対性
双対性
Marp Tutorial
Marp Tutorial
Kaggleのテクニック
Kaggleのテクニック
AutoGluonではじめるAutoML
AutoGluonではじめるAutoML
abc032
abc032
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善
グラフと木
グラフと木
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
動的輪郭モデル
動的輪郭モデル
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
Viewers also liked
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
Graph Algorithms Part 1
Graph Algorithms Part 1
Taku Miyakawa
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
Taku Miyakawa
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語
Taku Miyakawa
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
Taku Miyakawa
Kink の宣伝
Kink の宣伝
Taku Miyakawa
Hadoop jobbuilder
Hadoop jobbuilder
Taku Miyakawa
擬似乱数生成器の評価
擬似乱数生成器の評価
Taku Miyakawa
Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354
Taku Miyakawa
コルーチンの実装について
コルーチンの実装について
Taku Miyakawa
金勘定のためのBigDecimalそしてMoney and Currency API
金勘定のためのBigDecimalそしてMoney and Currency API
Taku Miyakawa
Quasar: Actor Model and Light Weight Threads on Java
Quasar: Actor Model and Light Weight Threads on Java
Taku Miyakawa
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Yuji Kubota
Prepare for Java 9 #jjug
Prepare for Java 9 #jjug
Yuji Kubota
楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjug
Yuji Kubota
言語設計者が意味論を書くときに考えていたこと
言語設計者が意味論を書くときに考えていたこと
Taku Miyakawa
Viewers also liked
(16)
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Graph Algorithms Part 1
Graph Algorithms Part 1
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
Kink の宣伝
Kink の宣伝
Hadoop jobbuilder
Hadoop jobbuilder
擬似乱数生成器の評価
擬似乱数生成器の評価
Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354
コルーチンの実装について
コルーチンの実装について
金勘定のためのBigDecimalそしてMoney and Currency API
金勘定のためのBigDecimalそしてMoney and Currency API
Quasar: Actor Model and Light Weight Threads on Java
Quasar: Actor Model and Light Weight Threads on Java
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Prepare for Java 9 #jjug
Prepare for Java 9 #jjug
楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjug
言語設計者が意味論を書くときに考えていたこと
言語設計者が意味論を書くときに考えていたこと
Similar to Matrix Multiplication in Strassen Algorithm
行列計算アルゴリズム
行列計算アルゴリズム
Takuo Tachibana
Prml 最尤推定からベイズ曲線フィッティング
Prml 最尤推定からベイズ曲線フィッティング
takutori
Cosmology
Cosmology
KENTAROHARA
MMDs10.6-7
MMDs10.6-7
mfumi
2018年度秋学期 応用数学(解析) 第4部・「その先の解析学」への導入 第13回 複素関数論(2) 孤立特異点と留数 (2018. 12. 18)
2018年度秋学期 応用数学(解析) 第4部・「その先の解析学」への導入 第13回 複素関数論(2) 孤立特異点と留数 (2018. 12. 18)
Akira Asano
公開鍵暗号(3): 離散対数問題
公開鍵暗号(3): 離散対数問題
Joe Suzuki
C02
C02
anonymousouj
Fourier analysis on symmetric group
Fourier analysis on symmetric group
HanpenRobot
続・わかりやすいパターン認識 9章
続・わかりやすいパターン認識 9章
hakusai
スパースモデリングによる多次元信号・画像復元
スパースモデリングによる多次元信号・画像復元
Shogo Muramatsu
Computing for Isogeny Kernel Problem by Groebner Basis
Computing for Isogeny Kernel Problem by Groebner Basis
Yasu Math
PRML復々習レーン#9 6.3-6.3.1
PRML復々習レーン#9 6.3-6.3.1
sleepy_yoshi
これならわかる最適化数学8章_動的計画法
これならわかる最適化数学8章_動的計画法
kenyanonaka
【Zansa】第12回勉強会 -PRMLからベイズの世界へ
【Zansa】第12回勉強会 -PRMLからベイズの世界へ
Zansa
アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法
nitoyon
Prml3.5 エビデンス近似〜
Prml3.5 エビデンス近似〜
Yuki Matsubara
確率微分方程式の基礎
確率微分方程式の基礎
HanpenRobot
NN, CNN, and Image Analysis
NN, CNN, and Image Analysis
Yuki Shimada
コンピュータビジョン最先端ガイド6 第2章:4~4.2節
コンピュータビジョン最先端ガイド6 第2章:4~4.2節
nonane
Fourier transform
Fourier transform
ShinoharaTakuto
Similar to Matrix Multiplication in Strassen Algorithm
(20)
行列計算アルゴリズム
行列計算アルゴリズム
Prml 最尤推定からベイズ曲線フィッティング
Prml 最尤推定からベイズ曲線フィッティング
Cosmology
Cosmology
MMDs10.6-7
MMDs10.6-7
2018年度秋学期 応用数学(解析) 第4部・「その先の解析学」への導入 第13回 複素関数論(2) 孤立特異点と留数 (2018. 12. 18)
2018年度秋学期 応用数学(解析) 第4部・「その先の解析学」への導入 第13回 複素関数論(2) 孤立特異点と留数 (2018. 12. 18)
公開鍵暗号(3): 離散対数問題
公開鍵暗号(3): 離散対数問題
C02
C02
Fourier analysis on symmetric group
Fourier analysis on symmetric group
続・わかりやすいパターン認識 9章
続・わかりやすいパターン認識 9章
スパースモデリングによる多次元信号・画像復元
スパースモデリングによる多次元信号・画像復元
Computing for Isogeny Kernel Problem by Groebner Basis
Computing for Isogeny Kernel Problem by Groebner Basis
PRML復々習レーン#9 6.3-6.3.1
PRML復々習レーン#9 6.3-6.3.1
これならわかる最適化数学8章_動的計画法
これならわかる最適化数学8章_動的計画法
【Zansa】第12回勉強会 -PRMLからベイズの世界へ
【Zansa】第12回勉強会 -PRMLからベイズの世界へ
アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法
Prml3.5 エビデンス近似〜
Prml3.5 エビデンス近似〜
確率微分方程式の基礎
確率微分方程式の基礎
NN, CNN, and Image Analysis
NN, CNN, and Image Analysis
コンピュータビジョン最先端ガイド6 第2章:4~4.2節
コンピュータビジョン最先端ガイド6 第2章:4~4.2節
Fourier transform
Fourier transform
More from Taku Miyakawa
ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月
Taku Miyakawa
Java Quine Golf
Java Quine Golf
Taku Miyakawa
Processing LTSV by Apache Pig
Processing LTSV by Apache Pig
Taku Miyakawa
Java 7 invokedynamic の概要
Java 7 invokedynamic の概要
Taku Miyakawa
Java オブジェクトの内部構造
Java オブジェクトの内部構造
Taku Miyakawa
Kink: developing a programming language on the JVM
Kink: developing a programming language on the JVM
Taku Miyakawa
More from Taku Miyakawa
(6)
ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月
Java Quine Golf
Java Quine Golf
Processing LTSV by Apache Pig
Processing LTSV by Apache Pig
Java 7 invokedynamic の概要
Java 7 invokedynamic の概要
Java オブジェクトの内部構造
Java オブジェクトの内部構造
Kink: developing a programming language on the JVM
Kink: developing a programming language on the JVM
Matrix Multiplication in Strassen Algorithm
1.
Strassenのアルゴリズム による行列の積の計算 2017-09-19 宮川 拓
2.
概要 n*nの密な正方行列の積が、Θ(n^3)よ りも漸近的に小さな計算量で計算できる びっくり
実装&計測してみた 元ネタ: コルメン等『アルゴリズム・イントロダク ション』第3版, 4.2節 2/9
3.
行列の積をふつうに計算 ふつうに計算 𝐴
= ( 𝑎 𝑖 𝑗 ), 𝐵 = ( 𝑏 𝑖 𝑗 )をn次の正方行列と する。 𝐶 = 𝐴 ∙ 𝐵とすると、その要素 𝑐 𝑖 𝑗 は、 𝑐 𝑖 𝑗 = σ 𝑘=1 𝑛 𝑎 𝑖 𝑘 ∙ 𝑏 𝑘 𝑗 これは素直に下記の3重ループで書ける for i in 1~n for j in 1~n for k in 1~n c [i,j ]+=a[ i,k ]* b [k,j ] 計算量はΘ(n*n*n)=Θ(n^3) 3/9
4.
準備: 分割統治 A,
B, Cを4つずつの(n /2)次正方行列 に分割すると、C=A・Bは 𝐶11 𝐶12 𝐶21 𝐶22 = 𝐴11 𝐴12 𝐴21 𝐴22 ∙ 𝐵11 𝐵12 𝐵21 𝐵22 = 𝐴11 ∙ 𝐵11 + 𝐴12 ∙ 𝐵21 𝐴11 ∙ 𝐵12 + 𝐴12 ∙ 𝐵22 𝐴21 ∙ 𝐵11 + 𝐴22 ∙ 𝐵21 𝐴21 ∙ 𝐵12 + 𝐴22 ∙ 𝐵22 と書き直せる 書き直した式を再帰関数で実装すると、1 回の呼び出しは、半分の次数の部分行列同 士の乗算について、8回関数を呼び出す したがって、その計算量はΘ(n^3) 4/9
5.
Strassenのアルゴリズム こ こ
で 𝑃1 ~ 𝑃7 を 下 記 の よ う に 置 く と 𝑃1 = 𝐴 1 1 ( 𝐵1 2 − 𝐵 2 2 ) 𝑃2 = ( 𝐴 1 1 + 𝐴 1 2 ) 𝐵 2 2 𝑃3 = ( 𝐴 2 1 + 𝐴 2 2 ) 𝐵1 1 𝑃4 = 𝐴 2 2 𝐵 2 1 − 𝐵1 1 𝑃5 = ( 𝐴 1 1 + 𝐴 2 2 ) ( 𝐵1 1 + 𝐵 2 2 ) 𝑃6 = 𝐴 1 2 − 𝐴 2 2 𝐵 2 1 + 𝐵 2 2 𝑃7 = 𝐴 1 1 − 𝐴 2 1 𝐵1 1 + 𝐵1 2 次 が 成 り 立 つ 𝐶1 1 = 𝐴 1 1 ∙ 𝐵1 1 + 𝐴 1 2 ∙ 𝐵 2 1 = 𝑃5 + 𝑃4 − 𝑃2 + 𝑃6 𝐶1 2 = 𝐴 1 1 ∙ 𝐵1 2 + 𝐴 1 2 ∙ 𝐵 2 2 = 𝑃1 + 𝑃2 𝐶2 1 = 𝐴 2 1 ∙ 𝐵1 1 + 𝐴 2 2 ∙ 𝐵 2 1 = 𝑃3 + 𝑃4 𝐶2 2 = 𝐴 2 1 ∙ 𝐵1 2 + 𝐴 2 2 ∙ 𝐵 2 2 = 𝑃5 + 𝑃1 − 𝑃3 − 𝑃7 5/9
6.
Strassenのアルゴリズム 前ページの計算を再帰関数として実装 すると、1回の呼び出しごとに、部分 行列の乗算の呼び出しは7回 nを2倍すると計算量は7倍に増える
したがって、計算量は Θ 𝑛 𝑙𝑜𝑔27 = Θ 𝑛2.8073… 6/9
7.
実装 https://bitbucket.org/miyakawataku/ matrix- multiplication/src/default/matrix.go 7/9
8.
計測 log2(n) 単純 Strassen n-1との比 (単純) n-1との比 (Strassen) 4
22,724 577,688 - - 5 133,972 4,008,528 5.90 6.94 6 1,129,255 28,688,124 8.43 7.16 7 9,924,139 203,509,826 8.79 7.09 8 133,242,248 1,576,870,691 13.43 7.75 9 1,327,584,877 11,072,402,847 9.96 7.02 10 11,892,402,060 86,182,808,153 8.96 7.78 11 106,612,149,065 619,821,838,102 8.96 7.19 12 3,073,269,379,009 5,012,791,249,199 28.83 8.09 実行環境: GCE n1-standard1 CPU: 2.20GHz(x1コア), キャッシュ55MB たぶんXeon E5-2699 v4 キ ャ ッ シ ュ に 乗 ら な く な っ た た め ? 4096*4096*4byte = 64MiB 8/9
9.
総括 素敵なアルゴリズムは、nが小さい時には遅い。 そして大抵の場合、nは小さい。 素敵なアルゴリズムの計算量の式には、大きな 定数項が掛かっている。 nが頻繁に大きくなることが分かっていない限り、 素敵にしてはならない。 ― Rob Pike
“Notes on Programming in C” 9/9
Download now