首页 > 其他分享 >一些多项式问题的 $\mathsf{AC^0}$ 电路

一些多项式问题的 $\mathsf{AC^0}$ 电路

时间:2024-06-24 12:59:01浏览次数:3  
标签:AC 多项式 sum 电路 mathsf prod

这是对 Robert Andrews 和 Avi Wigderson 最近的一篇预印本, Constant-Depth Arithmetic Circuits for Linear Algebra Problems 的解读.

这里的电路指的是代数电路, 代数意义的 \(\mathsf{AC^0}\) 就是多项式大小的常数层电路, 每个门都是乘法或加法, 同时可以有任意多个输入. 大家有时候也写成 \(\sum \prod \sum \cdots\) 这种形式.

代数电路相比于布尔电路而言, 由于额外有个对于计算的多项式的次数的限制, 导致本身有很强的并行化的能力, 对于代数问题我们有所谓的 "\(\mathsf{P} = \mathsf{NC^2}\)", 这是对于布尔电路而言我们不相信的.

这意味着代数问题的 \(\mathsf{AC^0}\) 可能也比布尔问题的 \(\mathsf{AC^0}\) 更强. 布尔问题的 \(\mathsf{AC^0}\) 的局限性在比较早的时候就已经被证明了, 比如 parity 和 majority 都不在 \(\mathsf{AC^0}\) 里.

直到几年前, 我们才确实知道代数问题的 \(\mathsf{AC^0}\) 的局限性, 比如它算不了行列式.

这篇文章的主要结果是, 他们证明了一些多项式有关的代数问题依然在电路深度的意义上是简单的: 他们可以用 \(\mathsf{AC^0}\) 电路来计算. 所用的手段其实是相对古老的, 可以很容易讲清楚.

第一个问题: 给 \(n\) 个数 \(x_1,\dots,x_n\), 计算所有的初等对称多项式 \(e_i(x)\).

这个问题无非是计算

\[\prod(T + x_i) = T^n + \sum e_i T^{n-i} \]

的系数. 所以我们可以做如下事情:

选定 \(n+1\) 个取值 \(T_1,\dots,T_{n+1}\), 计算

\[\prod_i (T_j + x_i), \]

然后对它们做 Lagrange 插值.

这个乘积是一个显然的 \(\prod \sum\) 电路, Lagrange 插值也是一个简单的线性变换, 也即 \(\sum \prod\) 电路. 所以初等对称多项式可以用 \(\sum \prod \sum\) 电路计算.

一个比较 tricky 的事情是, 如何做多项式除法 \(P / Q\) 呢?我们首先考虑翻转系数, 这样就只用求形式幂级数 \(P / Q\) 的前 \(n-m\) 项了.

接下来有两种思路:

  1. 多项式乘法显然是有 \(\sum \prod\) 电路的, 所以我们可以直接考虑 \(Q^{-1}\) 怎么算. 对此我们可以直接考虑形式幂级数复合, \(f(g)\) 怎么算, 由于这个天生是 \(n^2\) 次多项式, 我们先对 \(g\) 多点求值, 然后我们再将给定的点值一个个在 \(f\) 中求值. 最后做 Lagrange 插值.

  2. 我们先分别各自算 \(\log P, \log Q\), 然后做减法, 最后再做指数. 因为多项式复合是 \(\mathsf{AC^0}\) 的, 所以这个过程也是 \(\mathsf{AC^0}\) 的.

这二者看起来没有本质区别, 但是接下来, 我们可以考虑另一个问题: 计算结式. 设 \(P = \prod(T-x_i)\), \(Q = \prod(T-y_i)\), 结式是

\[\prod_{i,j}(x_i - y_j). \]

虽然 \(x_i, y_j\) 可能要在域 \(\mathbb F\) 的代数闭包上才能找到, 但我们知道结式的结果永远是在原来的域 \(\mathbb F\) 上的.

现在考虑 resultant 怎么做, 我们考虑扩展成多项式

\[\prod (T + x_i - y_j), \]

如果计算出常数项, 那么就是结果. 翻转过来, 我们可以考虑

\[ \begin{align*} \log \prod(1 + (x_i - y_j) T) &= \sum_{i,j,k} \frac{(-1)^{k-1}}k (x_i - y_j)^k T^k \\ & = \sum_k \frac{(-1)^{k-1}}k T^k \sum_l \binom k l (-1)^l p_l(y) p_{k-l}(x). \end{align*} \]

而幂和 \(p_i(x), p_i(y)\) 是用 \(\log \prod(1 - x_i T)\) 和 \(\log \prod(1 - y_i T)\) 可以计算的, 所以我们可以得到 resultant 也是在 \(\mathsf{AC^0}\) 里的.

我们接下来也要反复用到初等多项式 \(e_i\) 和幂和 \(p_i\) 的转化.

进一步的, 我们还可以计算两个多项式的 \(\gcd\). 但这里有一定微妙的问题, 显然一个固定的代数电路是不知道 \(\gcd\) 的次数的, 所以我们需要考虑一族电路. 我们将会看到一个巧妙的解决方法:

如果 \(n, m\) 次多项式 \(P,Q\), 先把它们写成

\[P = \prod(T-x_i), Q = \prod(T-y_j). \]

现在在考虑多项式

\[H(T, S) = Q(T) (S-T). \]

现在假设 \(P, Q\) 都 没有重根. 我们有:
如果 \(x_i\) 等于某个 \(y_j\), 那么 \(H(x_i, S) = 0\), 否则 \(H(x_i, S) = Q(x_i) (S - x_i) \neq 0\).

假设 \(P, Q\) 的 \(\gcd\) 次数是 \(d\), 说明恰有 \(n-d\) 个 \(x_i\) 满足 \(H(x_i, S) \neq 0\). 也就是说,

\[\frac{P}{\gcd(P, Q)} = \frac{\prod_{Q(x_i)\neq 0} Q(x_i) (T - x_i)}{\prod_{Q(x_i)\neq 0} Q(x_i)} = \frac{e_{n-d} \left\{ Q(x_i) (T-x_i) \right\}}{ e_{n-d} \left\{ Q(x_i) \right\} }. \]

虽然 \(Q(x_i)\) 不能直接求, 但是 \(e_{\ell} \left\{ Q(x_i) \right\}\) 可以从 \(p_\ell \left\{ Q(x_i) \right\}\) 求得, 而 \(p_\ell \left\{ Q(x_i) \right\}\) 可以对 \(p_\ell(x)\) 多点求值得到.

算出了 \(P/\gcd(P, Q)\), 再做一次多项式除法就得到了 \(\gcd(P, Q)\).

有一个微妙的事情是中间有一个真的除法. 这个除法可以被 Strassen 的一个定理避免: 如果有两个多项式 \(f_1, f_2\) 是用 \(\mathsf{AC^0}\) 电路计算的, 而且 \(f_1\) 是 \(f_2\) 的倍数, 那么 \(f_1 / f_2\) 也是 \(\mathsf{AC^0}\) 的.

因此, 在预知 \(P, Q\) 的 \(\gcd\) 次数的情况下, 我们可以用 \(\mathsf{AC^0}\) 电路计算 \(\gcd(P, Q)\).

刚刚只处理了没有重根的情况, 论文中更加细致地处理了有重根的情况, 以及一些更多的问题. 但无论如何, 核心思想都是基于初等对称多项式和幂和的转化.

我个人比较关心的问题: 幂和和初等对称多项式的转化需要用到 \(\log\) 和 \(\exp\), 他们严重依赖计算的域是特征为 \(0\) 的, 有什么办法避免这个要求呢?

标签:AC,多项式,sum,电路,mathsf,prod
From: https://www.cnblogs.com/Elegia/p/18264831/polynomial-problems-in-AC0

相关文章

  • [本科项目实训] Hugging Face Transformers 模型部署与微调
    TransformersHuggingFaceTransformer提供了模型的加载、推理、微调接口,使用该库可以轻松完成自然语言模型的部署微调工作,其有继承自AutoClass的四个最为常见的接口,且调用方式均为AutoClass.from_pretrain("model_name"):AutoTokenizer:用于文本分词AutoFeatureExtractor:用......
  • [题解]CF1223F Stack Exterminable Arrays
    CCF出的原题观摩一下。思路首先可以用一个Trie来维护。在这里对本文中的一些变量做一下说明。\(p\)表示当前维护的Trie中,指向的元素编号。\(t_i\)表示在Trie中编号为\(i\)的元素在原序列中的值。\(f_i\)表示在Trie中编号为\(i\)的元素在Trie中的父节点。......
  • MacBook怎么下载Indesign(ID)软件 百度云盘下载
    今天介绍一下,AdobeInDesign是一个桌面出版(DTP)的应用程序,主要用于各种印刷品的排版编辑。使用者常常将AdobeInDesign简称为ID,其与PS、AI、CDR并称为平面设计四小花旦。Indesign的最初设计是适用于定期出版物,海报以及其他印刷媒体,而随着人们对软件的开发与应用,现如今的In......
  • Qt-QMain Window和QAction
        QMainWindow是主窗口类,具有菜单栏、工具栏、状态栏等主窗口常见的界面元素。要设计主窗口上的菜单栏、工具栏、、按钮的下拉菜单、组件的快捷菜单等,需要用到QAction类。QAction对象就是实现某个功能的“动作”,我们称其为Action。在UI可视化设计时,我们可以设计很......
  • 华为HCIP Datacom H12-821 卷11
    1.多选题OSPF包括哪些报文类型?A、LinkStateDDB、HelloC、LinkStateRequestD、DatabaseDescription正确答案: B,C,D解析:在OSPF协议中,报文类型分为:hello、DD、LSR、LSU、LSAck。所以正确答案是“Hello”、“DatabaseDescription”、“LinkStateRequest”......
  • 【Oracle】Oracle数据库查询某张表的全部字段与类型
    【Oracle】Oracle数据库查询某张表的全部字段与类型原文链接:https://blog.csdn.net/LI_AINY/article/details/86597377PS:TABLE_NAME对应的表名要全部大写查询表的所有字段名以及属性(所有用户)SELECT*FROMALL_TAB_COLUMNSWHERETABLE_NAME='T_UNIT_NAME'查询表的所有字......
  • Cobra - How to avoid access global variables in a global variable or init() func
    在同一个package中的init()函数是按照所在文件文件名的字母顺序执行的,如果一个文件排在root.go之前,那么在其中字义的<文件名>Cmd全局变量赋值时将不能使用在root.go中初始化并赋值的全局变量(如globalflags),同样在其init()函数中也不能使用那些全局变量,如果使用则会报空指针错误。......
  • react-router-dom 6.4版本的尝鲜和总结
    1.版本概述1.1版本发布背景ReactRouter6.4版本是继6.0大版本更新之后的又一重要里程碑。此版本发布于2024年,旨在进一步优化开发者体验,提供更加强大和灵活的路由功能。6.4版本在前一版本的基础上,引入了新的数据抽象,增强了导航钩子,使得UI与数据的同步更加容易。1.2主......
  • 创新实训(十)——代码美化部分:导航栏的active
    代码美化部分————导航栏的active对于导航栏来说,当选定在某个功能部分时,当前模块会有高亮显示。查看main-nav.php中有管导航栏的代码<divclass="collapsenavbar-collapse"id="navbarSupportedContent"> <ulclass="navnav-pillsmain-navmr-auto"> <liclass="......
  • oracle 19c 安装、卸载
    Oracle数据库19c下载安装安装登录oracle官网进入下载界面https://www.oracle.com/cn/database/technologies/oracle-database-software-downloads.html#db_free选择OracleDatabase19cforMicrosoftWindowsx64(64-bit)下载将下载下来的zip文件解压缩,点击setup.exe运行安......