给出n个任务和每个任务的开始和结束时间。找出可以完成的任务的最大数量,在同一时刻只能做一个任务。

例子:

下面的6个任务:

start[]  =  {1, 3, 0, 5, 8, 5};

finish[] =  {2, 4, 6, 7, 9, 9};

最多可完成的任务是:

{0, 1, 3, 4}

分析:

贪婪的选择是总是选择下一个任务的完成时间至少在剩下的任务和开始时间大于或等于以前选择任务的完成时间。我们可以根据他们的任务完成时间,以便我们总是认为下一个任务是最小完成时间的任务。

1)按照完成时间对任务排序

2)选择第一个任务排序数组元素并打印。

3) 继续以下剩余的任务排序数组。

4)如果这一任务的开始时间大于先前选择任务的完成时间然后选择这个任务和打印。

具体实现代码如下所示:

/**

*@Title: MaxActivities.java

*@Package greedyalgorithm

*@Description: TODO

*@author peidong

*@date 2017-5-15 上午9:31:42

*@version V1.0

*/

packagegreedyalgorithm;

/**

* @ClassName: MaxActivities

* @Description: 贪心算法实例:多任务问题

* @date 2017-5-15 上午9:31:42

*

*/

publicclass MaxActivities {

/**

*

* @Title: printMaxActivities

* @Description: 最多任务选择

* @param start  任务开始时间数组

* @param end    任务结束时间数组

* @param n      任务总数

* @return void

* @throws

*/

public static voidprintMaxActivities(int[] start, int[] end, int n){

int i = 0; //初始任务

System.out.print(i + "");//打印初始任务

//后续任务选择

for(int j = 1; j <n; j++){

//如果当前任务开始比前一个任务的结束时间大或相等,则打印此任务

if(start[j] >= end[i]){

System.out.print(j +" ");

i = j;

}

}

}

/**

*@Title: main

*@Description: 测试用例

*@param args

*@return void

*@throws

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

int[] start = {1, 3, 0, 5, 8, 5};

int[] end = {2, 4, 6, 7, 9, 9};

int n = start.length;

printMaxActivities(start, end, n);

}

}

贪心算法实例(一):多任务分配问题相关推荐

  1. [python算法]贪心算法+实例

    目录 什么是贪心算法 应用实例 找零问题 背包问题 拼接数字问题 活动选择问题 什么是贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择. 也就是说,不从整体最优上 ...

  2. 贪心算法实例(五):小船过河问题

    N个人过河,船每次只能坐两个人,船载每个人过河的所需时间不同t[i],每次过河的时间为船上的人的较慢的那个,问最快的过河时间.(船划过去要有一个人划回来)     最优选择:       先将所有人过 ...

  3. 【趣学算法】贪心算法

    14天阅读挑战赛 努力是为了不平庸~ 算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算 ...

  4. 通俗易懂:贪心算法(一):分配问题 (力扣455分发饼干 和135分发糖果)

    看完本文,可以顺便解决leetcode以下两个题目: 455.分发饼干(简单) 135.分发糖果(困难) 一.通俗易懂的 贪心算法 |思想 贪心算法就是采用贪心的策略,保证每一次的操作都是局部最优的, ...

  5. <贪心算法>学习及经典实例分析

    前言 人生如逆旅,我亦是行人. 贪心算法(Greedy Algorithm) 贪心算法(Greedy Algorithm,又称贪婪算法):是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说 ...

  6. Runnable接口和贪心算法

    1 Runnable接口 Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现.设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议.激活的意思是说某个线程已启动并且尚未停止 ...

  7. 数据结构与算法之贪心算法 C++实现

    1.基本思路:从问题的某一个初始解触发逐步逼近给定的目标,以尽可能快的求得更好的解. 当达到算法中某一步不能再继续前进时.就停止算法,给出近似值.也就是说贪心算法并不从总体最优考虑,它所作出的选择仅仅 ...

  8. 【控制】贪心算法(GA,Greedy Algorithm)及 Matlab 实现

    文章目录 算法思路 应用实例 仿真 Ref. 算法思路 贪心算法一般按如下步骤进行: 建立数学模型来描述问题. 把求解的问题分成若干个子问题. 对每个子问题求解,得到子问题的局部最优解. 把子问题的解 ...

  9. 中文分词算法python代码_python实现中文分词FMM算法实例

    本文实例讲述了python实现中文分词FMM算法.分享给大家供大家参考.具体分析如下: FMM算法的最简单思想是使用贪心算法向前找n个,如果这n个组成的词在词典中出现,就ok,如果没有出现,那么找n- ...

最新文章

  1. 优化数据库的方法及SQL语句优化的原则
  2. 简直骚操作,ThreadLocal还能当缓存用
  3. a113 智能音箱芯片方案_高通入局智能音箱,首款四核单芯片方案曝光
  4. Nginx应用场景之负载均衡
  5. 前端中实时显示当前时间的js代码
  6. 1.微信小程序-B站:前言准备
  7. (22)FPGA软核、固核、硬核介绍
  8. 常见Web安全漏洞及测试方法(转载)
  9. 锂电池 保护板方案 中颖SH367309方案 原理图
  10. 系统架构设计笔记(19)—— 网络存储技术
  11. 计算机网络各层设备及作用
  12. 破土Plan遇到的keng
  13. d3.js 旋转图形_知识地图丨小学数学要学习哪些几何图形?
  14. 卡苹果6plus在线_坐公交“神器”来了!在线充值、在线年检、信息查询...太方便了!...
  15. scilab 求微分_scilab中求积分
  16. 苹果4s忘记id密码怎么办_iPhone忘记ID密码怎么办?不花钱,这波操作帮你轻松解决...
  17. postman基本功能介绍
  18. opencv打卡49:开运算 cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
  19. 多层嵌套break跳出指定循环
  20. 【数列】求序列之和——递归

热门文章

  1. 2020年五大学科竞赛国家队成员名单,保送清华仅7人!
  2. 拼多多砍价背后的逻辑
  3. ubuntu16 octomap安装(解决安装octomap后没有octovis问题)
  4. 成功解决android 网络视频边下载变播放。
  5. 沉舟侧畔千帆竞,百舸争流稳为先——正雅齿科
  6. cf-#501 div3 C. Songs Compression
  7. 苹果4s怎么越狱_iPhone 12系列细节曝光:苹果调整屏幕尺寸
  8. 类似java制作计算器的游戏_急求一Java编写的类似计算机带的计算器的程序!!...
  9. win10锁屏后默认1分钟进入睡眠状态的解决办法
  10. 批处理 Win10锁屏背景图片的提取