当前课程知识点:算法设计与分析 > 5 Divide and Conquer > 5.4 Integer Multiplication > Integer Multiplication
下面 我们来看一个最基本的计算问题
整数乘法
在所有的计算问题中
最基本的运算是加法
给定两个n位的整数a和b
计算a加b
通过按位相加的运算
我们可以用O(n)次运算得到它们的和
这里一次运算指的是一位数的运算
这里我们给的例子是二进制的
但是它与十进制的运算没有本质的区别
我们再来看一下乘法
给定两个n位的整数a和b
计算a乘以b
我们用小学算术的竖式乘法
用O(n^2)次的一位数乘法
和O(n^2)次的一位数加法
可以得到乘积
下面尝试用分治算法来进行求解
我们可以把x和y分别划分为高位和低位
令x的前n/2位为高位 值为x_1
后n/2位为低位 值为x_0
相应的y的高位为y_1 低位y_0
我们可以把xy的乘积按照高低位展开
得到xy=2nx_1y_1+2n/2(x_1y_0+x_0y_1)+x_0y_0
我们把原来一个乘积
分解为4个乘积的计算
每个乘积中
问题的规模都是原来的一半
我们分析一下算法所需要的运行时间
T(n)=4T(n/2)再加上合并 转换
所需要的时间Θ(n)
我们可以得到T(n)=Θ(n^2)
我们可以把刚才的运算稍作改变
在xy的展开式中
我们保持高位和低位不变
分别记为A和C
对于中间项x_1y_0+x_0y_1
可以写为(x_1+x_0)(y_1+y_0)-(x_1y_1+x_0y_0)
我们只需要计算一个新的乘积(x_1+x_0) (y_1+y_0)
我们把它记为B
原来的算法需要计算4个乘积
而现在只需要计算3个乘积
62年发现了这个结果
对于两个n位数的乘法
用O(n^1.585)次方的运算
可以实现两个n位整数的乘法
算法的运算时间T(n)≤3T(n/2)+
加 减 合并 转换所需要的时间Θ(n)
可以得到T(n)=O(n^log 3)=O(n^1.585)
递归运算所需要的时间T(n)
可以用归纳法或者是递归树的方法来得到
-1.1 Introduction
-1.2 A First Problem: Stable Matching
--A First Problem: Stable Matching
-1.3 Gale-Shapley Algorithm
-1.4 Understanding Gale-Shapley Algorithm
--Understanding Gale-Shapley Algorithm
-Homework1
-Lecture note 1
--Lecture note 1 Introduction of Algorithm
-2.1 Computational Tractability
-2.2 Asymptotic Order of Growth
-2.3 A Survey of Common Running Times
--A Survey of Common Running Times
-Homework2
-Lecture note 2
--Lecture note 2 Basics of Algorithm Analysis
-3.1 Basic Definitions and Applications
--Basic Definitions and Applications
-3.2 Graph Traversal
-3.3 Testing Bipartiteness
-3.4 Connectivity in Directed Graphs
--Connectivity in Directed Graphs
-3.5 DAG and Topological Ordering
--DAG and Topological Ordering
-Homework3
-Lecture note 3
-4.1 Coin Changing
-4.2 Interval Scheduling
-4.3 Interval Partitioning
-4.4 Scheduling to Minimize Lateness
--Scheduling to Minimize Lateness
-4.5 Optimal Caching
-4.6 Shortest Paths in a Graph
-4.7 Minimum Spanning Tree
-4.8 Correctness of Algorithms
-4.9 Clustering
-Homework4
-Lecture note 4
--Lecture note 4 Greedy Algorithms
-5.1 Mergesort
-5.2 Counting Inversions
-5.3 Closest Pair of Points
-5.4 Integer Multiplication
-5.5 Matrix Multiplication
--Video
-5.6 Convolution and FFT
-5.7 FFT
--FFT
-5.8 Inverse DFT
-Homework5
-Lecture note 5
--Lecture note 5 Divide and Conquer
-6.1 Weighted Interval Scheduling
--Weighted Interval Scheduling
-6.2 Segmented Least Squares
-6.3 Knapsack Problem
-6.4 RNA Secondary Structure
-6.5 Sequence Alignment
-6.6 Shortest Paths
-Homework6
-Lecture note 6
--Lecture note 6 Dynamic Programming
-7.1 Flows and Cuts
-7.2 Minimum Cut and Maximum Flow
--Minimum Cut and Maximum Flow
-7.3 Ford-Fulkerson Algorithm
-7.4 Choosing Good Augmenting Paths
--Choosing Good Augmenting Paths
-7.5 Bipartite Matching
-Homework7
-Lecture note 7
-8.1 Polynomial-Time Reductions
-8.2 Basic Reduction Strategies I
--Basic Reduction Strategies I
-8.3 Basic Reduction Strategies II
--Basic Reduction Strategies II
-8.4 Definition of NP
-8.5 Problems in NP
-8.6 NP-Completeness
-8.7 Sequencing Problems
-8.8 Numerical Problems
-8.9 co-NP and the Asymmetry of NP
--co-NP and the Asymmetry of NP
-Homework8
-Lecture note 8
--Lecture note 8 NP and Computational Intractability
-9.1 Load Balancing
-9.2 Center Selection
-9.3 The Pricing Method: Vertex Cover
--The Pricing Method: Vertex Cover
-9.4 LP Rounding: Vertex Cover
-9.5 Knapsack Problem
-Homework9
-Lecture note 9
--Lecture note 9 Approximation Algorithms
-10.1 Landscape of an Optimization Problem
--Landscape of an Optimization Problem
-10.2 Maximum Cut
-10.3 Nash Equilibria
-10.4 Price of Stability
-Homework10
-Lecture note 10
--Lecture note 10 Local Search
-11.1 Contention Resolution
-11.2 Linearity of Expectation
-11.3 MAX 3-SAT
-11.4 Chernoff Bounds
-Homework11
-Lecture note 11
--Lecture note 11 Randomized Algorithms
-Exam