【发布时间】:2016-10-09 14:31:00
【问题描述】:
问题:
给定一组 n 个任务,每个任务都有一个整数开始时间和 时间结束。并行运行的最大任务量是多少 任何给定的时间?
算法应该在 O(n log n) 时间内运行。
这是一个学校作业,所以我不需要直接回答,但是任何代码 sn-ps 都是受欢迎的,只要它们是在 Java 或 Scala 中的(作业应该用 scala 编写。)
一些提示说我应该利用优先队列。我阅读了文档,但不确定如何使用它们,因此欢迎使用任何代码 sn-ps。
输入数据可以是Array[Pair[Int,Int]] = Array((1000,2000),(1500,2200))等。
我真的很难设置优先级队列的排序,所以如果没有别的我希望有人可以帮助我。
PS: 优先级队列应该用 PriorityQueue()(ord) 初始化。
编辑:我想出了使用优先队列的解决方案,但感谢您提供所有答案。你们帮我弄清楚了逻辑!
【问题讨论】:
-
假设您有两个列表中的任务(一个按开始时间排序,另一个按结束时间排序),并且您在每个列表中维护“当前”任务的索引。然后你知道下一次开始和下一次结束发生的时间。所以你只需要同时遍历数组并记住最大值。你可以用两个优先级队列做类似的事情,但这可能比排序数组慢(这只是一个猜测,你需要测量才能确定)。
-
@NicoSchertler 如果我同时通过排序数组,算法不会在线性时间内运行吗?
-
是的,但您必须先排序。因此,n log n。
-
@NicoSchertler 好的,谢谢!你知道 scala 中的 count 方法吗(我想它在 java 中是一样的)?它是快/慢吗? :)
-
我猜,它对你帮助不大。不知道它是如何实现的,但它的性能可能与简单的 for 循环相似。
标签: java algorithm scala priority-queue