闲话 24.10.13

news/2024/10/13 16:00:48

闲话

还有不到两周就 csp-j/s 了(
祝大家别挂分(

没有闲话题材了啊!

今日推歌:花朵 by 合目 feat. 诗岸

那些你不要的:拉格朗日……插值?

给定 \(n, k\)。给定一个 \(n\) 阶多项式 \(f(x)\),以及 \(k\) 个无重根首一多项式 \(f_1(x), \dots, f_k(x)\),第 \(i\) 个多项式的次数为 \(m_i > 0\)\(f(x)\) 给定系数,\(f_i(x)\) 给定 \(m_i\) 个根。对每个 \(i\) 求算 \(f(x) \bmod f_i(x)\)

\(1\le \sum_i m_i, n\le 10^5\)

一个高等代数的做法是这样的:令 \(r_i(x) = f(x) \bmod f_i(x)\),那么其为满足 \(f(x) = q(x) f_i(x) + r(x)\)\(r(x)\) 中最短者。而带入 \(f_i(x) = \prod_{j = 1}^{m_i} (x - x_j)\)\(m_i\) 个根知道 \(r(x_j) = f(x_j)\)。则显然通过拉格朗日插值能确定这个最短多项式 \(r_i(x)\)
那么对一般的情况,只需要对 \(f(x)\) 和这 \(\sum m_i\) 个根运行多点求值,再分别运行快速插值即可。总时间复杂度 \(O(n\log^2 n)\),常数*可能*不是很大。

另一个由古典多点求值算法导出的做法是这样的:注意到对 \(f(x), m_1(x), m_2(x)\)\(f(x)\bmod m_1(x) = \left(f(x) \bmod m_1(x)m_2(x)\right) \bmod m_1(x)\),那么先求出 \(f_i(x)\) 的多项式形式,把它们排成一排,按照度数之和每次从近似中点先合并,再分治取模即可。总时间复杂度也是 \(O(n\log^2 n)\),常数听说不小。

所以说上面那个做法其实没啥实际作用,而且限制挺大的,比如 \(f_i(x)\) 都要无重根。当然如果 \(f(x)\) 和需要的信息够特殊,比如能 \(O(n)\)\(f(x)\) 做多点求值,并且不需要求最短多项式的系数而是远点求值,那总复杂度就可以优化到 \(O(n)\) 了。

根据 jjdw 的阐述,我们可以不直接用拉格朗日插值,而且甚至可以不需要无重根的性质。那么我们接下来不使用无重根性质,即 \(f_i(x) = \prod_{j = 1}^{m_i} (x - x_j)^{c_j}\)。如果我们能求算每个 \(f(x) \bmod (x - x_j)^{c_j}\),那么根据多项式 CRT,存在一种方法计算 \(f(x) \bmod \prod_{j = 1}^{m_i} (x - x_j)^{c_j}\)。那么这种方法是什么呢?

回忆一下多项式 CRT 的构造:取 \(f_i(x) = \prod_{j = 1}^{m_i} (x - x_j)^{c_j}, p_j(x) = (x - x_j)^{c_j}\),以及 \(f_i(x) / p_j(x)\)\(\bmod p_j(x)\) 意义下的逆元 \(v_j(x) = \left[f_i(x) / p_j(x) \bmod p_j(x)\right]^{-1}\bmod p_j(x)\)。那么 \(r_i(x) = \sum_{j = 1}^{m_i} f(x_j) f_i(x) / (x - x_j) v_j(x)\)。那么要对每个 \(1\le j \le m_i\) 求算 \(v_j(x)\)。首先考虑求算 \(P_j(x) = f_i(x) / p_j(x) \bmod p_j(x)\),这个直接通过分治树即可得到。接下来考虑求逆。考虑代换 \(t = x - x_j\),容易发现这变换是保度数的,因此我们只需要先求 \(P_j(t + x_j)\) 在模 \(t^{c_j}\) 意义下的逆,然后代换回去即可。
上面的内容摘自 分式分解,给小朋友们做现场的表演。

这个还是 \(O(n\log^2 n)\) 的,分治树那一部分的常数感觉和上面第二个做法没啥区别啊。

然而最重要的一点就是:给定根这个性质太少见了。所以到目前为止这个东西还停留在理性愉悦阶段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/71100.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

20242822《Linux内核原理与分析》第三周作业

张晓攀+原创作品转载请注明出处+《Linux内核分析》MOOC课程https://mooc.study.163.com/course/1000029000 一、实验楼上实验二——mykernel实验指导(操作系统是如何工作的) 1.使用实验楼的虚拟机打开shell输入所给命令这段代码的意思是应用一个补丁文件到Linux内核源代码,配…

正义使者其五

最正义的一集\(\Huge{能参加高校校园行,好!}\)

2024-2025-1 20241407《计算机基础与程序设计》第三周学习总结

这个作业属于哪个课程 2024-2025-1计算机基础与程序设计这个作业要求在哪里 2024-2025-1计算机基础与程序设计第三周作业这个作业的目标 学习数字分类与计数法、位置计数法、进制转换、模拟数据与数字数据、压缩与解压、数字化、信息安全作业正文 https://www.cnblogs.com/wang…

TowardsDataScience-博客中文翻译-2019-三十五-

TowardsDataScience 博客中文翻译 2019(三十五)原文:TowardsDataScience Blog 协议:CC BY-NC-SA 4.0如何保护云中的健康数据原文:https://towardsdatascience.com/how-to-secure-health-data-in-the-cloud-541fbdad811a?source=collection_archive---------16-----------…

TowardsDataScience-博客中文翻译-2019-三十三-

TowardsDataScience 博客中文翻译 2019(三十三)原文:TowardsDataScience Blog 协议:CC BY-NC-SA 4.0如何用 Python 编写公平抛硬币的代码原文:https://towardsdatascience.com/how-to-code-a-fair-coin-flip-in-python-d54312f33da9?source=collection_archive---------7…

TowardsDataScience-博客中文翻译-2019-六十-

TowardsDataScience 博客中文翻译 2019(六十)原文:TowardsDataScience Blog 协议:CC BY-NC-SA 4.0堆叠分类器以提高预测性能原文:https://towardsdatascience.com/stacking-classifiers-for-higher-predictive-performance-566f963e4840?source=collection_archive------…

TowardsDataScience-博客中文翻译-2016-2018-三十一-

TowardsDataScience 博客中文翻译 2016~2018(三十一)原文:TowardsDataScience Blog 协议:CC BY-NC-SA 4.0主成分分析:你的教程和代码原文:https://towardsdatascience.com/principal-component-analysis-your-tutorial-and-code-9719d3d3f376?source=collection_archive-…

TowardsDataScience-博客中文翻译-2016-2018-三十八-

TowardsDataScience 博客中文翻译 2016~2018(三十八)原文:TowardsDataScience Blog 协议:CC BY-NC-SA 4.0Python 属性的原因和方式原文:https://towardsdatascience.com/the-why-and-how-of-python-properties-b791817cf4b9?source=collection_archive---------3--------…