贪心算法详解与任务调度问题Demo

  • 任务调度问题Demo

        任务调度问题是一类常见的优化问题,其目标是在有限的时间内合理安排任务的执行顺序,以最大化任务的完成数量或满足其他优化目标。在这个Demo中,我们将考虑一个简化版的任务调度问题:有一系列任务,每个任务都有一个执行时间和一个截止时间,我们的目标是确定一个任务执行顺序,使得尽可能多的任务能够在截止时间前完成。

假设我们有一个任务列表,每个任务包含执行时间(exec_time)和截止时间(deadline)。我们将使用贪心算法来解决这个问题。贪心策略是:按照任务的截止时间从早到晚进行排序,然后依次执行任务。这种策略能够确保尽早完成截止时间较早的任务,从而提高任务完成率。

  • 下面是Python实现的代码:
class Task:  def __init__(self, exec_time, deadline):  self.exec_time = exec_time  self.deadline = deadline  def __lt__(self, other):  return self.deadline < other.deadline  def task_scheduling(tasks):  # 按照截止时间对任务进行排序  sorted_tasks = sorted(tasks, key=lambda x: x.deadline)  # 初始化当前时间和完成的任务数量  current_time = 0  completed_tasks = 0  # 依次执行任务  for task in sorted_tasks:  if current_time + task.exec_time <= task.deadline:  # 如果任务能在截止时间前完成,则执行该任务  current_time += task.exec_time  completed_tasks += 1  else:  # 否则跳过该任务  break  return completed_tasks  # 测试代码  
tasks = [Task(3, 5), Task(2, 7), Task(4, 8), Task(1, 6)]  
print(f"最多可以完成的任务数量为:{task_scheduling(tasks)}")

        在这个Demo中,我们首先定义了一个Task类来表示任务,包含执行时间和截止时间两个属性。然后,我们实现了task_scheduling函数来执行任务调度。该函数首先对任务按照截止时间进行排序,然后依次检查每个任务是否能在其截止时间前完成。如果能完成,则执行该任务并更新当前时间;否则,跳过该任务并结束调度。最后,函数返回完成的任务数量。

通过测试代码,我们可以看到对于给定的任务列表,最多可以完成的任务数量为3个。

总结

        通过任务调度问题的Demo,我们详细解析了贪心算法的原理和应用。贪心算法通过每一步选择局部最优解来逼近全局最优解,虽然不一定能得到全局最优解,但在很多实际问题中都能得到较好的结果。在实际应用中,我们需要根据问题的具体特点来选择是否使用贪心算法,并合理设计贪心策略以确保算法的有效性。此外,我们还可以考虑将贪心算法与其他算法结合使用,以进一步提高解决方案的质量和效率。

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

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

相关文章

成为大佬之路--linux软件安装使用第000000032篇--linux docker安装文件系统

总体感受 能用&#xff0c;仅仅是能用&#xff0c;不太好用&#xff0c;ui略丑 安装 docker run -d --restart always -p 10018:8080 -v /Users/ascendking/sofewares/mikochi/data:/data -e DATA_DIR"/data" -e USERNAMEadmin -e PASSWORDadmin zer0tonin/mik…

Qt ini配置文件

ini文件用于保存用户的设置操作&#xff0c;下列以背景颜色设置为例子 暂时默认设置为白色背景 这段代码放置在主窗口的构造函数中&#xff0c;用于初始化读取ini文件 QString color;QSettings *set new QSettings("color.ini",QSettings::IniFormat);set->begi…

销售管理之反向与正向目标控制

在销售活动中&#xff0c;控制力是关键。但控制力其实分为两种&#xff1a;反向控制和正向控制。本文将深入探讨这两种控制方式&#xff0c;并阐述如何在销售活动中加以应用&#xff0c;以提升销售效果。 一、反向控制&#xff1a;以客户为中心&#xff0c;引导客户需求 反向控…

【智能家居入门1之环境信息监测】(STM32、ONENET云平台、微信小程序、HTTP协议)

作为入门本篇只实现微信小程序接收下位机上传的数据&#xff0c;之后会持续发布如下项目&#xff1a;①可以实现微信小程序控制下位机动作&#xff0c;真正意义上的智能家居&#xff1b;②将网络通讯协议换成MQTT协议再实现上述功能&#xff0c;此时的服务器也不再是ONENET&…

C++笔记(七)--- const

const关键字表示所修饰的变量或函数不可改变 C语言中const 1.const修饰的变量不可改变&#xff0c;故必须定义时初始化2.const修饰函数&#xff0c;表示函数返回值不可更改3.const修饰普通参数&#xff0c;表示参数不可修改4.const修饰的变量不可直接修改&#xff0c;但可以通…

浙大版《数据结构学习与实验指导(第2版)》符号配对

符号配对 题目链接 题目描述 请编写程序检查C语言程序中下列符号是否配对&#xff1a;/* 与 */,(与),[与],{与} 输入描述 输入为一个c语言程序的一部分。当读到某一行中只有一个句点“.”和一个回车时&#xff0c;标志着输入结束。程序中需要检查配对的符号不超过2000个。 输…

ChaosBlade故障注入工具--cpu,内存,磁盘占用\IO,网络注入等

前言&#xff1a; 本文介绍一款开源的故障注入工具chaosblade&#xff0c;该工具原本由阿里研发&#xff0c;现已开源&#xff1b;工具特点&#xff1a;功能强大&#xff0c;使用简单。 该工具故障注入包含&#xff1a;cpu&#xff0c;内存&#xff0c;磁盘io&#xff0c;磁盘…

Unity3D 立方体纹理与自制天空盒详解

前言 在Unity3D中&#xff0c;立方体纹理和自制天空盒是常见的技术&#xff0c;它们可以帮助开发者创建出更加真实和引人入胜的游戏场景。本文将详细介绍Unity3D中立方体纹理和自制天空盒的实现方法&#xff0c;希望能帮助读者更好地理解和运用这些技术。 对惹&#xff0c;这…

计算机网络:应用层知识点汇总

文章目录 一、网络应用模型二、域名系统&#xff08;DNS&#xff09;三、文本传输协议&#xff08;FTP&#xff09;四、电子邮件五、万维网和HTTP协议 一、网络应用模型 p2p也就是对等模型 二、域名系统&#xff08;DNS&#xff09; 我们知道&#xff0c;随着人们建立一个网站…

记一次systemd服务启动找不到Java命令

首先systemd服务文件 /etc/systemd/system/test.service(文件简化处理了) [Unit] Descriptiontest Afternetwork.target [Service] ExecStart/opt/test/bin/test_start.sh [Install] WantedBymulti-user.target其中启动命令ExecStart指向的是一个sh启动脚本&#xff0c; 脚本内…

UnityAPI的学习——Random类

Random类是Unity中用于产生随机数的类&#xff0c;不可实例化&#xff0c;只有静态属性和静态方法 Random类静态属性 在Random类中&#xff0c;涉及的静态属性有insideUnitCircle属性、insideUnitSphere属性、onUnitSphere属性、rotationUnitform属性、rotation属性和seed属性…

文生视频Sora模型发布,是否引爆AI芯片热潮

文生视频Sora模型发布&#xff0c;是否引爆AI芯片热潮 1. 引言 在人工智能的历史长河中&#xff0c;每一次技术的飞跃都伴随着社会生产力的巨大变革。自2015年以来&#xff0c;深度学习技术的突破性进展&#xff0c;尤其是在自然语言处理、图像识别和机器学习等领域的成功应…

海外IP代理应用:亚马逊使用什么代理IP?

代理IP作为网络活动的有力工具&#xff0c;同时也是跨境电商的必备神器。亚马逊作为跨境电商的头部平台&#xff0c;吸引了大量的跨境电商玩家入驻&#xff0c;想要做好亚马逊&#xff0c;养号、测评都需要代理IP的帮助。那么应该使用什么代理IP呢&#xff1f;如何使用&#xf…

vue el-avatar 使用require提示无法找到图片

报错信息 错误代码 问题分析 vue初始化DOM树时没有挂载数据,导致无法找到模块 解决方案

抖音商家短视频直播流量变现运营SOP地图

【干货资料持续更新&#xff0c;以防走丢】 抖音商家短视频直播流量变现运营SOP地图 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 抖音运营资料合集&#xff08;完整资料包含以下内容&#xff09; 目录 【提升短视频运营效率的专业指南】 高效运营&#xf…

Springboot实现获取@Value中同字符串从yml加载后的值

问题描述&#xff1a; 自定义注解&#xff0c;希望能够和Value注解使用一样的value值表达式格式从而动态的从yml中获取配置。做到见名知意 测试流程 yml配置 test:abc: aaaaValue注解获取值 Value("2222.kk.${test.abc}.111") private String test;获取自定注解…

leetcode 39题组合总和

# 为什么c方法不用for循环, [:] 索引拷贝的区别 题目地址&#xff1a;https://leetcode.cn/problems/combination-sum/ # 1. 官方c解法&#xff1a; 提交测试了几个用例可以通过 cpp class Solution { public: void dfs(vector<int>& candidates, int target, v…

【安卓(Android)原生与H5开发区别】

安卓&#xff08;Android&#xff09;原生与H5开发 Android原生语言开发&#xff0c;指的是使用Java或Kotlin等编程语言对Android应用程序的用户界面部分进行开发。Android编程语言可以直接调用底层系统的API与功能。H5开发是指使用HTML、CSS和JavaScript等前端技术进行开发&a…

倒计时37天

复习1001. 马走日问题: 1.P1002 [NOIP2002 普及组] 过河卒 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) //日常碎碎念&#xff1a;谁懂啊&#xff0c;dev突然不能用了&#xff0c;也不知道是哪里出了问题下了五六次都不能用&#xff0c;&#xff0c;&#xff0c;找远程安…

1 数据分析概述与职业操守 (3%)

1、 EDIT数字化模型 E——exploration探索 &#xff08;是什么&#xff09; 业务运行探索&#xff1a;探索关注企业各项业务的运行状态、各项指标是否合规以及各项业务的具体数据情况等。 D——diagnosis 诊断 (为什么) 问题根源诊断&#xff1a;当业务指标偏离正常值时&…