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

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的更多相关文章

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

    很多人不喜欢√2的表达,他们认为它不是一个数. 一.卡塔兰数 Catalan numbers 在数方面上,有个著名的数叫卡塔兰数 Catalan numbers,它是组合数学中一个常在各种计数问题中出 ...

  2. Google Interview University - 坚持完成这套学习手册,你就可以去 Google 面试了

    作者:Glowin链接:https://zhuanlan.zhihu.com/p/22881223来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 原文地址:Google ...

  3. Converting from Decimal Notation to Binary Notation for Fractions

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION Therefore, the conver ...

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

    前言 本次分析基于 CPython 解释器,python3.x版本 在python2时代,整型有 int 类型和 long 长整型,长整型不存在溢出问题,即可以存放任意大小的整数.在python3后, ...

  5. 《python解释器源码剖析》第2章--python中的int对象

    2.0 序 在所有的python内建对象中,整数对象是最简单的对象.从对python对象机制的剖析来看,整数对象是一个非常好的切入点.那么下面就开始剖析整数对象的实现机制 2.1 初识PyLongOb ...

  6. Booth Multiplication Algorithm [ASM-MIPS]

    A typical implementation Booth's algorithm can be implemented by repeatedly adding (with ordinary un ...

  7. CSharp Algorithm - Replace multiplication operator with a method

    /* Author: Jiangong SUN */ How to replace multiplication operation with a method? For example, you h ...

  8. algorithm@ Divide two integers without using multiplication, division and mod operator. (Bit Operation)

    #include<bits/stdc++.h> using namespace std; int divide(int dividend, int divisor) { long long ...

  9. Algorithm: 多项式乘法 Polynomial Multiplication: 快速傅里叶变换 FFT / 快速数论变换 NTT

    Intro: 本篇博客将会从朴素乘法讲起,经过分治乘法,到达FFT和NTT 旨在能够让读者(也让自己)充分理解其思想 模板题入口:洛谷 P3803 [模板]多项式乘法(FFT) 朴素乘法 约定:两个多 ...

随机推荐

  1. Scrapyd+Gerapy部署Scrapy爬虫进行可视化管理

    Scrapy是一个流行的爬虫框架,利用Scrapyd,可以将其部署在远程服务端运行,并通过命令对爬虫进行管理,而Gerapy为我们提供了精美的UI,可以在web页面上直接点击操作,管理部署在scrap ...

  2. Laya鼠标事件阅读

    点击事件核心类:MouseManager和TouchManager. MouseManager负责收集相关事件,进行捕获阶段和目标阶段. TouchManger负责处理和分发事件,进行冒泡阶段. 捕获 ...

  3. 小程序swiper组件高度自适应【转载】

    最近在做小程序开发,复制官方文档上的swiper组件实测后发现,图片不能自适应.网上找了几个版本测试都发现存在一些小问题,目前这个版本本人实测是最好用的.记录一下,方便日后使用. 感谢原创大神的帮助, ...

  4. Redis源码阅读(二)高可用设计——复制

    Redis源码阅读(二)高可用设计-复制 复制的概念:Redis的复制简单理解就是一个Redis服务器从另一台Redis服务器复制所有的Redis数据库数据,能保持两台Redis服务器的数据库数据一致 ...

  5. 用 C 语言描述几种排序算法

    排序算法是最基本且重要的一类算法,本文基于 VS2017,使用 C 语言来实现一些基本的排序算法. 一.选择排序 选择排序,先找到数组中最小的元素,然后将这个元素与数组的第一个元素位置互换(如果第一个 ...

  6. HBase集成(准备篇)

    HBase与Hadoop各版本对照表:http://hbase.apache.org/book.html#configuration Hadoop 2.7.1+ 对应HBase 1.2.X,1.3.X ...

  7. 对比网络模拟器软件——Cisco Packet Tracer、华为eNSP、H3C Cloud Lab

    1.软件介绍 1.1 Cisco Packet Tracer Cisco Packet Tracer(以下简称PT)是一款由思科公司开发的,为网络课程的初学者提供辅助教学的实验模拟器.使用者可以在该模 ...

  8. linux 修改终端颜色

    要想修改终端的颜色,可以使用修改PS1环境变量的方式,也可以通过命令setterm来进行设置. 一.PS1 转自:修改linux终端命令行颜色 1.PS1 要修改linux终端命令行颜色,我们需要用到 ...

  9. C# 爬虫小程序

    设计思路 主要基于Http Get请求网页数据,进行分析.涉及递归调用,多线程提高效率,守护线程等. 相关技术 抽象类 多线程 队列 Http Get请求 字符串解析 项目结构 AbsChain 职责 ...

  10. fzu 2082 过路费 (树链剖分+线段树 边权)

    Problem 2082 过路费 Accept: 887    Submit: 2881Time Limit: 1000 mSec    Memory Limit : 32768 KB  Proble ...