贪婪算法:
1、不追求最优解,故不穷举所有可能性,故效率高;
2、在某些情况,会成为最优解,如找钱时要求纸币数量最少。
求最小生成树的Prim算法和Kruskal算法都是漂亮的贪心算法。
马踏棋盘、背包装重的场景
#include <iostream>
#include <string>
using namespace std;
int greedy(int tag, int *p, int size);
int main(int argc, char *argv[])
{
int weight[10] = {90,80,70,60,50,40,30,20,10,5};
cout << greedy(225, weight, 10) << endl;
return 0;
}
int greedy(int tag, int *p, int size)
{
// 假设数组P由降序排列
int count = 0;
for (int i = 0; i < size; i++)
{
if (tag >= p[i])
{
cout << i << ":" << p[i] << endl;
count += p[i];
tag -= p[i];
}
}
return count;
}
分享到:
相关推荐
在一系列数字中,两玩家轮流从两端取数,目标是使自己获取的数字总和最大化。贪心算法在此类问题中表现为总是选择当前最大值,但这并不总是最优策略,需结合具体规则判断。 3. **均分纸牌问题** 针对多堆纸牌的...
然而,它的有效性取决于问题的特性,对于需要全局最优解且局部最优解不能保证全局最优的问题,贪心算法可能不是最佳选择。在实际应用中,需要根据问题的具体情况判断是否适合使用贪心算法,并结合其他方法(如动态...
这个问题有多种变体,如0-1背包问题(每件物品只能取或不取)、完全背包问题(每件物品可以取无限次)和多重背包问题(每件物品有限定数量可取)。 【贪心法】是解决背包问题的一种策略,它在每一步选择当前最优的...
题目1:设 n 为一自然数,n 可以分解成若干个不同的自然数的和,这样的分法有很多种,比如 n=10, 10 可以分解为:10=5+4+1; 10=5+3+2; 10+9+1; 10=8+2; 10=7+3; 10=6+4;10=7+2+1; 10=6+3+1;…。在所有这些分法中,各...
贪心策略,如按物品价值与重量比例选取,不能保证得到最大总价值,因为最优解可能需要牺牲一些高价值但重的物品以容纳更多的低价值但轻的物品。 总的来说,贪心算法在某些特定场景下能提供高效且接近最优的解决方案...
贪心算法的解决思路是首先计算每种物品的单位价值,然后按照单位价值的非增次序将物品一一装包,直到某一 i 物品放不下时,取一种能获得最大增量的物品,将它(或其一部分)放入背包,而使最后一次装包也符合量度...
贪心法是计算机科学中的一种优化策略,它在每一步选择局部最优解,期望通过一系列局部最优解最终得到全局最优解。...这些小程序是学习和理解贪心算法的良好实践资源,同时也为算法设计和优化提供了一个有价值的起点。
- 然后,对于每一个物品 `i`,计算在包含和不包含该物品时的最大价值,并取其中较大者作为更新后的最大价值。 3. **主函数流程**: - 输入物品数量 `n` 和背包容量 `c`。 - 分别输入每个物品的价值和重量。 - ...
综上所述,贪心算法在多种场景中都有广泛的应用,包括但不限于活动安排、背包问题、最优装载、单源最短路径、找零钱和多机调度等。通过合理地设计贪心策略,我们可以高效地解决这些问题,并得到较好的解决方案。
2. **分数拆分**:根据贪心策略,我们每次取尽可能大的单位分数,直到总和等于输入的分数。这里的关键是如何找到“尽可能大”的单位分数。可以设定一个循环,每次减去当前最大的未使用的单位分数,直到无法继续减...
然而,贪心算法并不能保证在所有情况下都能得到全局最优解,它的有效性取决于问题本身的特性。 - **贪心选择性质**:在每个阶段都做出在当前状态下看来最优的选择。 - **最优子结构性质**:问题的最优解包含着其子...
0-1背包问题是一个经典的组合优化问题,它的目标是在容量有限的背包中放入物品,使得背包中的物品总价值最大,但每个物品只能被取走或不取,不能分割。 0-1背包问题的定义如下:假设我们有一组物品,每件物品都有...
会议安排(贪心算法和动态规划) 会议安排问题是计算机科学中的一种经典问题,目的是在一系列活动中选择...会议安排问题可以使用贪心算法和动态规划两种方法来解决,每种方法都有其优缺,选择哪种方法取决于实际情况。
### 背包问题与贪心算法 #### 一、问题背景 背包问题是一类经典的组合优化问题,在计算机科学和运筹学中有着广泛的应用。这类问题通常涉及到资源分配、物品选择等场景,旨在通过最优策略来达到某种目标的最大化或...
在提供的压缩包文件“背包问题”中,可能包含了示例代码或者练习题,用于帮助理解和实践贪心算法解决部分背包问题。通过分析和运行这些代码,你可以更深入地了解如何将贪心策略应用于实际问题中。 总的来说,贪心...
然而,每种排序方式都有其适用场景,选择哪种方式取决于具体的问题背景和需求。此外,本篇代码还为初学者提供了一个很好的学习起点,可以通过修改和扩展代码,探索更多关于背包问题的解决方案。
贪心算法的思想是,每次选择度数最大的顶点 v,把它加入到 V1 中,并把 v 关联的边从 E 中删去,直到 E 为空为止。 贪心算法的性能分析表明,它的时间复杂度是关于 n 的多项式,对于某些 NP-困难问题确是有效的。...
在这个问题中,每种物品都有一个重量和一个价值,且每种物品只能被取走0个或1个。贪心算法是一种解决问题的方法,它在每一步都采取局部最优解,期望最终能得到全局最优解。在C#编程语言中,我们可以利用贪心算法来...
- **适用范围有限**:并非所有问题都适用于贪心算法,其有效性取决于问题本身是否具备“贪心选择性质”和“最优子结构”两个特性。 - **可能不是全局最优**:贪心算法得到的结果不一定是全局最优解,尤其是在需要...