数值算法
---恢复内容开始---
$$ \def\ON#1{\left.\mathbf{O} \kern-.2em\left( {\kern -1pt} #1 \right)\right.} \def\OT#1{\left.\Theta \kern-.2em\left( {\kern -1pt} #1 \right)\right.} $$0. 续&一秒
曰-曰. 序
这篇坑在这里很久了,一直没有什么好的想法.然后最近又AFO了好长一段时间博客也没有更新,就想着要写些什么了.
以前写的那些东西实在是没有意思啦,毕竟什么trivial之类的话谁都会说嘛.
为什么要写数值算法呢?OI中基本可以肯定是考不到这些的了,只能说这是我兴趣相关吧.我这里要写的东西基本上都是轮子而已,前人大都已经造过了质量很高的了.但是人总是会不合时宜的有一些重复造轮子的想法,对于我来说包括但不限于2D渲染,图像处理,排版,3D渲染和计算机代数.计算机代数系统为了提高精确度、速度和解决问题的水平在数值算法和符号算法上做了很多的努力,现在也有很多相当成熟的计算机代数系统了,像MMA,Axiom,Maple,Sympy之类,虽然大多数都有侧重但是功能也是相当完备了,其中大多数都包含了任意精度的数值运算,这些东西肯定是离不开数值算法的啦.
0. 1s. 疫苗
如果是要投入应用的话,除非对自己写法的优越性(包括但不限于速度、内存管理、精度、容错能力、安全性,取决于应用场景)极端自信,否则还是建议使用类似于GNU MP、MPFR这样成熟的库.
1. 算法表
1.1. 任意精度整数
对于两个\(n\)位的整数
操作 | 时间复杂度 | 算法 | ||||||||||||||||||
加法 | $\OT{n}$ | naive | 减法 | $\OT{n}$ | naive | 乘法 | $\OT{n^2}$ | naive | 乘法 | $\OT{n^{\log_2{3}}}$ | Karatsuba's algorithm(2-Way Toom-Cook) | 乘法 | $\OT{n^{\log_3{5}}}$ | 3-Way Toom-Cook | 乘法 | $\OT{n^\epsilon}$ | High way Toom-Cook(Large constant factor) | 乘法 | $\OT{n^{\log_2{3}}}$ | Karatsuba's algorithm |
---恢复内容结束---
$$ \def\ON#1{\left.\mathbf{O} \kern-.2em\left( {\kern -1pt} #1 \right)\right.} \def\OT#1{\left.\Theta \kern-.2em\left( {\kern -1pt} #1 \right)\right.} $$0. 续&一秒
曰-曰. 序
这篇坑在这里很久了,一直没有什么好的想法.然后最近又AFO了好长一段时间博客也没有更新,就想着要写些什么了.
以前写的那些东西实在是没有意思啦,毕竟什么trivial之类的话谁都会说嘛.
为什么要写数值算法呢?OI中基本可以肯定是考不到这些的了,只能说这是我兴趣相关吧.我这里要写的东西基本上都是轮子而已,前人大都已经造过了质量很高的了.但是人总是会不合时宜的有一些重复造轮子的想法,对于我来说包括但不限于2D渲染,图像处理,排版,3D渲染和计算机代数.计算机代数系统为了提高精确度、速度和解决问题的水平在数值算法和符号算法上做了很多的努力,现在也有很多相当成熟的计算机代数系统了,像MMA,Axiom,Maple,Sympy之类,虽然大多数都有侧重但是功能也是相当完备了,其中大多数都包含了任意精度的数值运算,这些东西肯定是离不开数值算法的啦.
0. 1s. 疫苗
如果是要投入应用的话,除非对自己写法的优越性(包括但不限于速度、内存管理、精度、容错能力、安全性,取决于应用场景)极端自信,否则还是建议使用类似于GNU MP、MPFR这样成熟的库.
1. 算法表
1.1. 任意精度整数
对于两个\(n\)位的整数
操作 | 时间复杂度 | 算法 | ||||||||||||||||||
加法 | $\OT{n}$ | naive | 减法 | $\OT{n}$ | naive | 乘法 | $\OT{n^2}$ | naive | 乘法 | $\OT{n^{\log_2{3}}}$ | Karatsuba's algorithm(2-Way Toom-Cook) | 乘法 | $\OT{n^{\log_3{5}}}$ | 3-Way Toom-Cook | 乘法 | $\OT{n^\epsilon}$ | High way Toom-Cook(Large constant factor) | 乘法 | $\OT{n^{\log_2{3}}}$ | Karatsuba's algorithm |