首页 > 其他分享 >Homework from Zhejiang 和结式到底是什么关系

Homework from Zhejiang 和结式到底是什么关系

时间:2024-05-26 13:22:45浏览次数:12  
标签:dots le ddots 多项式 Zhejiang 结式 prod Homework

Homework from Zhejiang

本题希望解决的问题是:给定两个(首一)多项式 \(f,g\),设 \(n=\deg f,m=\deg g\)。求出 \(\prod_{i=1}^n \prod_{j=1}^m (x_i+y_j)\),这里 \(x_i,y_j\) 是 \(f,g\) 的所有根。

首先需要理解一下为什么这个式子能求出来:若 \(f,g\) 的系数都属于数域 \(K\) 内,为何答案也属于数域 \(K\) 内?这是因为,设 \(h(x)=\prod_{j=1}^m (x+y_j)\),则 \([x^k]h=(-1)^{m-k}[x^k]g\),所以 \(h\) 系数也属于 \(K\) 内。而 \(\prod_{i=1}^n h(x_i)\) 关于 \(x_i\) 对称,故可以表为对称多项式的乘积之和,所以答案也会属于 \(K\) 内。

有了这个理解再看原问题,其实就容易了,因为当 \(f(x_i)=0\) 时可以把 \(h\) 减去若干倍的 \(f\),答案不变。所以整个题的做法是:

  1. 若 \(n>m\),交换 \(f,g\)。
  2. 写出 \(h(x)\)(就是 \(g\) 的某些次系数取反)并把答案化成 \(\prod_{i=1}^n h(x_i)\)。
  3. 将 \(h\) 对 \(f\) 取模(若不首一了就把 \(h\) 和答案乘上一个系数)。
  4. 递归,直到 \(\min(n,m)=0\)。

时间复杂度 \(O(nm)\)。

什么是结式?

在上面一题的很多网上的题解里都提到了“结式”的概念,那什么是结式呢?其实跟本题一点关系都没有。两个多项式 \(f(x)=\sum_{i=0}^n a_ix^{n-i},g(x)=\sum_{i=0}^m b_ix^{m-i}\) 结式定义为(不妨设 \(a_0=b_0=1\))

\[R(f,g)=\begin{vmatrix} a_0 & a_1 & \dots & a_n & & & & \\ & a_0 & a_1 & \dots & a_n & & & \\ & & \ddots & \ddots & \ddots & \ddots & & \\ & & & a_0 & a_1 & a_2 & \dots & a_n\\ b_0 & b_1 & \dots & b_m & & & & \\ & b_0 & b_1 & \dots & b_m & & & \\ & & \ddots & \ddots & \ddots & \ddots & & \\ & & & b_0 & b_1 & b_2 & \dots & b_m\\ \end{vmatrix}\triangleq |B| \]

其中 \(f\) 的系数出现 \(m\) 行,\(g\) 的系数出现 \(n\) 行。

结式有什么组合意义呢?容易发现,\(R(f,g)=0\iff (f(x),g(x))\ne 1\)。如果多项式的系数 \(a_i,b_j\) 不属于欧几里得整环(例如多元多项式环),则这个行列式可以计算,但辗转相除就做不了了。

这个行列式的求值方法可以类比循环矩阵行列式,毕竟前 \(n\) 行和后 \(m\) 行的确是循环的。同时,系数没有从 \(x^n\) 循环到 \(x^1\),所以给它乘上的范德蒙德矩阵也不需要是 DFT。为了结果尽量简单,好想法是选择 \(f,g\) 的 \(n+m\) 个根列范德蒙德矩阵,这样得到的结果会是分块对角的。

取 \((n+m)\times (n+m)\) 矩阵 \(A\),\(A_{ij}=y_j^{n+m-i}\),其中 \(y_1\sim y_m\) 为 \(g\) 的根,\(y_{m+1}\sim y_{n+m}\) 为 \(f\) 的根(又记为 \(x_1\sim x_n\)),则

\[BA=\begin{bmatrix}Y & 0\\0 & X\end{bmatrix} \]

这里 \(Y\) 为 \(m\times m\) 矩阵,\(Y_{ij}=y_j^{m-i}f(y_j)\);\(X\) 为 \(n\times n\) 矩阵,\(X_{ij}=x_j^{n-i}g(x_j)\)。

\[|BA|=|Y||X|=\prod_{1\le i\le m}f(y_i)\prod_{1\le j<i\le m}(y_j-y_i)\prod_{1\le i\le n}g(x_i)\prod_{1\le j<i\le n}(x_j-x_i) \]

\[|A|=\prod_{1\le j<i\le m}(y_j-y_i)\prod_{1\le j<i\le n}(x_j-x_i)\prod_{1\le j\le m,1\le i\le n}(y_j-x_i) \]

再注意到 \(\prod_{1\le i\le n}(y_j-x_i)=f(y_j)\),就有

\[R(f,g)=|B|=\prod_{1\le i\le n}g(x_i) \]

有重根是不是会出问题?事实上,可以把上面的 \(x_i,y_j\) 看成不定元,则上面都是对多元多项式在操作,一定有消去律,所以有重根上面的推导也成立。

所以对于两个首一多项式 \(f,g\),我们得到了结论:

\[R(f,g)=\prod_{1\le i\le n}g(x_i) \]

不难看出以下性质:

  • \(R(f,g)=(-1)^{nm}R(g,f)\)
  • \(R(fg,h)=R(f,h)R(g,h)\)
  • \(R(f,gh)=R(f,g)R(f,h)\)
  • 对于首一多项式 \(f\),\(R(f,g)=R(f,g+hf)\)

所以结式的计算也可以用多项式欧几里得的做法 \(O(nm)\) 算出。这个算法是“结式”这个东西和上题唯一的联系了。

总结

笔者当年看到 Homework from Zhejiang 一题时,被某些题解中提到的“用结式计算”或者“本题用到了结式”劝退了。但其实,本题跟结式除了最终的算法形式上相同,没有别的联系:结式的定义(这个行列式的值)对于做出题目没有任何关系,而结式的计算确实跟本题的算法相同,但讲清这个算法也不需要知道结式是什么,这是一个关于多项式根相关式子的普适性算法。

以一道题目去拓展相关知识的出发点是好的,但如果忽略逻辑关系而掉书袋,例如说出本题用到结式这种话:实际上是用到了结式的计算方法,这种说话方式是否有好处就是值得商榷的了。至少笔者觉得,“拓展”永远应当在“讲清楚题目”之后进行,而在“讲清楚题目”的过程中,还是该尽量避免花里胡哨的高级词汇。

标签:dots,le,ddots,多项式,Zhejiang,结式,prod,Homework
From: https://www.cnblogs.com/tianbusblog/p/18213553

相关文章

  • Homework9
    1.什么是模块化?模块化是一种设计理念,它强调将复杂的系统分解为较小的、独立的和可替换的组件,这些组件称为“模块”。每个模块都负责系统中的一个具体功能,并且可以独立开发、测试和替换,而不影响其他模块或整个系统的功能。为什么要模块化?降低复杂性:通过将复杂系统分解为更小、......
  • homework10
    题目:某培训机构入学管理系统有报名、交费和就读等多项功能,下面是对其各项功能的说明:1、报名:由报名处负责,需要在学员登记表上进行报名登记,需要查询课程表让学员选报课程,学院所报课程将记录到学员选课表2、交费:由收费处负责,需要根据学员所报课程的收费标准进行收费,然后在账目表上......
  • Homework 8 如果你要开发一个中小学生学习数学的软件,你应该找谁去做用户调研?
    1.中小学生由于不同年龄段的学生的认知能力、学习习惯和兴趣点有所不同,因此,需要选择不同年龄、性别和学习水平的中小学生进行调研。了解他们对数学学习的态度、学习方法、遇到的困难以及他们对于数学软件的期望。2.中小学生的家长家长通常关注孩子的学习效果和体验,他们可以为软......
  • Homework 7
    1.尝试建模电梯的状态图2.学校规定:一个学生可选修多门课,一门课有若干学生选修;一个教师可讲授多门课,一门课只有一个教师讲授;一个学生选修一门课,仅有一个成绩。学生的属性有学号、学生姓名;教师的属性有教师编号,教师姓名;课程的属性有课程号、课程名。要求:根据上述语义画......
  • Homework6
    1、Quora精选:为什么软件开发周期总是预估的2~3倍?https://www.sohu.com/a/132411358_355123这篇文章通过一个徒步旅行的比喻,解释了为什么软件开发周期通常会比预估的长2到3倍。文章中提到,开发过程中经常会出现意想不到的挑战和困难,比如需求变更、技术问题、资源限制等,这些都会导......
  • Homework5
    形式化方法的定义:形式化方法(FormalMethods),在逻辑科学中是指分析、研究思维形式结构的方法。它把各种具有不同内容的思维形式(主要是命题和推理)加以比较,找出其中各个部分相互联结的方式,如命题中包含概念彼此间的联结,推理中则是各个命题之间的联结,抽取出它们共同的形式结构;再......
  • Homework4
    Q1:什么是DevOps?阅读以下材料,做好笔记https://www.zhihu.com/question/58702398A1:DevOps是一种将软件开发人员(Dev)和IT运维技术人员(Ops)之间的沟通合作紧密结合的文化、运动或惯例。它通过自动化软件交付和架构变更的流程,使得软件的构建、测试和发布更加快捷、频繁和可靠。DevOps强......
  • Homework3
    Q:软件工程方法论对我们经软件开发有多大用处?谈谈你的看法。A:软件工程方法论在软件开发中起着至关重要的作用,它为我们提供了一套系统化、规范化的软件开发流程和方法,帮助我们更好地组织和管理软件开发过程,提高软件质量和开发效率。以下是软件工程方法论在软件开发中的几个关键作用......
  • The 18th Zhejiang Provincial Collegiate Programming Contest
    目录写在前面AMLCIJFGD写在最后写在前面比赛地址:https://codeforces.com/gym/103055。以下按个人难度向排序。唐唐唐唐唐,又是死在数学手上的一次。妈的为什么上个大学这么累好相似A签到。///*By:Luckyblock*/#include<bits/stdc++.h>#defineLLlonglong//=======......
  • games101_Homework7
    实现完整的PathTracing算法需要修改这一个函数:•castRay(constRayray,intdepth)inScene.cpp:在其中实现PathTracing算法//ImplementationofPathTracingVector3fScene::castRay(constRay&ray,intdepth)const{//TODOImplementPathTracing......