SlideShare una empresa de Scribd logo
1 de 11
Descargar para leer sin conexión
行列プロが教える
競技プログラミングでの線型方程式系




    前原 貴憲 (@tmaehara)
線型方程式系

入力:n × n 行列 A,ベクトル b

出力:以下を満たすベクトル x

               Ax = b

標準的な解法:ピボット選択つき Gauss 消去法(LUP 分解)

競技プログラミングでは

→   Givens 消去法(QR 分解)がオススメ
                          かもしれない

                             1/ 10
説明




     2/ 10
普通の Gauss 消去法(LU 分解)
for i = 1, . . . , n: /* 前進消去 */
   for i′ = i + 1, . . . , n:
      α := A[i′ , i]/A[i, i]
      b[i′ ] ← b[i′ ] − αb[j]
      for j = i, . . . , n:
         A[i′ , j] ← A[i′ , j] − αA[i, j]
for i = n, . . . , 1: /* 交代代入 */
   for j = i + 1, . . . , n:
      bij] ← b[j] − A[i, j]b[j]
   b[i] ← b[i]/A[i, i]


                                            3/ 10
ピボット選択つき Gauss 消去法(LUP 分解)
計算中に A[i, i] が小さくなって精度悪化(or ゼロ割)
⇒ 普通は行ピボット選択で対応
 ※行ピボット選択つき Gauss は理論上不安定だが,
  破綻例を作るのは相当大変(良い例を作ると論文)


ここでは実装量的に Givens 消去法での対応をオススメ
 - Givens 消去法 = 2 × 2 回転で掃き出す Gauss 消去法
 - 計算時間:ピボット選択つき Gauss より少し遅い
 - 数値安定性:非常に高(回転は誤差を拡大しない)
ピボット選択が不要なので,実装が非常にシンプルになる
                   (see: 次ページ)
                                     4/ 10
Givens 消去法(QR 分解)
for i = 1, . . . , n: /* 前進消去 */
   for i′ = i + 1, . . . , n:
      MAKEROT(A[i, i], A[i′ , i], c, s);
      ROT(b[i], b[i′ ], c, s);
      for j = i + 1, . . . , n:
         ROT(A[i, j], A[i′ , j], c, s);
for i = n, . . . , 1: /* 交代代入 */
   for j = i + 1, . . . , n:
      b[i] ← b[i] − A[i, j]b[j]
   b[i] ← b[i]/A[i, i]

    ピボット選択なしの Gauss 消去法と同じ手続き
                                           5/ 10
MAKEROT / ROT
#define MAKEROT(x, y, c, s) 
       √
 { r = x2 + y 2 ; c = x/r; s = y/r; }
= 以下を満たす c, [ の計算 [ ]
             s    ]     [ ]
               c s x     r
                      =
             −s c y      0

#define ROT(x, y, c, s) 
 { u = cx + sy; v = −sx + cy; x = u; y = v; }
= 以下の計算の適用 ]
         [     [     ][ ]
          x       c s x
             ←
           y     −s c y

                                            6/ 10
QR 分解 補足
             A = QR   (Q : 直交, : 上三角)
                              R

☆ QR 法のよくある計算方法

• Gram-Schmidt の直交化
 数値不安定なので,基本的に使ってはいけない

• Householder 変換
 数値安定かつ早いので線型計算の教科書はこれを説明

• Givens 回転(今回紹介)
  数値安定だが Householder より遅いので説明されない
 しかし,実装が超シンプルになるので競プロ向き!

                                        7/ 10
参考




     8/ 10
参考:Gauss が破綻する例(Wilkinson 行列)
                          
              1   0  0    1
            −1   1  0    1
          A=
            −1
                            
                  −1 1    1
             −1   −1 −1   1


- Gauss 消去法をすると一番右の列が指数的に増加
- LU 分解の代わりに UL 分解するとうまくいく
   (LU・UL 両方が破綻する例の存在は open problem)

- 行・列両方をピボットする Gauss は,常にうまくいく


                                   9/ 10
参考:なにをやってもダメな例(Hilbert 行列)
                            
            1/1   1/2 1/3 1/4
          1/2    1/3 1/4 1/5
        A=
          1/3
                              
                  1/4 1/5 1/6
            1/4   1/5 1/6 1/7

- 線型方程式の条件数:cond(A) := ∥A−1 ∥∥A∥
      (条件数 ≃ 誤差の拡大率)

- 条件数が大きいと,何をやってもだいたい無理
⇒ 競プロでは,この手の入力は考えなくて良い



                                   10/ 10

Más contenido relacionado

La actualidad más candente

AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Inc.
 
幾何コンテスト2013
幾何コンテスト2013幾何コンテスト2013
幾何コンテスト2013Naoto Mizuno
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造Takuya Akiba
 
様々な全域木問題
様々な全域木問題様々な全域木問題
様々な全域木問題tmaehara
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~Takuya Akiba
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムTakuya Akiba
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解くshindannin
 
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Inc.
 
AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説AtCoder Inc.
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Inc.
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化yosupo
 
部内勉強会 数え上げの基礎
部内勉強会 数え上げの基礎部内勉強会 数え上げの基礎
部内勉強会 数え上げの基礎Kazuma Mikami
 
AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説AtCoder Inc.
 
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説AtCoder Inc.
 
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Inc.
 
CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説AtCoder Inc.
 
AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Inc.
 
CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説AtCoder Inc.
 

La actualidad más candente (20)

AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説
 
幾何コンテスト2013
幾何コンテスト2013幾何コンテスト2013
幾何コンテスト2013
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 
最大流 (max flow)
最大流 (max flow)最大流 (max flow)
最大流 (max flow)
 
様々な全域木問題
様々な全域木問題様々な全域木問題
様々な全域木問題
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
 
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説
 
AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
部内勉強会 数え上げの基礎
部内勉強会 数え上げの基礎部内勉強会 数え上げの基礎
部内勉強会 数え上げの基礎
 
abc032
abc032abc032
abc032
 
AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説
 
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
 
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説
 
CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説
 
AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説
 
CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説
 

Destacado

simultaneous block diagonalization of matrices
simultaneous block diagonalization of matricessimultaneous block diagonalization of matrices
simultaneous block diagonalization of matricestmaehara
 
素数判定法
素数判定法素数判定法
素数判定法DEGwer
 
競技プログラミングにおけるMajorization
競技プログラミングにおけるMajorization競技プログラミングにおけるMajorization
競技プログラミングにおけるMajorizationskyaozora
 
文字列検索のいろいろ
文字列検索のいろいろ文字列検索のいろいろ
文字列検索のいろいろKazuma Mikami
 
やさしい整数論
やさしい整数論やさしい整数論
やさしい整数論Kazuma Mikami
 
Pythonではじめる競技プログラミング
Pythonではじめる競技プログラミングPythonではじめる競技プログラミング
Pythonではじめる競技プログラミングcocodrips
 
クリプタン帝国の暗号文を解読しよう(問1)
クリプタン帝国の暗号文を解読しよう(問1)クリプタン帝国の暗号文を解読しよう(問1)
クリプタン帝国の暗号文を解読しよう(問1)tmaehara
 
2011年10月7日
2011年10月7日2011年10月7日
2011年10月7日nukaemon
 
Indeedなう A日程 解説
Indeedなう A日程 解説Indeedなう A日程 解説
Indeedなう A日程 解説AtCoder Inc.
 
Palindromic tree
Palindromic treePalindromic tree
Palindromic tree__math
 
クリプタン帝国の暗号文を解読しよう(問1)
クリプタン帝国の暗号文を解読しよう(問1)クリプタン帝国の暗号文を解読しよう(問1)
クリプタン帝国の暗号文を解読しよう(問1)tmaehara
 
yukicoder : No.195 フィボナッチ数列の理解(2)
yukicoder : No.195 フィボナッチ数列の理解(2)yukicoder : No.195 フィボナッチ数列の理解(2)
yukicoder : No.195 フィボナッチ数列の理解(2)kmjp
 
動的計画法入門(An introduction to Dynamic Programming)
動的計画法入門(An introduction to Dynamic Programming)動的計画法入門(An introduction to Dynamic Programming)
動的計画法入門(An introduction to Dynamic Programming)kakira9618
 
20160620 競技プログラミングのすゝめ
20160620 競技プログラミングのすゝめ20160620 競技プログラミングのすゝめ
20160620 競技プログラミングのすゝめYoshiki TAKADA
 
yukicoder : No.269 見栄っ張りの募金活動
yukicoder : No.269 見栄っ張りの募金活動yukicoder : No.269 見栄っ張りの募金活動
yukicoder : No.269 見栄っ張りの募金活動kmjp
 
ICPC国内予選F解説
ICPC国内予選F解説ICPC国内予選F解説
ICPC国内予選F解説tmaehara
 
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Inc.
 

Destacado (20)

simultaneous block diagonalization of matrices
simultaneous block diagonalization of matricessimultaneous block diagonalization of matrices
simultaneous block diagonalization of matrices
 
素数判定法
素数判定法素数判定法
素数判定法
 
ARC#003D
ARC#003DARC#003D
ARC#003D
 
競技プログラミングにおけるMajorization
競技プログラミングにおけるMajorization競技プログラミングにおけるMajorization
競技プログラミングにおけるMajorization
 
文字列検索のいろいろ
文字列検索のいろいろ文字列検索のいろいろ
文字列検索のいろいろ
 
やさしい整数論
やさしい整数論やさしい整数論
やさしい整数論
 
Pythonではじめる競技プログラミング
Pythonではじめる競技プログラミングPythonではじめる競技プログラミング
Pythonではじめる競技プログラミング
 
クリプタン帝国の暗号文を解読しよう(問1)
クリプタン帝国の暗号文を解読しよう(問1)クリプタン帝国の暗号文を解読しよう(問1)
クリプタン帝国の暗号文を解読しよう(問1)
 
2011年10月7日
2011年10月7日2011年10月7日
2011年10月7日
 
Indeedなう A日程 解説
Indeedなう A日程 解説Indeedなう A日程 解説
Indeedなう A日程 解説
 
Palindromic tree
Palindromic treePalindromic tree
Palindromic tree
 
アルゴリズムとデータ構造(初歩)
アルゴリズムとデータ構造(初歩)アルゴリズムとデータ構造(初歩)
アルゴリズムとデータ構造(初歩)
 
クリプタン帝国の暗号文を解読しよう(問1)
クリプタン帝国の暗号文を解読しよう(問1)クリプタン帝国の暗号文を解読しよう(問1)
クリプタン帝国の暗号文を解読しよう(問1)
 
Slide
SlideSlide
Slide
 
yukicoder : No.195 フィボナッチ数列の理解(2)
yukicoder : No.195 フィボナッチ数列の理解(2)yukicoder : No.195 フィボナッチ数列の理解(2)
yukicoder : No.195 フィボナッチ数列の理解(2)
 
動的計画法入門(An introduction to Dynamic Programming)
動的計画法入門(An introduction to Dynamic Programming)動的計画法入門(An introduction to Dynamic Programming)
動的計画法入門(An introduction to Dynamic Programming)
 
20160620 競技プログラミングのすゝめ
20160620 競技プログラミングのすゝめ20160620 競技プログラミングのすゝめ
20160620 競技プログラミングのすゝめ
 
yukicoder : No.269 見栄っ張りの募金活動
yukicoder : No.269 見栄っ張りの募金活動yukicoder : No.269 見栄っ張りの募金活動
yukicoder : No.269 見栄っ張りの募金活動
 
ICPC国内予選F解説
ICPC国内予選F解説ICPC国内予選F解説
ICPC国内予選F解説
 
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説
 

Similar a 競技プログラミングでの線型方程式系

パターン認識 第12章 正則化とパス追跡アルゴリズム
パターン認識 第12章 正則化とパス追跡アルゴリズムパターン認識 第12章 正則化とパス追跡アルゴリズム
パターン認識 第12章 正則化とパス追跡アルゴリズムMiyoshi Yuya
 
第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)RCCSRENKEI
 
画像からの倍率色収差の自動推定補正
画像からの倍率色収差の自動推定補正画像からの倍率色収差の自動推定補正
画像からの倍率色収差の自動推定補正doboncho
 
GPUによる多倍長整数乗算の高速化手法の提案とその評価
GPUによる多倍長整数乗算の高速化手法の提案とその評価GPUによる多倍長整数乗算の高速化手法の提案とその評価
GPUによる多倍長整数乗算の高速化手法の提案とその評価Koji Kitano
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
UTPC2012 - K
UTPC2012 - KUTPC2012 - K
UTPC2012 - Komeometo
 
A Brief Survey of Schrödinger Bridge (Part I)
A Brief Survey of Schrödinger Bridge (Part I)A Brief Survey of Schrödinger Bridge (Part I)
A Brief Survey of Schrödinger Bridge (Part I)Morpho, Inc.
 
Sized Linear Algebra Package のチュートリアル
Sized Linear Algebra Package のチュートリアルSized Linear Algebra Package のチュートリアル
Sized Linear Algebra Package のチュートリアルAkinori Abe
 
多チャンネルバイラテラルフィルタの高速化
多チャンネルバイラテラルフィルタの高速化多チャンネルバイラテラルフィルタの高速化
多チャンネルバイラテラルフィルタの高速化Norishige Fukushima
 
クラシックな機械学習の入門 6. 最適化と学習アルゴリズム
クラシックな機械学習の入門  6. 最適化と学習アルゴリズムクラシックな機械学習の入門  6. 最適化と学習アルゴリズム
クラシックな機械学習の入門 6. 最適化と学習アルゴリズムHiroshi Nakagawa
 
PRML復々習レーン#9 6.3-6.3.1
PRML復々習レーン#9 6.3-6.3.1PRML復々習レーン#9 6.3-6.3.1
PRML復々習レーン#9 6.3-6.3.1sleepy_yoshi
 
PRML第6章「カーネル法」
PRML第6章「カーネル法」PRML第6章「カーネル法」
PRML第6章「カーネル法」Keisuke Sugawara
 
El text.tokuron a(2019).yamamoto190620
El text.tokuron a(2019).yamamoto190620El text.tokuron a(2019).yamamoto190620
El text.tokuron a(2019).yamamoto190620RCCSRENKEI
 
AtCoder Regular Contest 030 解説
AtCoder Regular Contest 030 解説AtCoder Regular Contest 030 解説
AtCoder Regular Contest 030 解説AtCoder Inc.
 
Deep learning basics described
Deep learning basics describedDeep learning basics described
Deep learning basics describedNaoki Watanabe
 
2011年11月11日
2011年11月11日2011年11月11日
2011年11月11日nukaemon
 
Introduction to Algorithms#24 Shortest-Paths Problem
Introduction to Algorithms#24 Shortest-Paths ProblemIntroduction to Algorithms#24 Shortest-Paths Problem
Introduction to Algorithms#24 Shortest-Paths ProblemNaoya Ito
 
統計的学習の基礎 5章前半(~5.6)
統計的学習の基礎 5章前半(~5.6)統計的学習の基礎 5章前半(~5.6)
統計的学習の基礎 5章前半(~5.6)Kota Mori
 

Similar a 競技プログラミングでの線型方程式系 (20)

パターン認識 第12章 正則化とパス追跡アルゴリズム
パターン認識 第12章 正則化とパス追跡アルゴリズムパターン認識 第12章 正則化とパス追跡アルゴリズム
パターン認識 第12章 正則化とパス追跡アルゴリズム
 
第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)
 
画像からの倍率色収差の自動推定補正
画像からの倍率色収差の自動推定補正画像からの倍率色収差の自動推定補正
画像からの倍率色収差の自動推定補正
 
optimal Ate pairing
optimal Ate pairingoptimal Ate pairing
optimal Ate pairing
 
GPUによる多倍長整数乗算の高速化手法の提案とその評価
GPUによる多倍長整数乗算の高速化手法の提案とその評価GPUによる多倍長整数乗算の高速化手法の提案とその評価
GPUによる多倍長整数乗算の高速化手法の提案とその評価
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
UTPC2012 - K
UTPC2012 - KUTPC2012 - K
UTPC2012 - K
 
A Brief Survey of Schrödinger Bridge (Part I)
A Brief Survey of Schrödinger Bridge (Part I)A Brief Survey of Schrödinger Bridge (Part I)
A Brief Survey of Schrödinger Bridge (Part I)
 
Sized Linear Algebra Package のチュートリアル
Sized Linear Algebra Package のチュートリアルSized Linear Algebra Package のチュートリアル
Sized Linear Algebra Package のチュートリアル
 
多チャンネルバイラテラルフィルタの高速化
多チャンネルバイラテラルフィルタの高速化多チャンネルバイラテラルフィルタの高速化
多チャンネルバイラテラルフィルタの高速化
 
クラシックな機械学習の入門 6. 最適化と学習アルゴリズム
クラシックな機械学習の入門  6. 最適化と学習アルゴリズムクラシックな機械学習の入門  6. 最適化と学習アルゴリズム
クラシックな機械学習の入門 6. 最適化と学習アルゴリズム
 
PRML復々習レーン#9 6.3-6.3.1
PRML復々習レーン#9 6.3-6.3.1PRML復々習レーン#9 6.3-6.3.1
PRML復々習レーン#9 6.3-6.3.1
 
PRML第6章「カーネル法」
PRML第6章「カーネル法」PRML第6章「カーネル法」
PRML第6章「カーネル法」
 
El text.tokuron a(2019).yamamoto190620
El text.tokuron a(2019).yamamoto190620El text.tokuron a(2019).yamamoto190620
El text.tokuron a(2019).yamamoto190620
 
AtCoder Regular Contest 030 解説
AtCoder Regular Contest 030 解説AtCoder Regular Contest 030 解説
AtCoder Regular Contest 030 解説
 
Deep learning basics described
Deep learning basics describedDeep learning basics described
Deep learning basics described
 
2011年11月11日
2011年11月11日2011年11月11日
2011年11月11日
 
Introduction to Algorithms#24 Shortest-Paths Problem
Introduction to Algorithms#24 Shortest-Paths ProblemIntroduction to Algorithms#24 Shortest-Paths Problem
Introduction to Algorithms#24 Shortest-Paths Problem
 
統計的学習の基礎 5章前半(~5.6)
統計的学習の基礎 5章前半(~5.6)統計的学習の基礎 5章前半(~5.6)
統計的学習の基礎 5章前半(~5.6)
 
140628理論談話会
140628理論談話会140628理論談話会
140628理論談話会
 

Último

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Último (9)

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

競技プログラミングでの線型方程式系

  • 2. 線型方程式系 入力:n × n 行列 A,ベクトル b 出力:以下を満たすベクトル x Ax = b 標準的な解法:ピボット選択つき Gauss 消去法(LUP 分解) 競技プログラミングでは → Givens 消去法(QR 分解)がオススメ かもしれない 1/ 10
  • 3. 説明 2/ 10
  • 4. 普通の Gauss 消去法(LU 分解) for i = 1, . . . , n: /* 前進消去 */ for i′ = i + 1, . . . , n: α := A[i′ , i]/A[i, i] b[i′ ] ← b[i′ ] − αb[j] for j = i, . . . , n: A[i′ , j] ← A[i′ , j] − αA[i, j] for i = n, . . . , 1: /* 交代代入 */ for j = i + 1, . . . , n: bij] ← b[j] − A[i, j]b[j] b[i] ← b[i]/A[i, i] 3/ 10
  • 5. ピボット選択つき Gauss 消去法(LUP 分解) 計算中に A[i, i] が小さくなって精度悪化(or ゼロ割) ⇒ 普通は行ピボット選択で対応 ※行ピボット選択つき Gauss は理論上不安定だが,  破綻例を作るのは相当大変(良い例を作ると論文) ここでは実装量的に Givens 消去法での対応をオススメ - Givens 消去法 = 2 × 2 回転で掃き出す Gauss 消去法 - 計算時間:ピボット選択つき Gauss より少し遅い - 数値安定性:非常に高(回転は誤差を拡大しない) ピボット選択が不要なので,実装が非常にシンプルになる (see: 次ページ) 4/ 10
  • 6. Givens 消去法(QR 分解) for i = 1, . . . , n: /* 前進消去 */ for i′ = i + 1, . . . , n: MAKEROT(A[i, i], A[i′ , i], c, s); ROT(b[i], b[i′ ], c, s); for j = i + 1, . . . , n: ROT(A[i, j], A[i′ , j], c, s); for i = n, . . . , 1: /* 交代代入 */ for j = i + 1, . . . , n: b[i] ← b[i] − A[i, j]b[j] b[i] ← b[i]/A[i, i] ピボット選択なしの Gauss 消去法と同じ手続き 5/ 10
  • 7. MAKEROT / ROT #define MAKEROT(x, y, c, s) √ { r = x2 + y 2 ; c = x/r; s = y/r; } = 以下を満たす c, [ の計算 [ ] s ] [ ] c s x r = −s c y 0 #define ROT(x, y, c, s) { u = cx + sy; v = −sx + cy; x = u; y = v; } = 以下の計算の適用 ] [ [ ][ ] x c s x ← y −s c y 6/ 10
  • 8. QR 分解 補足 A = QR (Q : 直交, : 上三角) R ☆ QR 法のよくある計算方法 • Gram-Schmidt の直交化 数値不安定なので,基本的に使ってはいけない • Householder 変換 数値安定かつ早いので線型計算の教科書はこれを説明 • Givens 回転(今回紹介) 数値安定だが Householder より遅いので説明されない しかし,実装が超シンプルになるので競プロ向き! 7/ 10
  • 9. 参考 8/ 10
  • 10. 参考:Gauss が破綻する例(Wilkinson 行列)   1 0 0 1 −1 1 0 1 A= −1  −1 1 1 −1 −1 −1 1 - Gauss 消去法をすると一番右の列が指数的に増加 - LU 分解の代わりに UL 分解するとうまくいく (LU・UL 両方が破綻する例の存在は open problem) - 行・列両方をピボットする Gauss は,常にうまくいく 9/ 10
  • 11. 参考:なにをやってもダメな例(Hilbert 行列)   1/1 1/2 1/3 1/4 1/2 1/3 1/4 1/5 A= 1/3  1/4 1/5 1/6 1/4 1/5 1/6 1/7 - 線型方程式の条件数:cond(A) := ∥A−1 ∥∥A∥ (条件数 ≃ 誤差の拡大率) - 条件数が大きいと,何をやってもだいたい無理 ⇒ 競プロでは,この手の入力は考えなくて良い 10/ 10