首页 > 其他分享 >数学

数学

时间:2025-01-16 12:10:12浏览次数:1  
标签:... frac 复杂度 2x 数学 bmatrix omega

壹:FFT, NTT

1. 域

(1) 定义

一个有两个运算的群,两个运算都有交换律,且一个运算对另一个运算有分配律。

(2) 域上多项式

在域 \(F\) 中形如 \(a_0 + a_1x + a_2x^2 + ... + a_{n - 1}x^{n -1}\) 的多项式,其中 \(a_0, a_1, ..., a_{n - 1} \in F\)。

2. FFT

(1) 引入

对于 \(n\) 次多项式 \(f\) 和 \(m\) 次多项式 \(g\),如果我们要计算 \(f(x)g(x)\),常规高精度是 \(\mathcal{O}(nm)\) 的。

首先,假设我们已经知道了对于一个 \(k\) 次多项式 \(h\) 在 \(k\) 个不同的 \(x\) 的 \(h(x)\),那么我们就可以确定这个 \(h\)(高斯消元解矩阵)。

不过这样时间复杂度依然不变。我们的 \(x\) 可以取一些特殊值,这里我们先把 \(x\) 取为 \(\omega^0, \omega^1, ..., \omega^{k - 1}\),其中 \(\omega\) 是 \(F\) 下的 \(k\) 次本原单位根。设矩阵 \(P\) 是 \(x\) 组成的 \(k \times k\) 的矩阵,\(Q\) 是长度为 \(k\) 的 \(h(x)\) 的列向量,则根据定义,\(P\cdot h = Q\) 如下:

\[\def\w{\omega} \begin{bmatrix} 1 & 1 & 1 &... & 1 \\ 1 & \w & \w ^ 2 & ... & \w ^ {k - 1} \\ 1 & \w ^ 2 & \w ^ 4 & ... & \w ^ {2(k - 1)} \\ 1 & \w ^ 3 & \w ^ 6 & ... & \w ^ {3(k - 1)} \\ ... \\ 1 & \w ^ {(k-1)} & \w ^ {2(k - 1)} & ... & \w ^ {(k - 1)(k - 1)} \\ \end{bmatrix} \begin{bmatrix} h_0 \\ h_1 \\ h_2 \\ h_3 \\ ... \\ h_{k - 1} \\ \end{bmatrix} = \begin{bmatrix} Q_0 \\ Q_1 \\ Q_2 \\ Q_3 \\ ... \\ Q_{k - 1} \\ \end{bmatrix} \]

显然,此时 \(h = Q \cdot P ^ {-1}\),这时,\(P ^ {-1}\) 刚好等于:

\[\def\w{\omega} \begin{bmatrix} 1 & 1 & 1 &... & 1 \\ 1 & \w^{-1} & \w ^ {-2} & ... & \w ^ {-(k - 1)} \\ 1 & \w ^ {-2} & \w ^ {-4} & ... & \w ^ {-2(k - 1)} \\ 1 & \w ^ {-3} & \w ^ {-6} & ... & \w ^ {-3(k - 1)} \\ ... \\ 1 & \w ^ {-(k-1)} & \w ^ {-2(k - 1)} & ... & \w ^ {-(k - 1)(k - 1)} \\ \end{bmatrix} \]

这就是我们要选 \( \def\w{\omega} \w\) 为 \(x\) 的第一个原因。

(2) 整理

刚才已经强调过了,直接这么做时间复杂度依然不变。

准备了这么久,回到正题上,我们该怎么利用刚才的结论求出 \(f(x)g(x)\)?

顺序是这样的:首先,我们分别求出 \(Q_f\) 和 \(Q_g\),然后乘起来就是 \(Q_{fg}\)(注意要带 \(n + m\) 个值才能解出来 \(fg\))。接下来,我们再把求出来的 \(Q_{fg}\) 乘上 \(P^{-1}\),就得到了 \(fg\)。

但现在的时间复杂度瓶颈就是如何通过 \(P, h\) 求出 \(Q\)(\(h\) 指系数矩阵)。直接矩乘时间复杂度肯定会炸,因此要找到更优的方法来求,FFT 就是优化了这一部分,使它能在 \(\mathcal{O}(n \log n)\) 内求出。

(3) 探究

我们现在唯一有的性质就是 \(P\) 它是和 \( \def\w{\omega} \w\) 相关的矩阵。

显然 \(Q_i = \sum\limits_{j = 0} ^ {k - 1} h_j\cdot x_i^j = h_0 + h_1x_i + h_2x_i^2 + ... + h_{k - 1}x_i^{k - 1}\)。

考虑奇偶分类,则有:

\[\begin{aligned} Q_i &= h_0 + h_2x_i^2 + h_4x_i^4 + ... + h_1x_i + h_3x_i^3 + h_5x^5 +...\\ &= h_0 + h_2x_i^2 + h_4x_i^4 + ... + x_i(h_1 + h_3x_i^2 + h_5x_i^4 + ...) \end{aligned} \]

观察到左右两边很相似,只有系数不一样。设 \(F_1 = h_0 + h_2x_i + h_4x_i^2 + ..., F_2 = h_1 + h_3x_i + h_5x_i^2 + ...\),则 \(Q_i = F_1(x_i ^ 2) + x_iF_2(x_i ^ 2)\)。

\(F_1\), \(F_2\) 和 \(Q_i\) 一模一样。因此分成了两个子问题,现在我们利用分治可以在 \(\mathcal{O}(2n)\) 的时间复杂度求出一个 \(Q_i\) 了……?好像时间复杂度更差了。

先别急,我们要利用 \(x = \omega_k\) 这个性质来联系起不同的 \(Q_i\)。为了保证思维连贯性,这里直接说结论,推式子可以得到 \(Q_i = F_1(x_i ^ 2) + x_iF_2(x_i ^ 2)\),则 \(Q_{i + \frac{k}{2}} = F_1(x_i ^ 2) - x_iF_2(x_i ^ 2)\)。因此我们只要知道左半边的 \(Q_i\),就可以知道右半边的 \(Q_{i + \frac{n}{2}}\)。

也就是说,我们只需要求出 \(\frac{n}{2}\) 个取值的 \(F_1\) 和 \(F_2\),就可以求出整个 \(Q\)。同理,对于 \(\frac{n}{2}\) 个取值的 \(F_1\) 来说,我们只需要求出 \(\frac{n}{4}\) 个取值的 \(F_{1_1}\) 和 \(F_{1_2}\) 就可以了(\(F_2\) 同理)。

因此我们的分治结构确定了,先把 \(h\) 奇偶分类,然后分治求左右半边 \(\frac{n}{2}\) 个取值,然后再 \(O(n)\) 合并。

总时间复杂度是 \(T(n) = 2T(\frac{n}{2}) + O(n)\)。

(4) 回顾

总体来说 FFT 就是把 \(fg\) 从数值表示法到点值表示法再到数值表示法。

标签:...,frac,复杂度,2x,数学,bmatrix,omega
From: https://www.cnblogs.com/guanyf-blog/p/18670317

相关文章

  • 【快速入门|文末福利】运筹学|初识线性规划(一条逻辑线,只需初中数学基础)
    导学问题/回忆自测三个核心问题“线性”为何?何谓“标准”?如何“化归”(把一般的线性规划问题转化为标准的线性规划问题)提示字面意思,在三个要素、两个关系之间对三个要素的要求“大”、“大”、“等”反转(乘以-1)/补齐/“分身”逻辑线索(逻辑线索中,发现有不熟悉的名词没关系,......
  • 数学建模学习-整数规划(Integer Programming)教程(3)
    数学建模学习-整数规划(IntegerProgramming)教程(3)写在最前注意本文的相关代码及例子为同学们提供参考,借鉴相关结构,在这里举一些通俗易懂的例子,方便同学们根据实际情况修改代码,很多同学私信反映能否添加一些可视化,这里每篇教程都尽可能增加一些可视化方便同学理解,但具体......
  • 洛谷 P8469 [Aya Round 1 D] 文文的数学游戏 C语言
    题目:P8469[AyaRound1D]文文的数学游戏-洛谷|计算机科学教育新生态题目背景在解决了上一题之后,琪露诺觉得自己仿佛就是天才。于是,射命丸文又给了她一道简单的数学题。题目描述给定长度为 n 的整数序列 a,你需要构造一个长度为 n 的整数序列 b 满足对于所有......
  • D. Madoka and The Corruption Scheme -- (贪心,组合数学,构造)
    题目链接:Problem-D-Codeforces题目大意:一共n轮比赛,有\(2^n\)个参赛者,第\(i\)轮有\(2^{n-i}\)场比赛,Madoka能安排第一局的比赛,她想让最后的赢家编号更小,主办方最多有k次操作,能修改任意每一场比赛的获胜情况,可以让最终赢家编号更大,求Madoka在主办方任意修改之后可能获得的......
  • 学习数学的路线
    转载非数学专业想自学数学,大佬们有什么建议吗?-雪王爱数学的回答-知乎分析学是研究函数积分和算子和微分方程的,代数学是研究运算结构的,几何学和拓扑学是研究空间的。首先一开始的要先学数学分析,高等代数,抽象代数。接着数学分析学完后就学复分析,点集拓扑,再接着学微分流形(前置......
  • 中国科学院大学2025年数学分析考研真题
     中国科学院大学2025年数学分析考研真题1.(25分)计算下列极限.(1)$\displaystyle\lim_{x\to1}x^{\frac1{1-x}}$.(2)$\displaystyle\lim_{n\to\infty}\frac{1}{n^{4}}\left(1+2^{3}+\cdots+n^{3}\right)$.2.用闭区间套定理证明$[0,1]$不可数. 3.设$f(x)$在$[0,1]$上连......
  • JSP离散数学考试系统46229程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、项目背景离散数学作为计算机科学及相关领域的重要基础课程,其教学效果的评估方式需要与时俱进。传统的纸质考试方式不仅耗费大量资源,而且难以全......
  • 20河北师大《数学分析》第1题
    求极限\[\lim_{n\to\infty}\left(\frac{1\cdot3\cdot5\cdots(2n-1)}{2\cdot4\cdot6\cdots(2n)}\right)^\frac1n\]解:令\[f(n)=\left(\frac{1\cdot3\cdot5\cdots(2n-1)}{2\cdot4\cdot6\cdots(2n)}\right)^\frac1n\]为了利用夹逼准则,我们先证$$\left(\frac1{2......
  • 【数学】概率论与数理统计(六)
    文章目录@[toc]条件分布离散型随机变量的条件分布示例问题解答连续型随机变量的条件分布示例1问题解答示例2问题解答随机变量的独立性随机变量相互独立示例问题解答定理1定理2条件分布离散型随机变量的条件分布设......
  • 初学者常犯:编程等号与数学等号划等号
    初学者常犯:编程等号与数学等号划等号一、编程=vs数学=1.1意义不同1.1.1等号的意义1.1.2案例展示1.1.3变量和等号1.2用法不同1.2.1类据类型转换1.2.2连等vs链式赋值二、C语言真正的等号三、避免出错的好习惯刚学编程的娃,非常容易在一个地方栽跟头,就是等号......