- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
有人能解释一下如何最好地解决这个问题吗?
很明显,即使这两个链接说 SJF 是最优的,贪婪的方法也不会产生最优解(我不认为他们考虑平均等待时间,而是有最小化总执行时间的标准)。
从我对这个问题的了解来看,似乎需要详尽地列出所有可能的工作安排(排列)。但我不确定是否有一种基于动态规划的方法可以让人们获得最佳解决方案,而不必详尽地找到所有可能排列的平均等待时间。
问题:n
不同的(r_i, t_i)
数组中给出了作业请求时间和作业长度时间的列表工作。 r_i
表示作业请求何时进来,即作业的到达时间或请求时间,t_i
表示作业执行所花费的时间单位。只有一个人处理工作,并且一次只能从事一项工作。
使用输入数组 (r_i, t_i)
计算一组给定的 N
作业的最小平均等待时间?
示例:列表(r_i, t_i)
:job-1(0, 3), job-2(2, 5), job-3 (3, 2)
如果作业按照job-1, job-2, job-3
的顺序完成,那么:
job-1
的等待时间 = 作业结束时间 - 作业请求时间 = 3-0
job-2
的等待时间 = 8-2 = 6
job-3
的等待时间 = 10-3 = 7
所以平均等待时间是:(3 + 6 + 7)/3。
但是如果这些工作按照job-1, job-3, job-2
的顺序完成:平均等待时间是:(3+2+8)/3 = 13/3
,比原来的顺序要好。所以最小平均等待时间是 13/3 时间单位。
编辑:
作业的等待时间被定义为(完成时间 - 到达或请求时间)。也可以称之为周转时间。问题是最小化总等待时间/N 的问题之一,如果假设等待时间的不同定义为(作业开始时间 - 作业到达时间),这将与最小化总等待时间的问题相同。
SJF(最短作业优先)未给出最优调度的示例:
J1 (1, 5)J2 (2, 2)J3 (0, 3)
最短的工作 j2。但是选择 j3,j2,j1 比在 j2,j3,j1(等待时间 = 4+7+11)中先选择 j2 更好的调度(总等待时间 = 3+3+9)
在时间0,最短的工作是J1。 J1-J2 作为时间表,总等待时间为 100+102。 J2-J1 时间表给出了 3+103 的最佳总等待时间。
最佳答案
您的描述中有些地方不清楚:是否允许抢占?即是否有可能停止一项工作,开始另一项工作,然后再完成这项工作。在这两种情况下,您都可以查看 this website以便了解您的问题是 NP-hard 还是多项式可解。
此外,查看完成时间的总和或等待时间的总和是严格等效的,您只需添加/删除发布日期和处理时间的总和即可。
关于algorithm - 如何*最佳*解决调度 N 个作业(到达时间,执行时间)提前已知,以便 N 个作业的平均等待时间最短?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44668026/
如果这有点含糊,我提前道歉,但我什至缺乏如何处理这个问题的基本想法 - 甚至不知道是否有合适的术语可供搜索。 我正在尝试编写一个按时间顺序排列的动画事件的表格驱动系统,其中描述性评论也从表格中提取出来
我是一个老狗,30 年前就用过 BASIC >。我以前在 python 中使用 for 循环时遇到过这种情况,但我选择这个例子是因为我担心循环: 我想解析一个长字符串,其中包含用逗号分隔的双引号中的单
我需要获取从当天算起的 5 个工作日的数组。 今天是:06/04/2018 我需要的输出是: { 0: 06/01/2018, //fri. 1: 05/31/2018, //th
我习惯于使用时间戳,我现在将尝试使用正常日期 2011-02-02 12:00:00 格式 我有这个: SELECT * FROM users_calenders WHERE date ? 我想选择日
我在我的本地仓库 (test-branch) 中创建了一个测试分支,并将其推送到 Github。 如果我转到我的 Github 帐户并选择这个 test-branch 它会显示信息: This bra
我正在尝试设置 JSON 对象的结束日期。结束日期等于开始日期后 30 天。有时这会返回正确的日期,有时则不会。 这是GetDateSchedulerFormatted函数 GetDateSchedu
我有一个执行器服务,它定期执行一堆任务。它们在启动时初始化并经常运行,到目前为止一切顺利。 我现在想添加功能来根据事件快速启动这些任务的执行。 我找到了decorateTask方法,它允许我存储我安排
我需要比当前日期提前 3 周的日期。并将所有日期添加到数组中。我怎样才能得到这个? let date = NSDate() let calendar = NSCalendar(cal
我正在使用以下代码设置日期对象: NSDate *date = [NSDate date]; NSCalendar *gregorian = [[NSCalendar alloc] i
我正在将字符串“Jun 11, 2012 9:30 PM”转换为 NSDate,并且由于某种原因我一直提前 4 小时。有趣的是,我正在使用相同的字符串在详细 View 中提供 UIDatePicker
我的理解是 Xamarin 的提前 (AOT) 编译器将 Xamarin.iOS 应用程序直接编译为 native ARM 汇编代码 (How Xamarin works) . 然而,我不明白的是为什
Angular 2 带有称为提前 (AoT) 的新功能。但是看了一番,还是不能真正理解。它是如何工作的?它将如何带来更好的性能?它与 JIT 有何不同? 谢谢。 最佳答案 Angular 在模块、指令
我看到了一些关于如何纠正这个问题的答案。我有一个 DateTime 类型的对象。我已分配该对象,如下所示。 obj.TimeStamp = DateTime.UtcNow; 我似乎找不到正确的组合或代
我是 Fortran 新手,我不明白这一行: write(*,'(a35)', advance='no') 在: program democonvertion implicit none
我一直在寻找如何做一些像 facebook 新闻提要这样的“高级”列表,但我认为我没有使用正确的关键字来搜索如何做到这一点。我对 android 环境还是很陌生。 这就是我要实现的目标: 我怎样才能得
我有一个包含 2 列的 pandas Dataframe。其中一个是日期格式的索引,另一个是比率 R(0 到 1 之间的数字)。如何向 pandas Dataframe 添加另一列,其中包含一天前一周
我有 2 个媒体查询大小 - only screen and (min-width: 980px)and (max-width: 1499px)"; only screen and (min-widt
我发现了这个: Is AOT (ahead of time) compilation available (or planned) in mono for android? 但是这个问题很老了。 在单
在我看来,当我调用 JTree.expandPath( path ) 默认情况下,它的所有父级也会展开。但我真正想做的是,设置特定的隐形 child 提前展开。这样当一个节点展开时,它的完整子树就会弹
我的时差显示不正确的输出,我正在尝试计算 startTime 和 endTime 之间的时差。 Date time1, time2; long difference; Simp
我是一名优秀的程序员,十分优秀!