首页 > 其他分享 >脑力体操: 半在线卷积能做到多好? (van der Hoeven, 2007)

脑力体操: 半在线卷积能做到多好? (van der Hoeven, 2007)

时间:2023-04-13 23:45:10浏览次数:32  
标签:van log ell 卷积 复杂度 sqrt 递归 2007 Hoeven

固定一个可以 \(O(1)\) 运算的 effective field \(K\), 并且假设其上的 FFT 时间复杂度为 \(O(N\log N)\). 有序列 \(\{g\}\) 和 \(\{\phi\}\), 如何计算半在线卷积 \(f_n = \phi_i(\sum_{i>0} g_i f_{n-i})\)?

Folklore

把序列拆成两个 \(N/2\) 长度的段, 左边算完了算左边对右边的贡献, 然后算右边. \(T(N) = 2T(N/2)+O(N\log N)\), 解得 \(O(N\log^2 N)\).

能不能再给力一点啊?

把序列拆成 \(b\) 个 \(N/b\) 长度的段, 左边算完了算左边对右边的贡献, 然后算右边.

注意到每块可以直接做 DFT 和 IDFT, 对之后每块的贡献不需要分别算了, 因此时间是 \(T(N) = bT(N/b)+O(N\log N + Nb)\), 取 \(b=\log N\), 解得 \(O\left(\frac{N\log^2 N}{\log\log N}\right)\).

能不能再给力一点啊?

注意到上面的 "块之间的贡献" 也是一个半在线卷积, 时间可以是 \(T(N) = bT(N/b) + (2N/b)T(b) + O(N\log N)\). 注意这里的半在线卷积不是跑完一个跑另一个了, 而是它们一起跑.

取 \(b=\sqrt N\), 递归式是 \(T(N) = 3\sqrt{N} T(\sqrt N) + O(N\log N)\), 复杂度 \(T(N) = O(N(\log N)^{\log 3 / \log 2})\).

能不能再给力一点啊? [vDH07]

如果递归树的叶子数和你根位置的时间复杂度长得不一样, 说明还有平衡的可能.

我们的目标是什么? 答: 上面的递归式每次将 \(N\) 变成了 \(N^{1/2}\) 级别的规模, 我们希望比这个块还要小.

将 \(N\) 理解成一个 \(N^{1/\ell}\) 进制数, 或者说, \(\ell\) 层分块, 对于 \(i\) 到 \(j\) 的贡献, 我们在它们不同的那个最高位位置计算贡献. 这样一来, 有递归的时间复杂度

\[T(N) = (2\ell - 1)N^{1-1/\ell}T(N^{1/\ell}) + O(\ell N\log N). \]

注意, 现在 \(N\) 每次变成 \(N^{1/\ell}\) 了, 那么只需要经过 \(\log\log N/\log\ell\) 轮后, 就到了递归树的叶子. 我们把 \(2\ell - 1\) 放成 \(2\ell\), 注意到下一层是

\[2\ell N^{1-\ell}\cdot \ell N^{1/\ell}\log N^{1/\ell} = 2\ell N\log N, \]

容易归纳发现第 \(k\) 层的代价是 \(2^k \ell N\log N\), 所以递归的总代价是

\[T(N) = O(2^{\log \log N / \log \ell} \ell N \log N). \]

由于

\[2^{\log \log N / \log \ell} \ell = 2^{\frac{\log \log N}{\log \ell} + \log \ell}, \]

最优取到 \(\log \ell = \sqrt{\log \log N}\), 有

\[T(N) = O(N\log N 2^{2\sqrt{\log_2 \log N}}). \]

根据换底公式, 这也就是 [vDH07] 所写的

\[T(N) = O\left(N\log N \exp \left({2\sqrt{\log 2 \cdot \log \log N}}\right) \right). \]

[vDH07] Joris van der Hoeven, 2007. New algorithms for relaxed multiplication.

标签:van,log,ell,卷积,复杂度,sqrt,递归,2007,Hoeven
From: https://www.cnblogs.com/Elegia/p/17316991.html

相关文章

  • 读论文2-Line Exhaustive Searching for Real-Time Vanishing Point Estimation in Ma
    曼哈顿世界中实时消失点估计的2行穷尽搜索1.Abstract本文介绍了一种非常简单和高效的算法,用于在曼哈顿世界中的校准图像上估计1、2或3个正交消失点。与传统方法使用1、3、4或6条线生成消失点假设不同,(基本方法)我们建议使用2条线获取第一个消失点v1,然后在等效球面上v1的大圆上均匀取......
  • 移动端,cavans和svg绘制进度图
    先看效果:起初是用cavans绘制的结果会模糊,倍数绘制再缩小也是模糊,最后换成了svg绘制:cavans:global.progressChart={template:`<divclass="process-chart-box"><canvasid="progressChart">当前浏览器不支持canvas</canvas><imgsrc......
  • [HAOI2007]理想的正方形【题解】
    题目描述有一个\(a\timesb\)的整数组成的矩阵,现请你从中找出一个\(n\timesn\)的正方形区域,使得该区域所有数中的最大值和最小值的差最小。输入格式第一行为\(3\)个整数,分别表示\(a,b,n\)的值。第二行至第\(a+1\)行每行为\(b\)个非负整数,表示矩阵中相应位置上......
  • 【Windows】Advanced_System_Care ( v 11.3.5 ) 内存清理插件 大小15.1 MB
    【Windows】Advanced_System_Care(v11.3.5)内存清理插件大小为15.1MBhttps://xcherry.lanzouj.com/il2iOmsobni密码: 3dw3 软件提取自Advanced_System_Care(  v11.3.5  )软件从2018年来,在自己电脑上用到了今天,觉得还不错,分享出来,类似于腾讯电脑管家的小火......
  • Advanced Installer傻瓜式打包教程
    工具AdvancedInstaller11.0前言这个包不复杂,没有服务和注册表等操作,但需要.NETFramework4.5和MySQL,同时需要初始化一下数据库,下面一起来实操一下。开始开始前先安装AdvancedInstaller。然后建议画个流程图,帮助自己了解安装包执行时每一步的检测和需要做的操作,比如我这里......
  • P3190 [HNOI2007]神奇游乐园
    P3190[HNOI2007]神奇游乐园用\(unordered\_map\)有个坑,写在了下面这个博客https://www.luogu.com.cn/blog/zhouzhuo/gei-yong-unorderedmap-di-hou-ren-ti-gong-dai-ma再贴一下代码吧点击查看代码#include<bits/stdc++.h>#include<unordered_map>#defineintlonglong......
  • postrelevant
    爬虫中post相关HTTP数据传输先来看看HTTP是如何传输表单数据的。HTTP是以ASCII码传输的,建立在TCP/IP协议之上的应用层规范。规范把HTTP请求分为三个部分:状态行、请求头、消息主体。类似于下面这样:<method><url><version><headers><entity-body>#例如:#请求行......
  • P1005 [NOIP2007 提高组] 矩阵取数游戏
    思维题:显然每个行可以互相独立来处理。贪心和暴力显然都不容易处理这题,所以我们只能考虑dp。每次只能取最左边和最右边的数,这显然很符合区间dp的特点。所以我们令dp[i]......
  • Vanilla OS 2.0 底层从 Ubuntu 迁移到 Debian
    VanillaOS是去年才正式发布的 Linux 发行版“新秀”,基于Ubuntu构建,免费且开源,默认桌面环境是GNOME。虽然VanillaOS的底层是Ubuntu,但它删除了各种Ubuntu定制和......
  • RS485采集电表DLT645-1997/2007协议数据存入数据库方案
    DAQforIIOT通用工业数据采集系统是一套运行在边缘计算机、工业网关或普通电脑上的设备数据采集管理软件,主要用于对各种工业仪器设备、电表、PLC、注塑机、数控机床等数据......