分治乘法详细讲解

我绝对不会告诉你我是因为太蒻了,不会 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,一经查实,立即删除!

相关文章

C语言习题~day33

1.以下程序运行时&#xff0c;若输入1abcedf2df输出结果是&#xff08;&#xff09; #include <stdio.h> int main() { char a 0, ch; while ((ch getchar()) ! \n) { if (a % 2 ! 0 && (ch > a && ch < z)) ch ch - a A; a; putchar(ch); }…

Web前端电话咨询:深度解析与实用指南

Web前端电话咨询&#xff1a;深度解析与实用指南 在数字化时代&#xff0c;Web前端技术日新月异&#xff0c;对于许多企业和个人而言&#xff0c;通过电话咨询了解前端技术的最新动态和解决方案已成为一种高效且便捷的方式。本文将从四个方面、五个方面、六个方面和七个方面&a…

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

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

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

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

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

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

【qt】启动窗口的玩法

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

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

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

P11 品牌管理

P75 品牌分类关联和级联更新 第一步 1、把renren-fast-vue\src\views\modules下的common和product模块复制到vue中 2、mybatisplus的分页插件&#xff0c;来调整品牌管理页面的页数不对问题 product新建config/MybatisPlusConfig.java文件&#xff0c;参照官网&#xff0c;…

【人工智能】AI绘画工具基本介绍

AI绘画工具是一种利用人工智能技术&#xff0c;特别是深度学习和神经网络&#xff0c;来生成图像的软件或在线服务。这些工具能够根据用户的指令或描述&#xff0c;创造出各种风格的图像&#xff0c;包括但不限于风景、人物、动物、抽象艺术等。AI绘画工具的出现&#xff0c;极…

python中的循环语句

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

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

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

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

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

Spark参数配置不合理的情况

1.1 内存设置 &#x1f4be; 常见的内存设置有两类&#xff1a;堆内和堆外 &#x1f4a1; 我们作业中大量的设置 driver 和 executor 的堆外内存为 4g&#xff0c;造成资源浪费 &#x1f4c9;。 通常 executor 堆外内存在 executor.cores1 的时候&#xff0c;1g 足够了&…

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

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

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

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

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

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

python中的函数递归

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

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

安装opencv并查看其版本&#xff0c;直接通过一个可执行文件实现。 #!/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依赖 需要注意&#xff0c;使用的版本需要和你的SpringBoot版本匹配&#xff01;&#xff01; Spring-Cloud直接添加如下依赖即可&#xff0c;baba已经帮你指定好版本了。…

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

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