Algorithm(1) - Karatsuba multiplication

这个系列主要是记一下目前效率较高或者比较出名的一些算法.

Karatsuba multiplication:

x=5678   then: a=56  b=67

y=1234           c=12 d=34

setps:

1:   a*c = 672    ①

2:   b*d=2652   ②

3:  (a+b)(c+d)=6164  ③

4:  ③-②-①=2840

5:  6720000 + 2652+284000 = 7006652

Recursive algorithm:

whrite: x= 10n/2 a+b   y= 10 n/2 c+d

then x*y = 10nac+10n/2(ad+bc)+bd   这里,我们需要做4次乘法,在计算机中的cost并不理想,所以用到一个

Gauss‘s trick:

step1: recursively compute ac

step2: recurisively compute bd

step3: recurisively compute (a+c)*(c+d)  then

ad+bc = (a+c)*(c+d) - ac - bd

upshot:only 3 recursive multiply calls.

note: 这里的n表示位数, 比如x是6位数,n=6, n/2=3,如果x=7,则n/2取4.

保留一个问题,这个是我比较困惑的, 如果x和y位数相差比较大这个算法还能不能用, 比如x是7位数,y是三位数,希望大神解答!

在计算机里,少做一次乘法的效率会提高不少,对于给定的n位大数,算法的复杂度不超过3nlog3 ≈ 3n1.585, 一般给定N位数,复杂度是n平方。

Algorithm(1) - Karatsuba multiplication

时间: 2024-11-06 03:39:48

Algorithm(1) - Karatsuba multiplication的相关文章

[MIT6.006] 11. Integer Arithmetic, Karatsuba Multiplication 整型算术,Karatsuba乘法

很多人不喜欢√2的表达,他们认为它不是一个数. 一.卡塔兰数 Catalan numbers 在数方面上,有个著名的数叫卡塔兰数 Catalan numbers,它是组合数学中一个常在各种计数问题中出现的数列.其中它能解决一个叫求括号化方案数量的问题.如图下: 在卡塔兰数下,设P为平衡的父字符串集. (1)λ属于P集合(λ是空字符串): (2)如果α,β都属于P,则(α)β 也属于P. 如果现在有个空字符串(C0=1)和一对括号(C1=1),则C2=C0C1 + C1C0.归纳结果则为:Cn+1

布斯乘法Booth's multiplication algorithm from wikipedia

Booth's multiplication algorithm is a multiplication algorithm that multiplies two signed binary numbers in two's complement notation. The algorithm was invented by Andrew Donald Booth in 1950 while doing research on crystallography at Birkbeck Colle

javascript 大数值数据运算

javascript数字运算结果不准确: 1.浮点型数字进行运算时,基本四则运算结果都可能不准确,一般是把浮点型数据转换为整型运算,然后在还原处理. 这种情况下可以用一些常用转换方法计算,如下: 1 /** 2 * 加法运算 3 */ 4 function numAdd(num1, num2) { 5 var baseNum, baseNum1, baseNum2; 6 try { 7 baseNum1 = num1.toString().split(".")[1].length; 8

基于 CPython 解释器,为你深度解析为什么Python中整型不会溢出

前言 本次分析基于 CPython 解释器,python3.x版本 在python2时代,整型有 int 类型和 long 长整型,长整型不存在溢出问题,即可以存放任意大小的整数.在python3后,统一使用了长整型.这也是吸引科研人员的一部分了,适合大数据运算,不会溢出,也不会有其他语言那样还分短整型,整型,长整型...因此python就降低其他行业的学习门槛了. 那么,不溢出的整型实现上是否可行呢? 不溢出的整型的可行性 尽管在 C 语言中,整型所表示的大小是有范围的,但是 python 代

Multiplication algorithm

A multiplication algorithm is an algorithm (or method) to multiply two numbers. Depending on the size of the numbers, different algorithms are in use. Efficient multiplication algorithms have existed since the advent of the decimal system.

HDU 1517 A Multiplication Game 博弈

A Multiplication Game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 6202    Accepted Submission(s): 3532 Problem Description Stan and Ollie play the game of multiplication by multiplying an in

Strassen algorithm(O(n^lg7))

Let A, B be two square matrices over a ring R. We want to calculate the matrix product C as {\displaystyle \mathbf {C} =\mathbf {A} \mathbf {B} \qquad \mathbf {A} ,\mathbf {B} ,\mathbf {C} \in R^{2^{n}\times 2^{n}}} If the matrices A, B are not of ty

ACDream 1213 Matrix Multiplication (01矩阵处理)

Matrix Multiplication Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submit Statistic Next Problem Problem Description Let us consider undirected graph G = {V; E} which has N vertices and M edges. Incidence matrix of

POJ1651——Multiplication Puzzle

Multiplication Puzzle Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6511   Accepted: 3964 Description The multiplication puzzle is played with a row of cards, each containing a single positive integer. During the move player takes one