【Algorithm】Karatsuba Multiplications 乘法算法

news/2024/5/1 19:10:20/文章来源:https://blog.csdn.net/weixin_43098506/article/details/127131211

Karatsuba Multiplications

Q1: 请计算:x=1234x=1234x=1234, y=5678y=5678y=5678, x∗y=?x*y=?xy=?

这个问题其实我们在三年级的时候就学过,用乘法竖式进行运算。但是有没有其他的方法,或者说,如果 x,yx,yx,y 非常大的时候,我们有没有什么办法可以有效的缩短运算时间呢?

这就引出 Karatsuba 乘法算法

首先,举例来看 Karatsuba 乘法算法 是怎么做的 x∗yx*yxy

在这里插入图片描述

思考,Karatsuba这么做的数学原理是什么?


Karatsuba 数学原理

Recursive 递归

在这里插入图片描述
Karatsuba不断的将乘数分成两个部分,从而实现降维的乘法。
然后不断的通过递归的方式得到将降维后的乘数的结果。

当然,如果想要理解 Karatsuba 乘法原理 不得不首先理解 递归 Recursive 的概念,若读者已知递归,可直接跳到最后的 python程序部分。


递归 & 斐波那契数列

对于递归的介绍,我将通过一个经典的案例,即 斐波那契数列 Fibonacci sequence 来介绍。

首先,形如:1 1 2 3 5 8 13 21 … 被称为斐波那契数列。
很明显,斐波那契数列从第三项开始都为前两项的和,即 2=1+1, 3=2+1, … 21=13+8,…
试问第100项为多少?

code

'''About Recursive and FibonacciCreate by Hongduo at 6.Oct.2022
'''def Fibonacci(x):if(x == 1 or x == 2):return 1else:return Fibonacci(x-1) + Fibonacci(x-2)print(Fibonacci(100))

通过递归

Fib(100)=Fib(99)+Fib(98)Fib(100) = Fib(99) + Fib(98)Fib(100)=Fib(99)+Fib(98)
Fib(99)=Fib(98)+Fib(97)Fib(99) = Fib(98) + Fib(97)Fib(99)=Fib(98)+Fib(97)
.........
Fib(3)=Fib(2)+Fib(1)Fib(3) = Fib(2) + Fib(1)Fib(3)=Fib(2)+Fib(1)

在这里插入图片描述

python & Karatsuba

def karatsuba(num1,num2):n_max = max(len(str(int(num1))), len(str(int(num2))))if n_max == 1:return int(num1*num2)n = n_max + n_max%2a = num1//10**(n/2)b = num1%10**(n/2)c = num2//10**(n/2)d = num2%10**(n/2)t1 = karatsuba(a,c)t3 = karatsuba(b,d)t2 = karatsuba(a+b,c+d) - t1 - t3return int(t1*10**n + t2*10**(n/2) + t3)print(karatsuba(123456789,123456789))

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

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

相关文章

drf 视图类 GenericAPIView 及扩展

drf 视图类 GenericAPIView 及扩展 文章目录drf 视图类 GenericAPIView 及扩展1、2个视图基类1.1、GenericAPIView:属性和方法1.2、基于APIView 写5个接口1.3、基于GenericAPIView写5个接口2、5个视图扩展类2.1 基于GenericAPIView5个视图扩展类写接口3、九个视图子…

【UCB操作系统CS162项目】Pintos Lab2:用户程序 User Programs(下)

在上节中,我们已经完成了 Lab 2 要求的参数传递和系统调用中的 halt, exit 以及向 stdout 输出的 write,最终停在了 wait 的实现之前。本节就先从 wait 和 exec 继续。 Syscall wait exec:实现父子进程 讲义中 wait 的要求是这样的&#x…

这几个文字翻译工具确定不试试看?

想问问大家平常会接触到TXT文件吗?这是微软在操作系统上附带的一种文本格式,主要是保存纯文字信息,像我们电脑上自带的记事本工具,就是使用这种文件格式。有时候我们需要将文本内容翻译成中文。那你知道如何实现TXT翻译成中文吗&a…

LRU缓存——哈希表+双向链表

一、题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: 1)LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 2)int get(int key) 如果关键字 key 存在于缓存中,…

STA系列 - 特殊时序分析multicycle/half-cycle/false path

文章目录什么是require time/arrive timeMulticycle PathHalf PathFalth Path本篇文章介绍的是特殊的时序path, 全文为视频笔记,以及自己的理解https://www.bilibili.com/video/BV1if4y1p7Dq?p10&vd_source84d1070e8334ce7e2bb0bd110abcf1a7什么是require time…

使用服务器跑模型——案例2

案例2 在本案例中我们使用vscode来上传/下载文件,服务器端编程和debug。 下载 vscode 在官网下载vscode正式版,别使用家庭版。下载地址https://code.visualstudio.com/Download。 使用 vscode 连接服务器 在vscode扩展中搜索ssh并下载安装。 安装成功…

【机器学习】熵权算法确定权重 原理+完整MATLAB代码+详细注释+操作实列

【机器学习】熵权算法确定权重 原理完整MATLAB代码详细注释操作实列 文章目录 1. 熵权法确定指标权重 (1)构造评价矩阵 Ymn (2)评价矩阵标准化处理 (3)计算指标信息熵值 Mj (4&#xff09…

原生JS项目练习——验证码的生成及教验

一、主要功能介绍: 1、通过for循环生成生成六位随机验证码 2、通过for循环随机生成验证码颜色 3、窗口加载事件,窗口一加载就调用函数,重置验证码 4、按钮点击事件,一点击就调用函数,重置验证码 5、input输入框已失去焦…

Yarn概述

Hadoop系列 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flink Kafka Hbase…

公众号网课搜题接口系统

公众号网课搜题接口系统 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 查题校园题库:查题校园题库后台(…

快速开发微信小程序之二-微信支付

一、背景 在面试程序员的时候,有两项经历会带来比较大的加分,第一你是否做过支付金融相关的业务,第二你是否写过底层框架中间件代码,今天我们聊一下微信支付是如何对接的。 二、相关概念 1、微信商户平台 要使用微信支付&#…

一、mini2440_bsp_led

一、芯片手册 1、板子原理图 2、GPIO使用 (1)GPxCON (2)GPxDAT 二、实现分析 1、初始化led 设置GPBCON(0x56000010)为 0x00015400 2、设置led输出,根据原理图引脚输出低电平时灯被点亮 LED1…

K8s-临时容器 Ephemeral Containers

临时容器 Ephemeral Containers 当由于容器崩溃或容器镜像不包含调试工具而导致 kubectl exec 无用时, 临时容器对于交互式故障排查很有用。尤其是,Distroless 镜像 允许用户部署最小的容器镜像,从而减少攻击面并减少故障和漏洞的暴露。 由于…

C | 枚举?看一遍就够了

CSDN话题挑战赛第2期 参赛话题:学习笔记 啊我摔倒了..有没有人扶我起来学习.... 目录前言枚举1. 枚举的定义2. 枚举的内存大小3. 枚举的优势4. 枚举需要注意的地方前言 结构体、枚举、联合体都是自定义类型,结构体主要知识点结构体内存对齐可参考《C | …

九月SLAM相关论文速递

九月SLAM相关论文速递 论文列表DirectTracker: 3D Multi-Object Tracking Using Direct Image Alignment and Photometric Bundle Adjustment3D VSG: Long-term Semantic Scene Change Prediction through 3D Variable Scene GraphsLeveraging Large Language Models for Robo…

使用服务器跑模型——案例1

案例1 该方法mac,linux,windows都通用。我们使用terminal or cmd进行操作。 假设我们本地具有一个需要跑的模型Unet,我们需要将该模型上传到服务器上跑,步骤如下: 使用tar压缩文件 我们定位到我们需要压缩的模型&a…

云原生之容器编排实践-以k8s的Service方式暴露SpringBoot服务

背景 上一篇文章云原生之容器编排实践-SpringBoot应用以Deployment方式部署到minikube以及弹性伸缩中,我们通过 Deployment 完成了将 SpringBoot 应用部署到 minikube 并测试了其弹性伸缩的丝滑体验。但是 Deployment 部署后我们还面临以下问题: 访问时…

Day761.Redis集群方案:Codis -Redis 核心技术与实战

Redis集群方案:Codis Hi,我是阿昌,今天学习记录的是关于Redis集群方案:Codis Redis 的切片集群使用多个实例保存数据,能够很好地应对大数据量的场景。哨兵集群, Redis 官方提供的切片集群方案 Redis Clus…

SPI总线通信——基于STM32MP157A

SPI总线概念 SPI总线是Motorola首先提出的全双工三线/四线同步串行总线,采用主从模式(Master Slave)架构;支持多从机(slave)模式应用,一般仅支持单主机,多从机。 时钟由主机控制&…

java培训技术处理模型数据之 ModelAndView

处理模型数据之 ModelAndView 1 ModelAndView介绍 控制器处理方法的返回值如果为 ModelAndView, 则其既包含视图信息,也包含模型 数据信息。 2)添加模型数据: MoelAndView addObject(String attributeName, Object attributeValue) ModelAndView…