贪婪算法python实现

        贪婪算法(Greedy Algorithm)是一种解决问题的策略,它基于一种贪心的思想:在每一步选择中都采取当前状态下最好或最优的选择,从而希望最终能够得到全局最优解。

        其核心思想可以简单概括为“当前局部最优选择”,即在每一步选择中都选择对当前情况最有利的解决方案,而不考虑长远后果。这种贪心策略可能并不总是能够保证得到全局最优解,但在很多情况下,贪心算法能够产生一个接近最优解的解决方案。

        贪婪算法通常适用于满足某些特定条件的问题,例如具有贪心选择性质的问题,即局部最优解能够导致全局最优解。在这些问题中,贪婪算法的设计相对简单,且计算效率高。

具体来说,贪婪算法通常包含以下几个步骤:

  1. 问题建模: 将问题抽象为适合贪婪选择的形式。这通常涉及定义问题的目标和约束条件。

  2. 制定贪心选择策略: 确定每一步选择中的贪心策略,即如何做出当前最优的选择。

  3. 求解: 使用贪婪策略从问题的初始状态出发,逐步构建解决方案。

  4. 检查解决方案: 对得到的解决方案进行检查,以确保它满足问题的要求,并根据需要进行优化或调整。

        下面是一个简单的贪婪算法示例,解决了一个问题:找零钱问题。假设你有一堆面值为 1、5、10、25 美分的硬币,现在需要找零 n 美分,如何用最少的硬币数量找零?

def make_change(amount, coins):# 硬币面值按降序排序coins.sort(reverse=True)# 初始化找零结果列表change = []# 逐步贪婪选择最优解for coin in coins:# 计算当前硬币能找零的数量num_coins = amount // coin# 将该硬币添加到找零结果列表中change += [coin] * num_coins# 更新剩余需要找零的金额amount -= num_coins * coin# 如果找零完毕,则退出循环if amount == 0:breakreturn change# 示例:找零 63 美分
amount = 63
coins = [1, 5, 10, 25]
change = make_change(amount, coins)
print("找零 {} 美分需要的硬币数量为:{}".format(amount, len(change)))
print("具体的硬币面值为:", change)

        在这个示例中,make_change 函数接收一个需要找零的金额和硬币的面值列表作为输入,然后通过贪婪选择每次使用面值最大的硬币,逐步找零,直到找零完毕为止。最后返回找零的硬币列表。

        贪婪算法的核心在于每一步都选择当前状态下的最优解,但这并不保证一定能够得到全局最优解。在找零钱问题中,贪婪算法的解是最优的,但在其他一些问题中,贪婪算法可能会得到次优解或者根本无法得到最优解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/800976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常用的算法及介绍

贪心算法 (Greedy Algorithm) 原理: 贪心算法是一种在每一步选择中都采取在当前状态下最优的选择,从而希望最终能够达到全局最优解的算法。应用: 最短路径算法(Dijkstra算法)、最小生成树算法(Prim算法、K…

2024年 CS2最佳游戏启动项

引言: Counter-Strike 2(CS 2)是一款备受瞩目的游戏,而启动选项则是影响游戏性能和体验的关键因素之一。然而,有关所有选项都应该强制使用的说法并不正确。事实上,大多数选项可能对某些计算机并不适用&…

Cali Linux上的PoshC2安装和使用

一、安装PoshC2 curl -sSL https://raw.githubusercontent.com/nettitude/PoshC2/master/Install-for-Docker.sh | sudo bash二、创建工程 posh-project -n test三、修改配置文件 posh-config将图中的baidu.com改为自己要攻击的域名或者IP地址 四、执行 posh-server 显示没…

YOLOV8注意力改进方法: Dual-ViT(Dual Vision Transformer) (附改进代码)

原论文地址:原论文下载网址 论文相关内容介绍 将自注意力过程分解为区域和局部特征提取过程,每个过程产生的计算复杂度要小得多。然而,区域信息通常仅以由于下采样而丢失的不希望的信息为代价。在本文中,作者提出了一种旨在缓解…

基于Leaflet.js的Marker闪烁特效的实现-模拟预警

目录 前言 一、闪烁组件 1、关于leaflet-icon-pulse 2、 使用leaflet-icon-pulse 3、方法及参数简介 二、闪烁实例开发 1、创建网页 2、Marker闪烁设置 3、实际效果 三、总结 前言 在一些地质灾害或者应急情况当中,或者热门预测当中。我们需要基于时空位置来…

显示学习番外篇(基于树莓派Pico) -- 游戏(TODO)

来自:11.4. 飞行小鸟 — mPython掌控 2.2.0 documentation (TODO)

C++练级之路——类和对象(上)

1、类的定义 class 类名{//成员函数 //成员变量}; class为定义的关键字,{ }内是类的主体,注意后面的 ; 不要忘了 类体中的内容成为类的成员,类中的变量为成员变量或类的属性,类中的函数为成员函数或类的方法, 类的两种…

通过Golang获取公网IP地址

在Go语言中,获取当前的外网(公网)IP地址可以通过多种方法实现。其中一种常见的方法是通过访问外部服务来获取。这些服务可以返回访问者的公网IP地址,例如 httpbin.org/ip 或 ipify.org。下面是一个简单的例子,展示了如…

免费云服务器汇总,最长永久免费使用

随着云计算技术的快速发展,越来越多的企业和个人开始将业务迁移到云端。云服务器作为云计算的重要组成部分,以其灵活、高效、可扩展等特点受到广泛关注。然而,许多人在初次接触云服务器时,可能会对高昂的价格望而却步。为了帮助大…

GEE:绘制和对比不同地物的光谱曲线

作者:CSDN @ _养乐多_ 光谱曲线是指在不同波长范围内物体或地表特征对电磁辐射的反射、吸收或发射的表现。这些曲线展示了物体或地表在可见光、红外线、微波等电磁波段上的光谱特征。光谱曲线的形状和特征能够提供关于物体或地表的信息,可以利用光谱曲线来识别和分类不同的地…

深度学习项目中调整张量维度布局——einops.rearrange

einops.rearrange from einops import rearrange 是引用了 einops 库中的一个重要函数 rearrange。einops 是一个强大的 Python 库,特别适用于处理多维数据结构(尤其是张量),如 PyTorch 或 TensorFlow 中的张量。rearrange 函数允…

【LeetCode热题100】33. 搜索旋转排序数组(二分)

一.题目要求 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], …

Java设计模式—策略模式(商场打折)

策略这个词应该怎么理解&#xff0c;打个比方说&#xff0c;我们出门的时候会选择不同的出行方式&#xff0c;比如骑自行车、坐公交、坐火车、坐飞机、坐火箭等等&#xff0c;这些出行方式&#xff0c;每一种都是一个策略。 再比如我们去逛商场&#xff0c;商场现在正在搞活动&…

Python技能树学习-函数

题目一&#xff1a;递归调用 函数的参数&#xff1a; def dump(index, default0, *args, **kw): print(打印函数参数) print(---) print(index:, index) print(default:, default) for i, arg in enumerate(args): print(farg[{i}]:, arg) for…

Vue 样式技巧总结与整理[中级局]

SFC&#xff08;单文件组件&#xff09;由 3 个不同的实体组成&#xff1a;模板、脚本和样式。三者都很重要&#xff0c;但后者往往被忽视&#xff0c;即使它可能变得复杂&#xff0c;且经常导致挫折和 bug。 更好的理解可以改善代码审查并减少调试时间。 这里有 7 个奇技淫巧…

[StartingPoint][Tier2]Archetype

Task 1 Which TCP port is hosting a database server? (哪个端口开放了数据库服务) $ nmap 10.129.95.187 -sC --min-rate 1000 1433 Task 2 What is the name of the non-Administrative share available over SMB? (哪个非管理共享提供了SMB?) $ smbclient -N -L 1…

Rsync——远程同步命令

目录 一、关于Rsync 1.定义 2.Rsync同步方式 3.备份的方式 4.Rsync命令 5.配置源的两种表达方法 二、配置服务端与客户端的实验——下载 1.准备工作 2.服务端配置 3.客户端配置同步 4.免交互数据同步 5.源服务器删除数据是否会同步 6.可以定期执行数据同步 三、关…

JVM的简单介绍

目录 一、JVM的简单介绍 JVM的执行流程 二、JVM中的内存区域划分 1、堆&#xff08;只有一份&#xff09; 2、栈&#xff08;可能有N份&#xff09; 3、程序计数器&#xff08;可能有N份&#xff09; 4、元数据区&#xff08;只有一份&#xff09; 经典笔试题 三、JVM…

2024.3.28力扣每日一题——访问完所有房间的第一天

2024.3.28 题目来源我的题解方法一 模拟方法二 动态规划 题目来源 力扣每日一题&#xff1b;题序&#xff1a;1997 我的题解 方法一 模拟 使用一个Set存储已经访问过的房间号&#xff0c;直到Set中的元素个数等于房间数时停止模拟。 时间复杂度&#xff1a;O(day)。能够访问…

信息管理管理工程习题【1~4章】

1、将十进制68转换成二进制为&#xff08; &#xff09;&#xff0c;转换成八进制为&#xff08; &#xff09;&#xff0c;转换成十六进制为&#xff08; &#xff09;。 A. 1000100 102 40 B. 1000100 104 44 C. 1000101 102 40 D. 1000110 104 44 【答案】&#xff1a;B 2、…