第7章_贪心算法

合集下载

贪心算法介绍

贪心算法介绍

贪心算法介绍贪心算法是一种常见的算法思想,它是指在算法的每一步都选择最优解,最终得到整个问题的最优解。

贪心算法通常需要满足两个基本条件:一是具有最优子结构,即局部最优解能够推导出全局最优解;二是贪心选择性质,即每一步选择都必须是最优的,不能回溯和改变。

贪心算法可以用到许多实际问题中,如货车配送问题、时间表制定问题等。

下面我们就以货车配送问题为例,来介绍贪心算法的应用。

如何最优地配送货物是物流运输中的一大难题。

在公司配送货物中,如果可以使用无限多的货车,那么货物的配送就没有任何限制。

但在实际运输工作中,有很多因素限制了货物的运输,如货车数量的限制、货车运输量的限制、配送路径限制等。

针对这些限制,我们需要一个智能程序来安排最优的货车配送路线。

具体问题如下:有N个订单需要尽快配送,每个订单需要的时间、数量和配送地址各不相同。

现在有M辆货车,每辆货车容量有限,配送距离也各不相同。

如何安排货车配送路线,使得所有订单都能尽快到达,且每辆货车的配送距离都小于等于其所能承载的最大距离?使用贪心算法解决货车配送问题,简单来说就是找到一个最优的配送节点,使得所有订单在该节点之前被配送。

可以按照以下步骤进行:1.将所有订单按照所需时间从小到大排序。

2.从第一个订单开始,依次将每个订单进行配送。

每辆货车都有一个所能承载的最大距离,因此需要判断当前订单所在的位置与该车的最大距离之间的距离,若小于该距离,则将该订单配送到该点;若大于该距离,则该点无法进行配送。

3.如果有订单无法被配送,则需要使用一辆新的货车进行配送。

每辆货车的容量都是有限的,因此需要对当前车辆的剩余承载容量进行判断,若能承载当前订单,则进行配送,否则该订单需要等待下一辆货车进行配送。

4.重复以上步骤,直至所有订单都被配送。

以上就是一个基本的贪心算法求解货车配送问题。

当然,实际问题中还可能会存在很多的变量和限制条件,需要根据实际情况进行调整和优化。

贪心算法的优势在于它具有较高的效率和速度,因此可以应用到很多实际问题中。

贪心算法思路

贪心算法思路

贪心算法思路贪心算法:让每一步都尽可能地优化贪心算法是一种常用的算法思路,其核心思想是在每一步中都选择当前状态下最优的选择,以期望达到全局最优解。

贪心算法在大量的实际应用场景中得到了广泛的应用,如最小生成树、最短路径、背包问题等,其简单性和高效性也让它成为了算法竞赛中的常客。

贪心算法的基本思路贪心算法的基本思路就是每次都选择当前状态下的最优解,不考虑前面的选择对后面结果的影响。

贪心算法的优点在于简单易懂,容易实现,同时有较高的效率。

但是贪心算法也有其缺点,在某些情况下可能会得到次优解或者无法得到解。

贪心算法的实现步骤贪心算法的实现步骤一般可以分为以下几个步骤:1. 建立数学模型:将问题抽象成数学模型,明确问题的输入、输出和约束条件。

2. 确定贪心选择策略:在每一步中,都选择当前状态下的最优解,使得每一步都尽可能地优化。

3. 设计贪心算法:根据贪心选择策略,设计出贪心算法的具体实现,包括算法的数据结构和运算规则等。

4. 证明算法正确性:对算法正确性进行证明,证明算法得到的解一定是最优解。

5. 分析算法时间复杂度:对算法的时间复杂度进行分析,评估算法的效率和可行性。

贪心算法的应用场景贪心算法的应用场景非常广泛,几乎可以应用于任何需要求解最优解的问题。

以下是一些常见的应用场景:1. 最小生成树:在一个无向连通图中,找到一棵生成树,使得所有边的权值之和最小。

2. 最短路径:在一个有向图中,找到从一个起点到所有其他节点的最短路径。

3. 背包问题:有一组物品和一个背包,每个物品有自己的重量和价值,在不超过背包容量的情况下,找到一组物品,使得它们的价值之和最大。

4. 区间调度问题:有若干个区间,每个区间有一个起始时间和一个结束时间,选出尽可能多的区间,使得它们不重叠。

5. 活动选择问题:有若干个活动,每个活动有一个起始时间和一个结束时间,选出尽可能多的活动,使得它们不重叠。

贪心算法的优缺点贪心算法的优点在于简单易懂,容易实现,同时有较高的效率,适用于解决一些具有贪心选择性质的问题。

贪心算法程序设计

贪心算法程序设计

贪心算法程序设计贪心算法程序设计1. 什么是贪心算法贪心算法(Greedy Algorithm)是一种常见的算法思想,它在每一步选择中都采取当前状态下的最优选择,从而希望最终达到全局最优解。

贪心算法的核心思想是局部最优解能导致全局最优解。

2. 贪心算法的基本步骤贪心算法的基本步骤如下:1. 定义问题的优化目标。

2. 将问题分解成子问题。

3. 选择当前最优的子问题解,将子问题的解合并成原问题的解。

4. 检查是否达到了问题的优化目标,如果没有达到,则回到第二步,继续寻找下一个最优子问题解。

5. 在所有子问题解合并成原问题解后,得到问题的最优解。

3. 贪心算法的应用场景贪心算法的应用非常广泛,几乎可以用于解决各种优化问题。

以下几个常见的应用场景:1. 零钱找零问题:给定一定面额的纸币和硬币,如何找零使得所需纸币和硬币的数量最小?2. 区间调度问题:给定一些活动的开始时间和结束时间,如何安排活动使得可以办理的活动数量最大?3. 背包问题:给定一些具有重量和价值的物品,如何选择物品使得背包的总价值最大?4. 最小树问题:给定一个带权无向图,如何找到一棵树,使得它的边权之和最小?5. 哈夫曼编码问题:给定一组字符和相应的频率,如何构造一个满足最低编码长度限制的二进制编码?4. 贪心算法的优缺点贪心算法的优点是简单、高效,可以快速得到一个近似最优解。

而且对于一些问题,贪心算法能够得到全局最优解。

贪心算法的缺点在于它不一定能够得到全局最优解,因为在每一步只考虑局部最优解,无法回溯到之前的选择。

5. 贪心算法的程序设计在使用贪心算法进行程序设计时,通常需要以下几个步骤:1. 定义问题的优化目标。

2. 将问题分解成子问题,并设计子问题的解决方案。

3. 设计贪心选择策略,选择局部最优解。

4. 设计贪心算法的递推或迭代公式。

5. 判断贪心算法是否能够得到全局最优解。

6. 编写程序实现贪心算法。

6.贪心算法是一种常见的算法思想,它在每一步选择中都采取当前状态下的最优选择,从而希望最终达到全局最优解。

贪心算法基本步骤

贪心算法基本步骤

贪心算法基本步骤贪心算法是一种非常常用的算法思想,广泛应用于算法设计中。

本文将介绍贪心算法的基本步骤、实现方式、应用场景以及优缺点。

一、基本步骤贪心算法的基本步骤可概括为:定义最优解的性质->利用贪心策略获得局部最优解->将局部最优解合并成一个整体最优解。

具体来说,一般包括以下几个步骤:1. 确定问题的最优解性质:要知道问题的最优解应该具有怎样的性质或特征,这些性质可以用于判断一个解是否符合规则或结果是否符合要求。

2. 构造候选解集:根据最优解的性质,不断构造可行的候选解集合,并通过一定的方法筛选出其中的解。

3. 选择最优解:从候选解集中选择一个最优解。

4. 验证最优解:通过验证最优解是否合法(满足约束条件)以及是否为问题的最优解,来验证贪心策略的正确性。

二、实现方式贪心算法的实现方式是比较灵活的,有些问题可以通过贪心策略来解决,有些则不行。

一般而言,如果问题的最优解具有贪心选择性质(即每一步的局部最优解能导致全局最优解),则采用贪心策略是可行的。

对于一些场景,我们可以通过规律来得到贪心策略。

例如:1. 集合覆盖问题:从未被覆盖的地方中选择一个覆盖点集最大的点,并删除所有覆盖的集合;2. 分数背包问题:选择性价比最高的物品,先吸纳尽量多的物品,再考虑其他物品。

三、应用场景1. 背包问题:针对背包问题和其变种,常见的贪心策略有分数背包(与完全和01背包有区别)和完全背包问题;2. 活动安排问题:在一些课程、项目或活动间选择,使得能够安排最多活动;3. 区间选择问题:在一些区间间选择相互不重叠的区间,使得能够选出最大的区间数;4. 集合覆盖问题:在一些集合中选择最少的集合,使得能够覆盖所有元素。

四、优缺点优点:1. 算法简单:贪心算法通常比较简单,易于理解和实现;2. 运算速度快:其时间复杂度一般较低,运算速度很快;3. 可以作为其他算法的优化:贪心策略可以应用于其他算法的优化中。

缺点:1. 不一定能够得到最优解:贪心策略仅考虑当前的局部最优解,对于全局最优解可能产生影响;2. 单一性:贪心算法的结果是唯一的,难以应对变化条件的需要,一旦局部最优解不满足当前的情况,算法就会失去原先的效果;3. 实现困难:对于有些问题,贪心算法并不是很好实现,涉及到更多的问题分析和模型的构造。

贪心算法知识点总结

贪心算法知识点总结

贪心算法知识点总结1. 基本原理贪心算法的基本原理是每一步都选择当前状态下的最优解,以期望最终得到全局最优解。

具体来说,贪心算法通常可以分为以下几个步骤:1)从问题的某个初始解出发2)采用一种迭代的方式,逐步将初始解进行优化3)每一步都是基于当前状态的最优选择来进行优化4)直到无法再进行优化,得到问题的最优解由于贪心算法每一步都要选择局部最优解,因此贪心算法通常具有高效性。

然而,贪心算法并不适用于所有问题,其结果不一定是全局最优解。

因此,在使用贪心算法时需要注意问题的特性和约束条件,以免得到错误的结果。

2. 适用情况贪心算法通常适用于满足以下条件的问题:1)问题的最优解满足“最优子结构”性质:即问题的最优解包含了其子问题的最优解2)问题的求解过程具有“贪心选择性”:即每一步都选择当前状态下的最优解,并不需要考虑未来的后果3)问题的约束条件可以通过局部最优选择满足全局最优解:即问题的解空间中存在一些局部最优解,可以通过一系列的局部最优解构建全局最优解在实际应用中,贪心算法通常用于求解最优化问题,如最小生成树、最短路径、任务调度等问题。

由于贪心算法的高效性,它通常能够在较短的时间内得到较为接近最优解的结果。

然而,贪心算法并不适用于所有问题,对于一些问题,贪心算法将得到错误的结果。

因此,在使用贪心算法时需要谨慎选择问题类型和约束条件,以避免错误的结果。

3. 贪心算法实例在下面的部分,我们将介绍一些常见的贪心算法实例,包括背包问题、活动安排问题、霍夫曼编码等。

3.1 背包问题背包问题是一个经典的优化问题,它包括0-1背包问题、分数背包问题等多种类型。

在0-1背包问题中,给定n种物品和一个容量为C的背包,每种物品i的重量为w[i],价值为v[i],求在不超过背包容量的情况下,如何选择物品放入背包,可以使得背包中的总价值最大。

对于0-1背包问题,贪心算法通常不能得到最优解。

然而,在分数背包问题中,贪心算法通常可以得到近似的最优解。

《贪心算法》PPT课件

《贪心算法》PPT课件

{x1,x2,x3} {1,2/15,0} { 0,2/3,1} {0,1,1/2} {...}
n
wixi
20
i1
n
vixi
i1
20
20
...
31
...
[算法思路]1).将各物体按单位价值由高到低排序. 2).取价值最高者放入背包. 3).计算背包剩余空间. 4).在剩余物体中取价值最高者放入背包. 若背包剩余容量=0或物体全部装入背包为止
这种策略下的量度是已装入物品的累计效益值与所用 容量之比。
(v2/w2 , v3/w3 , v1/w1 )=(24/15,15/10, 25/18) 先装入重量为15的物品2,在装入重量为5的物品3, ∑pixi =24+15*5/10=31.5。此结果为最优解。
算法设计与分析 > 贪心算法
[例] n=3,c=20 (v1,v2,v3)=(25,24,15),(w1,w2,w3)=(18,15,10)
[常见应用]背包问题,最小生成树,最短路径,作业调度等等 [算法优点]求解速度快,时间复杂性有较低的阶. [算法缺点]需证明是最优解.
[适用问题] 具备贪心选择和最优子结构性质的最优化问题 贪心选择性质:整体的最优解可通过一系列局部最优解达到,即
贪心选择到达。
贪心算法通常以自顶向下的方式进行,以迭代的方式作出相
精选ppt13最优化描述找一个n元向量x44背包问题knapsackproblemmax问题描述设有n个物体和一个背包物体i的重量为w1装入背包则具有价值为v目标是找到一个方案使放入背包的物体总价值最高贪心算法精选ppt141652425121502028202312031011220315算法设计与分析贪心算法精选ppt151用贪心策略求解背包问题时首先要选出最优的度量标准

贪 心 算 法

贪 心 算 法

贪心算法及几个常用的例题贪心算法:一、基本概念:所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。

也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。

贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。

必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。

所以对所采用的贪心策略一定要仔细分析其是否满足无后效性。

二、贪心算法的基本思路:1.建立数学模型来描述问题。

2.把求解的问题分成若干个子问题。

3.对每一子问题求解,得到子问题的局部最优解。

4.把子问题的解局部最优解合成原来解问题的一个解。

三、贪心算法适用的问题贪心策略适用的前提是:局部最优策略能导致产生全局最优解。

实际上,贪心算法适用的情况很少。

一般,对一个问题分析是否适用于贪心算法,可以先选择该问题下的几个实际数据进行分析,就可做出判断。

四、贪心算法的实现框架从问题的某一初始解出发;while (能朝给定总目标前进一步)利用可行的决策,求出可行解的一个解元素;由所有解元素组合成问题的一个可行解;五、贪心策略的选择因为用贪心算法只能通过解局部最优解的策略来达到全局最优解,因此,一定要注意判断问题是否适合采用贪心算法策略,找到的解是否一定是问题的最优解。

几个经典的例子:一、定义什么是贪心算法呢?所谓贪心算法是指,在对问题求解时,总是做出在当前看来最好的选择。

也就是说,不从整体最优解出发来考虑,它所做出的仅是在某种意义上的局部最优解。

贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题都能产生整体最优解或整体最优解的近似解。

贪心算法的基本思路如下:1. .建立数学模型来描述问题。

2. 把求解的问题分成若干个子问题。

3. 对每个子问题求解,得到每个子问题的局部最优解。

4. 把每个子问题的局部最优解合成为原来问题的一个解。

贪心算法PPT课件

贪心算法PPT课件
且有||B’-{k}||>||B-{1}||,这与假设2°矛盾。 ▌
安排方案
f1
B
安排方案
fk
B’
…… 共j个活动
可能 相同 不存在
……
可能
如果 B’包 含这 个活, 则B 一定 包含
9
(2) 时间复杂度分析: 因为排序过程可以在O(nlogn)时间内完成,而求最优活动子 集的过程只需O(n)次比较,因此这个算法的时间复杂度为 O(nlogn)。 (3) 贪心策略设计算法的一般特点
·选Si最小的,这样可以增大场地的利用率; ·选fi最小的,使得下一个活动可以更早开始。
由于活动的占用时间长度没有限制,因此后一选择更合理。
6
为了在每一次选择时取当前可以安排的活动中最早结束的活动,应首先把 n项活动按结束时间的先后进行升序排序。即,使f1≤f2≤…≤fn,然后在Si值 不小于当前时刻的活动中取fi值最小者。 算法:
·算法的设计比较简单; ·算法一般比较快速; ·算法的正确性一般不明显,需要论证;如果正确性不能保 证,那么它往往可以得到近似最优解。
10
5.2 背包(Knapsack)问题
1. 问题描述
已知:n个(应为n种)物体{1,2,…,n}与一个背包。物体i的重量 (或体积)为Wi>0,价值为Pi>0(i=1,2,…,n),背包容量为 M>0。
计算机算法 ——设计与分析导论
刘璟
1
Chapter 5. 贪心(Greedy)技术
❖ 5.1 贪心策略的思想 ❖ 5.2 背包(Knapsack)问题 ❖ 5.3 Huffman编码 ❖ 5.4 多机调度问题的近似解法 ❖ 5.5 单源最短路径的Dijkstra算法
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2016/6/28
Chapter 7 Greedy Method
4
7.1.1 贪心法的设计思想

什么是贪心算法?

贪心法目光短浅,只根据当前已有的信息做出选择,而 且一旦做出了选择,不管将来有什么结果,这个选择都 不会改变。 贪心算法总是作出在当前看来最好的选择。也就是说贪 心算法并不从整体最优考虑,它所作出的选择只是在某 种意义上的局部最优选择。虽然贪心算法不能对所有问 题都得到整体最优解,但对许多问题它能产生整体最优 解。在一些情况下,即使贪心算法不能得到整体最优解, 其最终结果却是最优解的很好近似。
2016/6/28 Chapter 7 Greedy Method 13
第7章 贪心算法
7.1 概 述
7.2 图问题中的贪心法
7.3 组合问题中的贪心法
阅读材料——贪心法的正确性证明
2016/6/28
Chapter 7 Greedy Method
14
7.2 图问题中的贪心法
7.2.1 TSP问题 7.2.2 图着色问题
Chapter 7 Greedy Method 16
2016/6/28
C=
∞ 3 3 2 6
3 3 2 6 ∞ 7 3 2 7 ∞ 2 5 3 2 ∞ 3 2 5 3 ∞
6 5
1
7.2.1 TSP问题
3 1 2 5 3 2 3 4 3 2
2
4
3
3
(a) 5城市的代价矩阵 1 5 2 5
(b) 城市1→城市4 1

求解:
选出1 张面值 <=4 元 6 角的最大面值的货币,即2 元; 选出1 张面值 <=2 元 6 角的最大面值的货币,即2 元; 选出1 张面值 <=6 角的最大面值的货币,即 5 角; 选出1 张面值 <=1 角的最大面值的货币,即 1 角; 总共付出 4 张货币。

2016/6/28 Chapter 8 Greedy Method 6
2016/6/28 Chapter 7 Greedy Method 8
7.1.1 贪心法的设计思想

与动态规划法的关系



动态规划法把一个复杂问题分解为若干相互重叠的子 问题,通过求解子问题形成的一系列决策得到原问题 的解; 贪心法把一个复杂问题分解为一系列较为简单的局部 最优选择,每一步选择都是对当前解的一个扩展,直 到获得问题的完整解; 动态规划法以自底向上的方式求解各个子问题,而贪 心法则通常以自顶向下的方式做出一系列的贪心选择。
5
4
2
3
(a) 5城市的代价矩阵
(b) 城市1→城市4 1
3 4 (c) 城市5→城市2 1 2 3 2 2
2
2
5 4
5 3 3 2 (f) 城市2回到出发城市1
4
2
4
2
(d) 城市4→城市3
(e) 城市3→城市5
最短链接贪心策略求解TSP问题的过程
2016/6/28 Chapter 7 Greedy Method 18
2016/6/28
2 (c) 城市4→城市3
1 2 5
2 7
3
5
5 4 2
2
2
5
2
3 2
4
2
3
4
2
3
(d) 城市3→城市5
(e) 城市5→城市2
(f) 城市2→城市1
最近邻点贪心策略求解TSP问题的过程
2016/6/28 Chapter 7 Greedy Method 17
7.2.1 TSP问题
C= ∞ 3 3 ∞ 3 7 2 3 6 2 3 7 ∞ 2 5 1 5 2 2 2 3 5 2 5 2 3 2 ∞ 3 6 2 5 3 ∞ 1 1 2 5 2 2 2

增加,这正体现了贪心法的设计思想。
2016/6/28
Chapter 7 Greedy Method
7
7.1.1 贪心法的设计思想



例:求解付款找零问题的贪心法 设货币面值为:3元、1元、8角、5角、1角 找零为:4.6元 求解: 选出1 张面值 <=4 元 6 角的最大面值的货币,即3 元; 选出1 张面值 <=1 元 6 角的最大面值的货币,即1 元; 选出1 张面值 <=6 角的最大面值的货币,即 5 角; 选出1 张面值 <=1 角的最大面值的货币,即 1 角; 总共付出 4 张货币(3元、1元、5角、1角) 但最优解:3张货币(3元、8角、8角) 如果一个问题的最优解只能用蛮力法得到,贪心法不失为 寻找近似解的一个较好方法
2016/6/28
Chapter 7 Greedy Method
9
7.1.2 一个简单的例子——埃及分数


[问题]古埃及人只用分子为1的分数,在表示一个真分数时, 将其分解为若干个埃及分数之和,如7/8表示为 1/2+1/3+1/24。怎么将一个真分数表示为最少的埃及 分数之和的形式? [想法]一个真分数的埃及分数表示不是唯一的,将一个真 分数表示为最少埃及分数之和的形式,其贪心策略是选择 真分数包含的最大埃及分数。如7/8为例,7/8>1/2,则 1/2是第一次贪心选择的结果;7/8-1/2=3/8>1/3,则 1/3是第二次贪心选择的结果;3/8-1/3=1/24,则1/24 是第三次贪心选择的结果。7/8=1/2+1/3+1/24
2016/6/28
Chapter 7 Greedy Method
22
7.2.1 TSP问题
设图G 有n 个顶点, w[n][n] 存储边上的代价,集合E‘存 储是候选集合中未选取的边,集合P 存储经过的边,最短链接 策略求解TSP 问题的算法如下:
算法7.3——最短链接策略求解TSP问题 1.P={ }; 2.E'=E; //候选集合,初始时为图中所有边 3.循环直到集合P中包含n-1条边 3.1 在E'中选取最短边(u, v); 3.2 E'=E'-{(u, v)}; 3.3 如果 (顶点 u 和v 在 P 中不连通 and 不产生分枝) 则P=P+{(u, v)};
2016/6/28
Chapter 7 Greedy Method
10
7.1.2 一个简单的例子——埃及分数

设真分数为A/B,B除以A的整数部分为C,余数为D,则: B=A*C+D (D<A) 即 B/A=C+D/A<C+1
则 A/B>1/(C+1)
即1/(C+1)即为真分数A/B包含的最大埃及分数。设E=C+1,
7.2.1 TSP问题
[算法1]设图G 有 n 个顶点,边上的代价存储在二维数组 w[n][n]中,集合V 存储图的顶点,集合 P 存储经过的边,最 近邻点策略求解 TSP 问题的算法如下:
算法 7.2——最近邻点 策略求解 TSP 问题
1. P={ };
//对应解集合S
2. V=V-{u0}; u=u0; //从顶点u0 出发 3. 循环直到集合P 中包含 n-1 条边 3.1 找与顶点 u 邻接的最小代价边(u, v), 并且v属于集合V; 3.2 P=P+{(u, v)}; 3.3 V=V-{v}; 3.4 u=v; //从顶点v出发继续求解
2016/6/28
Chapter 7 Greedy Method
12
7.1.2 一个简单的例子——埃及分数
void EgyptFraction(int A, int B) { int E,R; cout<<A<<“/”<<B<<“=”; do{ E=B/A+1; cout<<“1/”<<E<<“+”; A=A*E-B; B=B*E; R=CommFractor(B,A); //CommFractor为求最大公约数函数 if( R>1 ){ A=A/R; B=B/R; } }while( A>1); cout<<“1/”<<B<<endl; return; }

125431 代价:13
2016/6/28
Chapter 7 Greedy Method
20
7.2.1 TSP问题

当图中顶点个数较多并且各边的代价值分布比较均匀时, 最近邻点策略可以给出较好的近似解,不过,这个近似 解以何种程度近似于最优解,却难以保证。

例如,在图7.1中,如果增大边(2, 1)的代价,则总 代价只好随之增加,没有选择的余地。
由于
A/B-1/E=((A*E)-B)/(B*E)
这个分数可能存在公因子,所以需要化简,可将分子和分母同 时除以最大公约数。
2016/6/28 Chapter 7 Greedy Method 11
7.1.2 一个简单的例子——埃及分数

[算法]伪代码描述如下: 算法7.1:埃及分数EgyptFraction 输入:真分数的分子A和分母B 输出:最少的埃及分数之和 1. E=B/A+1; //E=C+1 2. 输出1/E; 3. A=A*E-B; B=B*E; 4. 求A和B的最大公约数R,如果R不为1,将A和B同时除以R 5. 如果A等于1,则输出1/B,算法结束;否则转步骤1
2016/6/28
Chapter 7 Greedy Method
19
7.2.1 TSP问题

算法分析1

时间复杂度
算法7.2的时间性能为O(n2),因为共进行n-1次贪心选择, 每一次选择都需要查找满足贪心条件的最短边。
相关文档
最新文档