SlideShare a Scribd company logo
1 of 11
Download to read offline
行列プロが教える
競技プログラミングでの線型方程式系




    前原 貴憲 (@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

More Related Content

What's hot

プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
 
指数時間アルゴリズムの最先端
指数時間アルゴリズムの最先端指数時間アルゴリズムの最先端
指数時間アルゴリズムの最先端
Yoichi Iwata
 
幾何コンテスト2013
幾何コンテスト2013幾何コンテスト2013
幾何コンテスト2013
Naoto Mizuno
 

What's hot (20)

プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
 
指数時間アルゴリズムの最先端
指数時間アルゴリズムの最先端指数時間アルゴリズムの最先端
指数時間アルゴリズムの最先端
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説
 
AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説
 
AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説
 
AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説
 
様々な全域木問題
様々な全域木問題様々な全域木問題
様々な全域木問題
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046
 
Amortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 StackAmortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 Stack
 
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
 
幾何コンテスト2013
幾何コンテスト2013幾何コンテスト2013
幾何コンテスト2013
 
AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説
 
CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説
 
AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説
 
arc047
arc047arc047
arc047
 
一般グラフの最大マッチング
一般グラフの最大マッチング一般グラフの最大マッチング
一般グラフの最大マッチング
 
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
Abc009
Abc009Abc009
Abc009
 

Viewers also liked

simultaneous block diagonalization of matrices
simultaneous block diagonalization of matricessimultaneous block diagonalization of matrices
simultaneous block diagonalization of matrices
tmaehara
 
素数判定法
素数判定法素数判定法
素数判定法
DEGwer
 
文字列検索のいろいろ
文字列検索のいろいろ文字列検索のいろいろ
文字列検索のいろいろ
Kazuma Mikami
 
クリプタン帝国の暗号文を解読しよう(問1)
クリプタン帝国の暗号文を解読しよう(問1)クリプタン帝国の暗号文を解読しよう(問1)
クリプタン帝国の暗号文を解読しよう(問1)
tmaehara
 
2011年10月7日
2011年10月7日2011年10月7日
2011年10月7日
nukaemon
 
クリプタン帝国の暗号文を解読しよう(問1)
クリプタン帝国の暗号文を解読しよう(問1)クリプタン帝国の暗号文を解読しよう(問1)
クリプタン帝国の暗号文を解読しよう(問1)
tmaehara
 

Viewers also liked (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解説
 

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

パターン認識 第12章 正則化とパス追跡アルゴリズム
パターン認識 第12章 正則化とパス追跡アルゴリズムパターン認識 第12章 正則化とパス追跡アルゴリズム
パターン認識 第12章 正則化とパス追跡アルゴリズム
Miyoshi Yuya
 
GPUによる多倍長整数乗算の高速化手法の提案とその評価
GPUによる多倍長整数乗算の高速化手法の提案とその評価GPUによる多倍長整数乗算の高速化手法の提案とその評価
GPUによる多倍長整数乗算の高速化手法の提案とその評価
Koji Kitano
 
UTPC2012 - K
UTPC2012 - KUTPC2012 - K
UTPC2012 - K
omeometo
 
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 Problem
Naoya Ito
 

Similar to 競技プログラミングでの線型方程式系 (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理論談話会
 

Recently uploaded

Recently uploaded (12)

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介: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...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/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
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介: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
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

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

  • 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