package com.greedy;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TaskReschedule {
private List<Task> taskList=new ArrayList<Task>();
private List<Task> schedulList=new ArrayList<Task>();
private Map<List<Task>,Integer>memory;
private int total;
public TaskReschedule(int []ids,int[] finals,int[]punishs)throws Exception{
if(ids.length!=finals.length&&finals.length!=punishs.length){
throw new Exception("数据错误");
}
total=ids.length;
for(int i=0;i<ids.length;i++){
Task task=new Task();
task.id=ids[i];
task.end=finals[i];
task.punish=punishs[i];
taskList.add(task);
}
memory=new HashMap<List<Task>,Integer>();
}
public int reschedule()throws Exception{
return innerReschedul(1);
}
public void printOrder(){
for(int i=0;i<schedulList.size();i++){
System.out.print(schedulList.get(i).getId());
}
System.out.println();
}
private int innerReschedul(int time)throws Exception{
int index=0;
Task tmp=null;
int punish=Integer.MAX_VALUE;
for(int k=0;k<taskList.size();k++){
tmp=taskList.get(k);
if(tmp.getEnd()<time){
continue;
}
taskList.remove(k);
int p=punish(time+1);
if(punish>p){
index=k;
punish=p;
}
taskList.add(k, tmp);
}
if(taskList.size()==0){
return punish;
}
schedulList.add(taskList.get(index));
taskList.remove(index);
innerReschedul(time+1);
return punish;
}
private int punish(int time)throws Exception{
if(taskList.size()+time!=total+1){
throw new Exception("error");
}
if(memory.get(taskList)!=null){
return memory.get(taskList);
}
boolean restPunish=true;
for(int i=0;i<taskList.size();i++){
//System.out.println("taskList.get(i).getEnd()<time:"+taskList.get(i).getId()+"-"+taskList.get(i).getEnd()+"-"+time);
if(taskList.get(i).getEnd()>=time){
restPunish=false;
break;
}
}
//System.out.println("=========");
if(restPunish){
//System.out.println("punishment-start");
int punish=0;
for(int i=0;i<taskList.size();i++){
//System.out.print(taskList.get(i).getId());
punish+=taskList.get(i).getPunish();
}
//System.out.println();
//System.out.println("punishment-end");
return punish;
}
Task tmp=null;
int punish=Integer.MAX_VALUE;
for(int k=0;k<taskList.size();k++){
tmp=taskList.get(k);
if(tmp.getEnd()<time){
continue;
}
taskList.remove(k);
int p= punish(time+1);
//System.out.println(time);
//System.out.println("punish:"+p);
if(punish>p){
punish=p;
}
taskList.add(k,tmp);
}
memory.put(taskList, punish);
//System.out.println(time);
//System.out.println("punishTotal:"+punish);
return punish;
}
private static class Task{
private int id;
private int end;
private int punish;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
public int getPunish() {
return punish;
}
public void setPunish(int punish) {
this.punish = punish;
}
}
public static void main(String[] args)throws Exception {
int [] id=new int[]{1,2,3,4,5,6,7};
int []finall=new int[]{4,2,4,3,1,4,6};
int []punish=new int[]{70,60,50,40,30,20,10};
TaskReschedule taskReschdule=new TaskReschedule(id,finall,punish);
System.out.println(taskReschdule.reschedule());
taskReschdule.printOrder();
}
}
相关推荐
算法导论【贪心算法】—排队等待问题、单位时间的调度问题、0-1背包贪心近似、多机调度问题
每次选择一个处理时间最小的人排队,选择后只剩一个子问题:为剩余的人找一个排队次序,使每个人排队时间总和最小,此问题存在一个最优解,即贪心选择是安全的。本题的贪心算法为:N 个数据从小到大排序,就是这 N 个人的最佳排序方案。从而新的序列比原最优解序列好,矛盾!故贪心选择可以得到最优解。之前的人等待时间都减少了。
算法作业 - 作业调度带惩罚问题(贪心)
本题我的大致思路就是先对每个作业按照提交时间和惩罚大小进行排序,然后依次填数,如果该位置未填充作业就直接填充进去,如果有作业就将里面的作业提出,将本作业填进去,并将提出的作业的deadline-1,重复此过程,知道deadline < 0.则该作业就是丢弃的作业。 #include<iostream> #include<algorithm> #include<vector> #define max 201 using std::cin; using std::.
贪心算法在单位时间任务调度问题中的应用
单位时间任务调度问题是一类经典的优化问题,旨在分配任务到不同的时间槽中,使得某种性能指标达到最优。在16.5节中,我们讨论了一种带截止时间和惩罚的单位时间任务调度问题,其中每个任务有一个截止时间以及错过截止时间后的惩罚值。这个问题要求我们找到一个任务调度方案,能够最小化超过截止时间导致的惩罚总和。 本文将介绍一种贪心算法来解决这个问题,并通过证明和伪代码分析来说明该算法的正确性和效率。同时,我们还将探讨如何利用21.3节提出的快速不相交集合森林来高效实现该算法,并分析其运行时间。
#10008. 「一本通 1.1 练习 4」家庭作业
【题目描述】 老师在开学第一天就把所有作业都布置了,每个作业如果在规定的时间内交上来的话才有学分。每个作业的截止日期和学分可能是不同的。例如如果一个作业学分为 10,要求在 6 天内交,那么要想拿到这 10 学分,就必须在第 6 天结束前交。 每个作业的完成时间都是只有一天。例如,假设有 7 次作业的学分和完成时间如下: 作业号 期限 学分 11 11 66 ...
调度问题变形的贪心算法分析与实现
带截止时间和惩罚的单位时间任务调度问题是一个典型的贪心算法应用场景。该问题的目标是最小化超过截止时间导致的惩罚总和。给定一组单位时间任务,每个任务有一个截止时间以及错过截止时间后的惩罚值,任务调度需要在单处理器上进行,每个时刻只能执行一个任务。考虑如下算法:初始时,有n个时间槽,每个时间槽对应一个单位时间长度,结束于对应的时刻i。
java 无向图所有最短路径算法的实现
本资源来自MyEclipse,其中的项目对其中的题目进行了解答。仅供学习参考。不足之处请批评指正。
最小惩罚
给定⼀个 ⽆向图 包含 N 个节点和 M 条边, 每条边 Mi 的代价为 Ci 。图中⼀条 路径的惩罚是指对该路径上所有边的代价 Ci 执⾏位运算或(bitwise OR)操 作得到的。假如⼀条路径上包含了边 M1,M2,M3 … … ,Mk,那么对应的惩 罚就是 C1 OR C2 OR C3 OR … OR Ck。(OR代表位运算或,即 “|” ) 问题:给定图上两个节点 start 和 end,找到从 start 到 end 的所有路径中惩罚 值最⼩的路径,对应的最⼩惩罚值作为结果返回。如果路径不存在就
云调度任务贪心算法
云计算(Cloud Computing)是分布式处理(Distributed Computing)、并行处理(Parallel Computing)和网格计算(Grid Computing)的发展,是基于互联网的相关服务的延伸、应用和交付模式,通常涉及通过互联网来提供动态易扩展的虚拟化的资源。 一个任务流中有许多的任务,而这些任务之间存在一个拓扑结构,即任务之间有着父子关系,这个结构可以形成一个无回路有向图(DAG)。我们定义一个任务流W=(T,E),其中T是所有任务的集合,E是所有边的集合。eij表示任务tj必须在ti执行完之后才能执行,即tj是ti的子任务。 云计算资源调度问题是如何将任务流中的各个任务合理地分配到云计算平台的资源上,很好地满足用户的需求。图2是一个云计算资源调度的实例,其中t4,t5以及t7分配到计算资源r1上运行,t1,t2以及t6分配到计算资源r2上运行,t3以及t8分配到计算资源r3上运行。 (1)通过贪心算法进行求解,最小化任务流的运行时间。
供应链 | 顶刊OR论文精读:在线最小峰值作业调度的竞争算法
作业分类:根据1j11jj11j1的调度需求将作业分为不同类别,借鉴了谐波装箱算法(Harmonic bin-packing algorithm, Lee and Lee 1985)和其他研究的分类方法。作业分配:通过左侧和右侧单边箱子(left and right one-sided bins)的动态匹配与重新匹配来利用调度灵活性。左侧单边箱子(a left one-sided bin)从时间0开始到某个时间0s10 < s < 10s1结束;
Unity集成抖音小游戏:从IL2CPP配置到SDK接入全流程解析
本文详细解析了使用Unity开发抖音小游戏的完整流程。从关键的IL2CPP编译后端配置、PlayerSettings设置,到StarkSDK的接入与资源优化(如AutoStreaming),再到激励视频广告、录屏分享等核心功能的代码实现,提供了从环境准备到打包上传的全方位实战指南,帮助开发者高效完成技术适配。
Linux-ftrace-双nop机制的实现
linux-ftrace内核追踪-双nop机制的实现原理
java调度问题的贪心算法_任务调度问题1—贪心算法
这个问题是《算法导论》上的一个经典的贪心算法问题——单处理器上具有期限和惩罚的单位时间任务调度问题,目标是使惩罚最小。输入:第一行一个数n,接下来第2行到第n+1行,第i行分别是d[i]和w[i],其中d[i]表示第i个任务的时限,w[i]表示第i个任务的惩罚,每个任务的完成时间为单位时间。输出:一行一个数,为最小惩罚。题解:令集合S为所有任务的集合,A为一个任务集合,其中所有的任务满足条件:存在...
【Apollo规划模块探秘】—— 场景(Scenario)驱动的决策引擎
本文深入解析了Apollo自动驾驶平台规划模块的核心机制——场景(Scenario)驱动的决策引擎。文章通过类比日常驾驶,阐述了规划模块如何像经验丰富的司机一样,根据不同的路况(如车道跟随、无保护左转)切换不同的“驾驶模式”。重点剖析了场景管理器(ScenarioManager)如何基于感知信息进行场景判断与切换,以及“场景-阶段-任务”双层状态机如何精密协作,实现灵活、高效且安全的轨迹规划。
实验四:贪心算法实现最佳任务调度实验
通过对任务调度问题使用贪心算法进行实现,加深了我对于贪心算法的理解和实践。
calibration的“前世今生”——从simulink开发到CANape的XCP标定
整体思路 备注: elf可简单的看作为hex和map的集合,其中包括可执行的程序、变量及其对应的地址(simulink生成代码是也可以勾选生成ASAP2的a2l文件,有变量但变量对应的地址为空,只有编译后才分配地址) 定义变量是观测值还是标定值需要在simulink中的数据字典定义变量存储类型,详见simulink系列。 1. 前期准备A2L的制作 安装完成CanApe软件 , 插上CanApe硬件( 如:vector 1640A)。打开A2L编辑软件 ASAP2 Editor(注意不是ASAP2 Vi
MuMu模拟器过检测实战:从硬件伪装到API欺骗的完整避坑指南
本文详细介绍了MuMu模拟器过检测的实战技术,从硬件伪装到API欺骗的全方位解决方案。通过修改CPU/GPU信息、内存分布、系统属性和行为模拟等关键技术,帮助用户有效绕过现代应用的模拟器检测机制,提升模拟器的隐蔽性和稳定性。
贪心算法
贪心算法是一种通过局部最优选择来达到全局最优解的算法设计方法。它从问题的初始状态出发,通过一系列贪心选择来得出最优值或较优解。核心思想:每一步都做出当前看起来最佳的选择,而不考虑整体情况。
AI 编程助手新玩法:用 Claude Code 一键调用国产大模型(DeepSeek/Kimi/GLM 对比)
本文深入评测了Claude Code与三大国产大模型(DeepSeek、Kimi、智谱GLM)的集成效果,详细对比了它们在代码生成质量、响应速度和特殊场景支持度等方面的差异。通过实测数据和实战技巧,帮助开发者选择最适合的AI编程助手组合,提升开发效率。
任务调度算法题Java_一个任务调度问题-----算法导论
一、问题描述在单处理器上具有期限和惩罚的单位时间任务调度问题。二、算法原理任务调度问题就是给定一个有穷单位时间任务的集合S,集合S中的每个任务都有一个截止期限di和超时惩罚wi,需要找出集合S的一个调度,使得因任务误期所导致的总惩罚最小,这个调度也称为S的一个最优调度。实现任务的最优调度主要就是利用贪心算法中拟阵的思想。如果S是一个带期限的单位时间任务的集合,且I是所有独立的任务集构成的结合,则对...
AgentFlow:模块化智能体框架与Flow-GRPO强化学习实战解析
在人工智能领域,大语言模型(LLM)与智能体(Agent)技术正推动着自动化任务处理的发展。其核心原理在于通过规划、执行与反馈的循环,使AI系统能够自主调用工具解决复杂问题。这一技术的价值在于突破单一模型的局限性,实现更可靠的多步骤推理。在实际应用中,智能体框架需要处理搜索、代码执行、数学计算等多种场景。本文聚焦的AgentFlow框架,正是通过模块化设计将智能体拆分为规划者、执行者、验证者和生成者四个专家模块,并引入Flow-GRPO强化学习算法进行流程内优化。该框架在搜索增强与工具调用等任务上展现出显著
OpenCV 基于上升距离计算边缘清晰度
OpenCV 基于上升距离计算边缘清晰度
任务调度问题
题目描述 一个单位时间任务是恰好需要一个单位时间完成的任务。给定一个单位时间任务的有限集S。关于S 的一个时间表用于描述S 中单位时间任务的执行次序。时间表中第1 个任务从时间0 开始执行直至时间1 结束,第2 个任务从时间1 开始执行至时间2 结束,…,第n个任务从时间n-1 开始执行直至时间n结束。具有截止时间和误时惩罚的单位时间任务时间表问题可描述如下: (1) n 个单位时间任务的集合S={1,2,…,n}(n≤500); (2) 任务i的截止时间d[i],1≤i≤n,1≤d[i]≤n,即要求任.
ssm框架搭建
这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载
用贪心算法编程求解任务安排问题
题目:用贪心算法编程求解以下任务安排问题一个单位时间任务是恰好需要一个单位时间完成的任务。给定一个单位时间任务的有限集S。关于S的一个时间表用于描述S中单位时间任务的执行次序。时间表中第1个任务从时间0 开始执行直至时间1 结束,第2 个任务从时间1 开始执行至时间2 结束,…,第n个任务从时间n-1 开始执行直至时间n结束。具有截止时间和误时惩罚的单位时间任务时间表问题可描述如下。(1) n个单位时间任务的集合S={1,2,…,n};
廖雪峰Python教程[完整版]
廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
一个任务调度问题-----算法导论
一、问题描述 在单处理器上具有期限和惩罚的单位时间任务调度问题。 二、算法原理 任务调度问题就是给定一个有穷单位时间任务的集合S,集合S中的每个任务都有一个截止期限di和超时惩罚wi,需要找出集合S的一个调度,使得因任务误期所导致的总惩罚最小,这个调度也称为S的一个最优调度。 实现任务的最优调度主要就是利用贪心算法中拟阵的思想。如果S是一个带期限的单位时间任务的集合,...
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
任务调度问题(贪心思想)
题目描述 一个单位时间任务是恰好需要一个单位时间完成的任务。给定一个单位时间任务的有限集S。关于S 的一个时间表用于描述S 中单位时间任务的执行次序。时间表中第1 个任务从时间0 开始执行直至时间1 结束,第2 个任务从时间1 开始执行至时间2 结束,…,第n个任务从时间n-1 开始执行直至时间n结束。具有截止时间和误时惩罚的单位时间任务时间表问题可描述如下: (1) n 个单位时间任...
任务调度问题1—贪心算法
这个问题是《算法导论》上的一个经典的贪心算法问题——单处理器上具有期限和惩罚的单位时间任务调度问题,目标是使惩罚最小。 输入:第一行一个数n,接下来第2行到第n+1行,第i行分别是d[i]和w[i],其中d[i]表示第i个任务的时限,w[i]表示第i个任务的惩罚,每个任务的完成时间为单位时间。 输出:一行一个数,为最小惩罚。 题解: 令集合S为所有任务的集合,A为一个任务集...
2210



被折叠的 条评论
为什么被折叠?



