当前位置: 首页 > news >正文

算法怎么算:贪心算法

总有人在小白面前说:我是搞算法的,不是码农。又或者在想要进阶的时候,有人问你:你懂算法吗?

所有,算法到底是什么?

从目的性来说:它是计算方法,用来达到自己目的的方式。

直白的说:算法 = 数学 + 逻辑 的计算机表达。还不够简单?别急,算法就是通过代码以除去穷举之外的编写逻辑去编写你的代码。

因为他所包含涉及到了很多计算机本行业之外的其他部分,所以算法实际代表着隐形含义:你有更广泛的知识面。这方面的展开不在此阐述。

让我们回归本次的主体:贪婪算法。

贪心算法是一种基于贪心策略的算法,它在每一步选择中都采取当前状态下最优的选择,从而希望最终能够得到全局最优解。

注意:这里是期望最优,而非必定最优。也就是说存在期望落空的情况。而在这种情况下,贪心算法,并非最优解。
但是,贪心,他快啊。

下面是一个简单的贪心算法示例,用于解决背包问题:

#include <iostream> // 引入iostream库,用于输入输出
#include <algorithm> // 引入algorithm库,用于排序
using namespace std; // 使用std命名空间struct Item { // 定义一个结构体Item,包含每个物品的价值和重量int value;int weight;
};bool cmp(Item a, Item b) { // 定义一个比较函数cmp,用于比较每个物品的价值和重量比率double r1 = (double)a.value / a.weight; // 计算物品a的价值和重量比率double r2 = (double)b.value / b.weight; // 计算物品b的价值和重量比率return r1 > r2; // 返回比率较大的物品
}double fractionalKnapsack(int W, Item arr[], int n) { // 定义一个函数fractionalKnapsack,用于解决背包问题sort(arr, arr + n, cmp); // 对物品按照价值和重量比率进行排序int curWeight = 0; // 初始化当前背包重量为0double finalValue = 0.0; // 初始化最终价值为0for (int i = 0; i < n; i++) { // 遍历每个物品if (curWeight + arr[i].weight <= W) { // 如果当前背包重量加上物品重量小于等于背包容量curWeight += arr[i].weight; // 将物品放入背包中finalValue += arr[i].value; // 增加最终价值} else { // 如果当前背包重量加上物品重量大于背包容量int remain = W - curWeight; // 计算剩余空间finalValue += arr[i].value * ((double) remain / arr[i].weight); // 将物品分成一部分放入背包中break; // 结束循环}}return finalValue; // 返回最终价值
}int main() { // 主函数int W = 50; // 定义背包容量WItem arr[] = {{60, 10}, {100, 20}, {120, 30}}; // 定义物品数组arrint n = sizeof(arr) / sizeof(arr[0]); // 计算物品数量cout << "Maximum value we can obtain = " // 输出提示信息<< fractionalKnapsack(W, arr, n); // 调用fractionalKnapsack函数计算最大价值并输出return 0; // 返回0表示程序正常结束
}

在这个示例中,我们定义了一个Item结构体,其中包含每个物品的价值和重量。我们还定义了一个cmp函数,用于比较每个物品的价值和重量比率,以便在排序时使用。

fractionalKnapsack函数是我们的贪心算法实现。我们首先按照价值和重量比率对物品进行排序,然后从最高比率的物品开始,将尽可能多的物品放入背包中,直到背包装满为止。如果我们无法将整个物品放入背包中,则将其分成一部分,并将其放入背包中。

在main函数中,我们定义了一个背包容量W和一组物品,然后调用fractionalKnapsack函数来计算我们可以获得的最大价值。

相关文章:

算法怎么算:贪心算法

总有人在小白面前说&#xff1a;我是搞算法的&#xff0c;不是码农。又或者在想要进阶的时候&#xff0c;有人问你&#xff1a;你懂算法吗&#xff1f; 所有&#xff0c;算法到底是什么&#xff1f; 从目的性来说&#xff1a;它是计算方法&#xff0c;用来达到自己目的的方式…...

【UDS】ISO15765-2之网络时间参数

文章目录 简介分类1. N_As2. N_Ar3. N_Bs4. N_Br5. N_Cs5. N_Cr 总结 ->返回总目录<- 简介 网络层定时参数定义了N_As、N_Ar、N_Bs、N_Br、N_Cs、N_Cr六个参数。 这些时间参数在多帧传输中可以定义在下图的过程中 分类 1. N_As 方向&#xff1a; 发送方->接收方 …...

Mybatis 动态SQL

注解作用SelectProvider动态查询SQLInsertProvider动态新增SQLUpdateProvider动态更新SQLDeleteProvider动态删除SQL Select 与 SelectProvider 只是在定义注解的方式上有所不同, 一个是静态SQL, 一个是动态SQL 。 SelectProvider 是 MyBatis 中的一个注解&#xff0c;用于指定…...

普通二本院校计算机专业应届生,我来分享java后端开发的自学java经历

当我找到实习的时候&#xff0c;就决定要把自己的经验分享给大家。我会分享一下自己的真实经验。当然了&#xff0c;以下内容仅代表我的个人看法&#xff0c;如有不完善的地方还请见谅。接下来我就以下几个方面进行讲解。下面是兴哥的一位粉丝朋友的经历。 1.自我介绍 首先呢…...

windows系统常见的操作命令及用法

来源&#xff1a;用ChatGPT搜索出来的 目录操作命令&#xff1a; dir&#xff1a;查看当前目录下的文件列表。 用法&#xff1a;dir [路径] [/w] [/p] [/a] [/o] cd&#xff1a;切换当前目录到指定路径。 用法&#xff1a;cd [路径] md/mkdir&#xff1a;创建新的目录。 用法…...

【计算机网络】网络命令的使用

文章目录 一、实验目的二、实验工具三、实验要求四、实验过程01 ping 命令的使用应用1&#xff1a;验证本地计算机上是否正确安装了 TCP/IP 协议应用2&#xff1a;测试某个目的主机可达性应用3&#xff1a;键入 ping&#xff0c;查看 ping 的其他参数含义 02 netstat 命令的典型…...

​当互联网与产业的融合成为一种必然,​平台化和商业化不再是必然

当互联网与产业的融合成为一种必然&#xff0c;我们在互联网时代司空见惯的平台化、中心化的发展模式便开始被瓦解。更为确切地说&#xff0c;经典意义上的平台化和中心化的商业模式不再有存在的必要。因为供求两端的对接不再是依靠平台和中心的撮合和中介来实现的&#xff0c;…...

【linux】冯诺依曼体系+操作系统

我们使用的计算机都是由一个个硬件所组成的&#xff0c;那么如何有条不紊的运行呢&#xff1f;那是因为有冯诺依曼体系约束着硬件&#xff0c;而操作系统来管理着他们&#xff0c;从而使得计算机的硬件和软件完美结合。 一、冯诺依曼体系 首先我们得了解什么是冯诺依曼体系结构…...

从0开始 莫比乌斯函数和反演 学习笔记

莫比乌斯 0 前言 建议先看这篇比较简略的文章&#xff08;有大概了解&#xff09; 莫比乌斯函数_为最后的荣光的博客-CSDN博客 再根据个人情况食用本篇博客 1 莫比乌斯函数 1 1 定义 首先对 n n n 唯一分解&#xff1a; 唯一分解&#xff1a; 唯一分解定理一篇就够了_求…...

IntersectionObserver“替代”滚动条监听

概要 IntersectionObserver 接口提供了一种异步观察目标元素与其祖先元素或顶级文档视口&#xff08;viewport&#xff09;交叉状态的方法。其祖先元素或视口被称为根&#xff08;root&#xff09;。 当一个 IntersectionObserver 对象被创建时&#xff0c;其被配置为监听根中…...

Maven下载安装及IDEA配置Maven的超详细教程

Maven下载安装及IDEA配置Maven的超详细教程 1、IntelliJ IDEA 下载、安装及配置过程2、maven下载、安装、配置过程2.1 mavan下载2.2 安装2.3 配置 3、在IDEA中配置Maven3.1 进入设置界面3.2 maven配置 4、IDEAmaven创建工程示例 Maven是一个能使我们的java程序开发节省时间和精…...

【JAVAEE】线程池基础知识⭐

目录 1.什么是线程池 2.为什么要使用线程池 3.怎么使用线程池 4.自定义一个线程池 5.为什么不推荐使用系统自带的线程池 5.1线程池构造方法的参数和含义 5.1.1拒绝策略 5.2线程池的工作原理 5.3为什么不适用系统自带的线程池 补充&#xff1a;工厂模式 1.什么是线程池…...

【源码解析】@ControllerAdvice实现异常捕获与响应增强处理的原理解析

全局异常处理 demo展示 Slf4j RestControllerAdvice public class GlobalExceptionAdvice {ExceptionHandler(RuntimeException.class)public R<Void> handleNotPermissionException(RuntimeException e, HttpServletRequest request) {String requestURI request.get…...

Visual Studio Code 插件的开发、调试及发布完整详细教程

本篇文章主要讲解:Vscode的拓展插件,从环境安装到生成项目文件再到调试及部署发布的完整开发教程。 日期:2023年5月10日 vscode 1.78.1 一、准备node环境及安装yo 项目初始化,优先安装yo、再通过yo创建code及插件项目。 基础条件 需要先安装node,且node环境已经正确安装…...

Qt音视频开发38-ffmpeg视频暂停录制的设计

一、前言 基本上各种播放器提供的录制视频接口,都是只有开始录制和结束录制两个,当然一般用的最多的也是这两个接口,但是实际使用过程中,还有一种可能需要中途暂停录制,暂停以后再次继续录制,将中间部分视频不需要录制,跳过这部分不需要的视频,而且录制的视频文件必须…...

bat脚本、dos命令

bat脚本 bat脚本就是DOS批处理脚本&#xff0c;就是将一系列DOS命令按照一定顺序排列而形成的集合&#xff0c;运行在windows命令行环境上。这个文件的每一行都是一条DOS命令 在命令提示下键入批处理文件的名称&#xff0c;或者双击该批处理文件&#xff0c;系统就会调用Cmd.…...

【星戈瑞】Sulfo-Cyanine5 mal红色荧光Cy5-maleimide

Sulfo-Cyanine5 mal是一种具有强荧光信号的染料&#xff0c;主要应用于生物荧光成像领域。它的化学式为C38H43KN4O9S2&#xff0c;分子量为803.00。这种染料具有良好的水溶性&#xff0c;可在水溶液中稳定存在。它的光学特性包括吸收峰位于646 nm和发射峰位于662 nm&#xff0c…...

Dcip的学习1-计算器

文章目录 前言一、配置安装环境1.1 网址1.2 再次打开需要进行的操作1.3 NodeJS控制台的操作1.4 出现的页面 二、Dcip生成计算器2.1 软件的基本单位 - Unitform中添加内容 2.2 OnleftChange(); 前言 只是为方便学习&#xff0c;不做其他用途&#xff0c; 一、配置安装环境 1.1 …...

ChatGPT使用9大技巧详解

目录 技巧1:To Do and Not To Do 技巧2:增加示例 技巧3:使用引导词,引导模型输出特定内容...

随机变量X,分布函数X~F(x)的理解。

1.随机变量X 1.通常认知的"x"与随机变量X 我们通常意义上的 x 是自变量&#xff0c;y f(x) 中的自变量。 但是 X 更多意义是 对应法则 " f " &#xff0c;X完整写法是 X(ω) ω ∈ Ω。 X这个对应法则&#xff0c;可以将样本点映射到实数轴上。 那么X这…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...