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

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

  • 任务调度问题Demo

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

目录

任务调度问题Demo

下面是Python实现的代码:

总结


        假设我们有一个任务列表,每个任务包含执行时间(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,我们详细解析了贪心算法的原理和应用。贪心算法通过每一步选择局部最优解来逼近全局最优解,虽然不一定能得到全局最优解,但在很多实际问题中都能得到较好的结果。

相关文章:

  • 【数据结构】单链表的层层实现!! !
  • Tomcat的安装
  • GB/T 35751-2017 汽车装饰用非织造布及复合非织造布检测
  • linux系统docker历史以及对虚拟机的区别
  • 基于SSM的党务政务服务热线平台(有报告)。Javaee项目。ssm项目。
  • 02-gitlab的数据备份和恢复
  • R语言 | 复数 相关函数
  • 已解决com.alibaba.com.caucho.hessian.io.HessianProtocolException异常的正确解决方法,亲测有效!!!
  • 使用awk和正则表达式过滤文本或字符串 - 详细指南和示例
  • 深入理解锁的升级与降级
  • 错误与异常之为何要异常
  • Dockerfile的使用,怎样制作镜像
  • linux应用程序需要编写的脚本
  • HTML—基本介绍
  • 【吊打面试官系列】Java虚拟机JVM篇 - 关于类加载器的JVM面试题
  • 【347天】每日项目总结系列085(2018.01.18)
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • HTTP--网络协议分层,http历史(二)
  • Java 网络编程(2):UDP 的使用
  • JS变量作用域
  • Netty源码解析1-Buffer
  • PV统计优化设计
  • tensorflow学习笔记3——MNIST应用篇
  • Vim 折腾记
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 读懂package.json -- 依赖管理
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 在weex里面使用chart图表
  • 找一份好的前端工作,起点很重要
  • ​虚拟化系列介绍(十)
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (5)STL算法之复制
  • (Ruby)Ubuntu12.04安装Rails环境
  • (二)c52学习之旅-简单了解单片机
  • (二)fiber的基本认识
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (接口自动化)Python3操作MySQL数据库
  • (三)elasticsearch 源码之启动流程分析
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)Sublime Text3配置Lua运行环境
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .gitignore
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 使用 XPath 来读写 XML 文件
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • /run/containerd/containerd.sock connect: connection refused
  • ??如何把JavaScript脚本中的参数传到java代码段中