首页 > 编程语言 >算法篇--贪心算法

算法篇--贪心算法

时间:2022-12-24 20:56:05浏览次数:37  
标签:问题 -- 选择 算法 最优 全局 贪心

贪心算法

 

一、算法思想

贪心算法(Greedy Alogorithm)又叫登山算法,它的根本思想是逐步到达山顶,即逐步获得最优解,是解决最优化问题时的一种简单但是适用范围有限的策略。

贪心算法没有固定的框架,算法设计的关键是贪婪策略的选择。贪心策略要无后向性,也就是说某状态以后的过程不会影响以前的状态,至于当前状态有关。

贪心算法是对某些求解最优解问题的最简单、最迅速的技术。某些问题的最优解可以通过一系列的最优的选择即贪心选择来达到。但局部最优并不总能获得整体最优解,但通常能获得近似最优解。

在每一步贪心选择中,只考虑当前对自己最有利的选择,而不去考虑在后面看来这种选择是否合理。

贪心算法使用基本步骤:
1.从问题的某个初始解出发
2.采用循环语句,当可以向求解目标前进一步时,就根据局部最优策略,得到一个不分解,缩小问题的范围或规模。
3.将所有的部分解综合起来,得到问题的最终解。

 

贪心算法的原理是通过局部最优来达到全局最优,采用的是逐步构造最优解的方法。在每个阶段,都做出一个看上去最优的,决策一旦做出,就不再更改。

要选出最优解可不是一件容易的事,要证明局部最优为全局最优,要进行数学证明,否则就不能说明为全局最优。

很多问题表面上看来用贪心算法可以找到最优解,实际上却把最优解给漏掉了。这就像现实生活中的“贪小便宜吃大亏”。所以我们在解决问题的时候,一定要谨慎使用贪心算法,一定要注意这个问题适不适合采用贪心算法。

贪心算法很多时候并不能达到全局最优,为什么我们还要使用它呢?

因为在很多大规模问题中,寻找最优解是一件相当费时耗力的事情,有时候付出大量人力物力财力后,回报并不与投入成正比。在这个时候选择相对最优的贪心算法就比较经济可行了。有的问题对最优的要求不是很高,在充分衡量付出和回报后,选择贪心算法未尝不是一种不错的选择呢。

 

该算法存在的问题
1.不能保证求得的最后解是最佳的
2.不能用来求最大值或最小值的问题
3.只能求满足某些约束条件的可行解的范围

 

二、选择排序

 1 #include <iostream>
 2 #include <cmath>
 3 using namespace std;
 4 
 5 int n, i, j, a[2000];
 6 
 7 int main()
 8 {
 9     cin >> n;
10     for (i = 1; i <= n; i++)
11         cin >> a[i];       
12 
13     for (i = 1; i < n; i++)        
14         for (j = i + 1; j <= n; j++)
15             if (a[i] > a[j])        
16                 swap(a[i], a[j]);     
17 
18     for (i = 1; i <= n; i++)
19         cout << a[i] << " ";       
20 
21     return 0;     
22 }

 

 


————————————————
原文链接:https://blog.csdn.net/weixin_49370884/article/details/126247776

 

标签:问题,--,选择,算法,最优,全局,贪心
From: https://www.cnblogs.com/Gaowaly/p/17003370.html

相关文章

  • saltstack部署方式问题及解决
    1、使用master连接mysql数据库,这种方式master要先收集所有minion的数据,再入到mysql数据库,master压力会增大,而且原本minion产生的数据入库要经过master中转,不推荐使用这种方......
  • 记录一次win10修复|System Failed to Initialize In Windows|CBSLog
    起因:系统初始化失败,尝试使用如下命令行修复sfc/SCANNOW生成CBS日志,可以搜索关键字“Couldnot”定位到问题行关闭联想锁屏后解决cmd问题最终退出杀软后成功安装参......
  • 虚拟机升级python到3.8
    #确认是否存在gcc环境,没有则安装,之后编译python需要使用gcc-vyum-yinstallgcc-c++#安装zlib,否则can'tdecompressdata;zlibnotavailableuminstallzlib*#......
  • SAP UI5 加载本地并不存在的 PDF 文件的错误处理
    这个_onLoadListener函数什么时候注册的呢?iframe完成加载之后,就触发这个load事件注册的处理函数:PDFViewer.prototype.onAfterRendering=function(){ varf......
  • 基于 XML 的声明式事务控制
    环境搭建1、导入依赖<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><v......
  • SAP Product Lifecycle Costing 里的 Costing Sheet 成本核算表
    有朋友在我的知识星球里向我提问:请您帮忙讲一下这个AP0100的costingsheetrows这里都表示什么意思吗?比如row10、baseZ010、overhead啥、描述、from、torow、credit都......
  • SAP ERP 里的 Costing Sheet 成本核算表
    有朋友在我的知识星球里向我提问:请您帮忙讲一下这个AP0100的costingsheetrows这里都表示什么意思吗?比如row10、baseZ010、overhead啥、描述、from、torow、credit都......
  • 2022.12.24周总结
    1、Redis支持哪几种数据类型?String、List、Set、SortedSet、hashes2、Redis主要消耗什么物理资源?Redis是一种基于内存高性能的数据库---主要依赖于内存3、Redis有哪......
  • ListView用法及BaseAdapter详解
    1.先上代码布局部分:items.xml<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout......
  • WSL2使用桥接网络,并指定IP
    前言微软终于解决了宇宙级难题了,一直以来的WSL2每次启动IP都是动态分配的,并且是NAT的网络。当然网上对此也有一些解决方案,编写脚本在启动时修改,但是太麻烦了,这次很完美的......