当前课程知识点:算法设计与分析 > 4 Greedy Algorithms > 4.1 Coin Changing > Coin Changing
在这一章 我们学习贪婪算法
什么是贪婪算法呢
顾名思义 就是用贪婪的方式去求解问题
对于困难复杂的问题
我们经常把大问题拆分成小问题
化繁为简 化难为易
我们先来看一个例子
在超市里 我们经常遇到找零钱的问题
我们以美国的货币为例
来看一下
美国的硬币共有
一分 五分 一毛 两毛五 一元 五种
如何用最少数量的硬币
来支付一个给定的数额呢
比如要支付三毛四
我们可以用一个两毛五
一个五分 四个一分来支付
这种支付方式是最少数目的吗
我来看看收银员的算法
他是一步一步的来支付
每一步呢
支付当前可支付的最大面额的硬币
比如要支付2块8毛9
他呢 先支付一个一元
再支付一个一元
余下的八毛九
当前可支付的最大面额的硬币是两毛五
可以支付三个
再支付一个一毛
然后四个四分
我们先给出这个算法的伪代码
实际上我们处理的是更一般的情况
假设有n种硬币
我们先把这n种硬币按照它的面值
从小到大进行排列
令S是我们准备支付的硬币的集合
如果 目前要支付的金额x是大于零的
令k是当前面额不超过x的
最大面值的硬币
如果没有这样的硬币k 那么我们就返回无解
否则我们就支付这个硬币
并且把待支付的金额修改为x减去c_k
之后返回要支付硬币的集合S
这个算法是最优的吗
我们来证明
对于美国的硬币系统
包含一分 五分 一毛 两毛五 一元的情况
这个算法是最优的
我们对x进行归纳证明
当要支付的金额x介于ck和c_k+1之间
我们的算法将会支付硬币k
我们证明
任何的最优解中一定也包含硬币k
否则的话
她就需要用面值更小的硬币
取值c_1到c_k-1
来支付x的金额
下面的表格表明这种情况不会发生的
我们先来看一下
最优解它所具有的性质
在最优解中
一分钱的硬币数量一定不会超过四个
否则我们就可以用一个五分钱的硬币来替换
从而减少硬币的数目
五分钱硬币的数目不会超过一个
否则的话我们就可以用一毛钱的硬币
来做替换
五分钱和一毛钱的硬币数目不会超过两个
我们刚才说
五分钱的硬币数目不会超过一个
当有一个五分 两个一毛的情况
我们可以用一个两毛五的硬币来做替换
如果有三个一毛的硬币
我们可以用一个两毛五的硬币
和一个五分的硬币来做替换
另外 两毛五的硬币数量不会超过三个
否则 我们就可以用一元的硬币来做替换
有了这些性质
我们再来看一下c_k不同取值的情况
当c_k等于1
这已经是最小面额的硬币
不可能用更小面额的硬币来支付
当c_k等于5的时候
比它更小的面额的硬币是一分
而最优解中
一分的硬币最多有四个
所以呢 它至多能够支付四分钱
当c_k等于10的时候
比它更小面值的硬币最多能够支付
一个五分 四个一分 合计是九分
当c_k等于25的时候
比它更小面值的硬币最多能够支付
两个一毛 四个一分 合计二十四分
当c_k等于100的时候
用面值更小的硬币
最多可以支付三个两毛五
两个一毛 四个一分 合计九毛九分
所有这些可能的情况
能够支付的金额
都少于当前所要支付的金额
因此 最优解中一定包含c_k面值的硬币
然后再考虑x减去c_k
这是一个规模更小的问题
根据归纳法
我们得到所需的结论
我们证明了
收银员的算法
对于美国的硬币系统是正确的
但是当条件有一些改变以后
这个算法就不一定是最优的
我们来看一下美国的邮政系统的情况
美国的邮票面值分为一分 一毛
两毛一 三毛四 七毛
一元 三元五
十二元 两毛五 十五元
如果要支付的邮资是140分
按照我们收银员的算法
我们将支付一元 三毛四
以及六个一分
这总共需要七张邮票
而实际上最优解是两张七毛的邮票就足够了
-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