分治乘法详细讲解

我绝对不会告诉你我是因为太蒻了,不会 FFT 才搞这个的。

我用一下别人的图没什么问题吧

看得懂吧?比如 X = 123456 , Y = 987654 X=123456,Y=987654 X=123456,Y=987654,则 n = 3 , A = 123 , B = 456 , C = 987 , D = 654 n=3,A=123,B=456,C=987,D=654 n=3,A=123,B=456,C=987,D=654

前置知识:整数末尾添 0 0 0 方法(不可能不会吧),就是乘 10 10 10,当然添 n n n 个零就是乘 1 0 n 10^n 10n n 2 \frac{n}{2} 2n 个就是乘 1 0 n 2 10^{\frac{n}{2}} 102n

失败……

接下来!
∵ X = A × 1 0 n 2 + B , Y = C × 1 0 n 2 + D \because X=A \times 10^{\frac{n}{2}} + B,Y=C \times 10^{\frac{n}{2}} + D X=A×102n+B,Y=C×102n+D
∴ X × Y = ( A × 1 0 n 2 + B ) × ( C × 1 0 n 2 + D ) = A C × 1 0 n + A D × 1 0 n 2 + B C × 1 0 n 2 + B D = A C × 1 0 n + ( A D + B C ) × 1 0 n 2 + B D \therefore \begin{align*} X \times Y = &(A \times 10^{\frac{n}{2}} + B) \times (C \times 10^{\frac{n}{2}} + D) \\ = &AC \times 10^n + AD \times 10^{\frac{n}{2}} + BC \times 10^{\frac{n}{2}} + BD \\ = &AC \times 10^n + (AD+BC) \times 10^{\frac{n}{2}} + BD \end{align*} X×Y===(A×102n+B)×(C×102n+D)AC×10n+AD×102n+BC×102n+BDAC×10n+(AD+BC)×102n+BD
需要进行 4 4 4 次乘法( 1 0 k 10^k 10k 不算,因为是直接添 0 0 0)。
所以时间复杂度 T ( n ) = 4 T ( n 2 ) T(n) = 4T(\frac{n}{2}) T(n)=4T(2n)
也就是一棵满四叉树,节点数很多,不过只需要关心最后一层。
最后一层有 4 k 4^k 4k 个节点, k k k 为高度(根节点其实为 0 0 0,但是其实都是细节,无伤大雅), k = l o g 2 n k = log_2n k=log2n
所以,时间复杂度为 O ( 4 l o g 2 n ) O(4^{log_2n}) O(4log2n),也就是:
O ( 4 log ⁡ 2 n ) = O ( ( 2 2 ) log ⁡ 2 n ) = O ( 2 2 log ⁡ 2 n ) = O ( ( 2 log ⁡ 2 n ) 2 ) = O ( n 2 ) \begin{align*}\\ & O(4^{\log_2n}) \\ = & O((2^2)^{\log_2n})\\ = & O(2^{2\log_2n})\\ = & O((2^{\log_2n})^2) \\ = & O(n^2) \end{align*} ====O(4log2n)O((22)log2n)O(22log2n)O((2log2n)2)O(n2)
谔谔,为什么还是 O ( n 2 ) O(n^2) O(n2),这不和原本一样吗ToT。

成功

我们观察式子:
A C × 1 0 n + ( A D + B C ) × 1 0 n 2 + B D AC \times 10^n + (AD+BC) \times 10^{\frac{n}{2}} + BD AC×10n+(AD+BC)×102n+BD
发现它有三个部分,答案是这三个部分的和:

  1. A C × 1 0 n AC \color{grey}{\times 10^n} AC×10n 一次乘法
  2. ( A D + B C ) × 1 0 n 2 (AD+BC) \color{grey}{\times 10^{\frac{n}{2}}} (AD+BC)×102n 两次乘法
  3. B D × 1 0 0 BD \color{grey}{\times 10^0} BD×100 一次乘法

发现就是第二个部分乘法次数最多。
考虑将其优化。
直接优化(化简):很难,想不出来。
但是,如果式子中用了 A C AC AC B D BD BD,则不会增加乘法次数,因为有重复,可以记录下来。
简单起见,我们关注前半段: A D + B C AD+BC AD+BC,考虑将其变为 ? ? + A C + B D ??+AC+BD ??+AC+BD
A D + B C − A C − B D = A ( D − C ) + B ( C − D ) = A ( D − C ) − B ( D − C ) = ( A − B ) ( D − C ) \begin{align*} \\ &AD+BC-AC-BD \\ = & A(D-C) + B(C-D) \\ = & A(D-C) - B(D-C) \\ = & (A-B)(D-C) \end{align*} ===AD+BCACBDA(DC)+B(CD)A(DC)B(DC)(AB)(DC)
现在,只需要进行一次乘法。最终公式:
A C × 1 0 n + ( ( A − B ) ( D − C ) + A C + B D ) × 1 0 n 2 + B D AC \times 10^n + ((A-B)(D-C)+AC+BD) \times 10^{\frac{n}{2}} + BD AC×10n+((AB)(DC)+AC+BD)×102n+BD
时间复杂度:
T ( n ) = 3 T ( n 2 ) = 3 log ⁡ 2 n = ( 2 log ⁡ 2 3 ) log ⁡ 2 n = ( 2 log ⁡ 2 n ) log ⁡ 2 3 = n l o g 2 3 \begin{align*} \\ T(n)=&3T(\frac{n}{2}) \\ =&3^{\log_2n} \\ =&(2^{\log_23})^{\log_2n} \\ =&(2^{\log_2n})^{\log_23} \\ =&n^{log_23} \end{align*} T(n)=====3T(2n)3log2n(2log23)log2n(2log2n)log23nlog23
那么 log ⁡ 2 3 \log_23 log23 大约是多少呢? log ⁡ 2 3 ≈ 1.585 \log_23 \approx 1.585 log231.585
那么到底是多少呢?来不严谨粗略估计一下:
假设计算机每秒可以执行 1 0 8 10^8 108 条指令。
则最大可以计算的位数为: n log ⁡ 2 3 = 1 0 8 n^{\log_23} = 10^8 nlog23=108,则位数最大约为 111541 111541 111541
而对比朴素算法 O ( n 2 ) O(n^2) O(n2),最大位数仅为 10000 10000 10000,相比之下多了一个多数量级!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web学习_SQL注入_联合查询注入

UNION 操作符用于合并两个或多个 SELECT 语句的结果集, UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句 中的列名,并且UNION 内部的 SELECT 语句必须拥有相同数量的 列。 联合查询注入就是利用union操作符,将攻击者希望查询的语句…

jmeter性能优化之mysql监控sql慢查询语句分析

接上次博客:基础配置 多用户登录并退出jmx文件:百度网盘 提取码:0000 一、练习jmeter脚本检测mysql慢查询 随意找一个脚本(多用户登录并退出),并发数设置300、500后分别查看mysql监控平台 启动后查看,主要查看mysql…

406. 根据身高重建队列(中等)

406. 根据身高重建队列 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转:406. 根据身高重建队列 2.详细题解 做一道题之前先静心,默念三遍一切反动派都是纸老虎。已知一个队列,队列中每个数据表示一个属性&#xf…

【qt】启动窗口的玩法

启动窗口的玩法 一.应用场景二.界面类设计窗口三.main中创建四.窗口显示标识五.功能实现1.读取注册表2.md5加密3.登录实现4.保存注册表5.功能演示 六.鼠标事件拖动窗口1.找到鼠标事件的函数2.点击事件3.移动事件4.释放事件 七.总结 一.应用场景 一般我们的软件和应用都会一个登…

实战项目《负载均衡在线OJ系统》

一、项目灵感来源 在日常做题的过程中,我们总会去力扣和牛客网上去做题,但是从来没有想过网站是如何加载给用户的,以及在提交代码时,是如何得知我们的代码是否正确。基于这样的原因,也是学习到一定程度的知识后&#x…

python中的循环语句

while循环 基本语法格式 while 条件: 循环体 条件为真,则执行循环体代码 条件为假,则结束循环 打印 1-10的整数 死循环有时候也是必须的, while语句的语法: (1)变量的初始化,…

你知道又美又飒的英歌队头槌女孩吗?无标题

今天是文化和自然遗产日,本“ 人民体验官 ”推广人民日报官方微博文化产品《 16岁英歌队头槌女孩又美又飒》。 截图:来源“ 人民体验官 ”推广平台 郑梓欣是汕头潮阳西门女子英歌队的“头槌”。在2024年春节英歌舞展演巡游活动中,汕头潮阳西…

MySQL第二种实现方式:现在有一个生产计划,甲乙丙3个品类共16个产品,生产时间6天,每天甲品类可以生产1张单,乙3张,丙1张,请用MySQL写出H列的效果

接上篇:链接: 现在有一个生产计划,甲乙丙3个品类共16个产品,生产时间6天,每天甲品类可以生产1张单,乙3张,丙1张,请用MySQL写出H列的效果 第二种写法: -- 使用WITH子句创建CTE WITH…

Spark参数配置不合理的情况

1.1 内存设置 💾 常见的内存设置有两类:堆内和堆外 💡 我们作业中大量的设置 driver 和 executor 的堆外内存为 4g,造成资源浪费 📉。 通常 executor 堆外内存在 executor.cores1 的时候,1g 足够了&…

UltraEditUEStudio软件最新版下载及详细安装教程

UEStudio简介: UEStudio建立在上文本编辑器UltraEdit的功能基础上,并为团队和开发人员提供了其他功能,例如深度Git集成。您可以直接在UEStudio中克隆,签出,更新,提交,推入/拉入等操作&#xff…

再回首:我的创作纪念日3周年回顾

机缘 我与CSDN三周年博客纪念 大家好!今天,我非常高兴地在这里向大家分享我与CSDN三周年博客纪念的喜悦和成果。在这三年里,我坚持不懈地在CSDN上分享了我的技术成果和心得,积累了超过2000篇的博客文章。这一路上,我…

Invalid JSON text:“Invalid value.“ at position 0 in value for column ‘user.info

你们好,我是金金金。 场景 我正在练习mybatis-plus,在插入一条数据的时候报错了,错误信息如上图 排查 排查之前我先贴一下代码 以下为数据库字段类型 在插入的过程中报错:Data truncation: Invalid JSON text: "Invalid val…

python中的函数递归

函数递归,就是一个函数,自己调用自己。 如上图所示,是一段通过定义函数,编写函数体来实现for循环。实现的是从1到n的累乘。即求n的阶乘, 如上图所示,是一段函数的递归来实现1到n的累乘操作,将1*…

opencv快速安装以及各种查看版本命令

安装opencv并查看其版本,直接通过一个可执行文件实现。 #!/bin/bashwget https://codeload.github.com/opencv/opencv/zip/3.4 -O opencv-3.4.zip && unzip opencv-3.4.zip && cd opencv-3.4 && \mkdir build && cd build &&a…

Sentinel不使用控制台基于注解限流,热点参数限流

目录 一、maven依赖 二、控制台 三、基于注解限流 四、热点参数限流 五、使用JMeter验证 一、maven依赖 需要注意,使用的版本需要和你的SpringBoot版本匹配!! Spring-Cloud直接添加如下依赖即可,baba已经帮你指定好版本了。…

海洋日特别活动—深海来客——可燃冰

深海中有一种神奇的物质,似冰又不是冰。 别看它其貌不扬,但本领不小,遇火即燃,能量巨大,可谓是能源家族的新宠。它就是被国务院正式批准列为我国第173个矿种的“可燃冰”! 可燃冰到底是个啥?它…

把chatgpt当实习生,进行matlab gui程序编程

最近朋友有个项目需要整点matlab代码,无奈自己对matlab这种工科的软件完全是外行,无奈只有求助gpt这种AI助手了。大神们告诉我们,chatgpt等的助手已经是大学实习生水平啦,通过多轮指令交互就可以让他帮你完成工作啦!所…

时隔很久运行苍穹外卖项目,出现很多错误

中途运行了很多其他项目,maven的配置文件还被我修改了一次。导致再次运行苍穹外卖项目出现很多错误。 发现没有办法,把本地的仓库删了个干干净净。然后点击clean发现报错: Cannot access alimaven (http://mavejavascript:void(0);n.aliyun.…

k8s学习--kubernetes服务自动伸缩之垂直伸缩(资源伸缩)VPA详细解释与安装

文章目录 前言VPA简介简单理解详细解释VPA的优缺点优点1.自动化资源管理2.资源优化3.性能和稳定性提升5.成本节约6.集成性和灵活性 缺点1.Pod 重启影响可用性2.与 HPA 冲突3.资源监控和推荐滞后:4.实现复杂度: 核心概念Resource Requests 和 Limits自动调…

学会python——九九乘法表+斐波那契数列(python实例一)

目录 1、认识Python 2、环境与工具 2.1 python环境 2.2 pycharm编译 2、九九乘法表 2.1 代码构思 2.2 代码示例 2.3 运行结果 3、斐波那契数列 3.1 代码构思 3.2 代码示例 3.3 运行结果 1、认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对…