Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 将项目临时分配给人员并处理任务重组的算法_Algorithm_Sorting_Organization - Fatal编程技术网

Algorithm 将项目临时分配给人员并处理任务重组的算法

Algorithm 将项目临时分配给人员并处理任务重组的算法,algorithm,sorting,organization,Algorithm,Sorting,Organization,假设我们有三台设备,我们根据人们要求的日期借给他们。当前程序会在用户请求时自动为其分配设备ID。该算法的工作方式是首先检查所有设备的状态,以查看是否有未请求的设备。如果是这样,它只会将其分配给请求者 如果所有设备已被请求一段时间,它将检查是否有任何设备的请求日期与新请求不重叠。如果这是真的,它将请求该设备 我想写另一个算法,在设备分配更有效的情况下运行。例如: Device 1: ####--##---###### Device 2: ----###-###------ Device 3: --

假设我们有三台设备,我们根据人们要求的日期借给他们。当前程序会在用户请求时自动为其分配设备ID。该算法的工作方式是首先检查所有设备的状态,以查看是否有未请求的设备。如果是这样,它只会将其分配给请求者

如果所有设备已被请求一段时间,它将检查是否有任何设备的请求日期与新请求不重叠。如果这是真的,它将请求该设备

我想写另一个算法,在设备分配更有效的情况下运行。例如:

Device 1: ####--##---######
Device 2: ----###-###------
Device 3: ---##---####-----
现在让我们假设另一个用户出现并请求一个设备,该设备排列如下:

Device #: --------####-----
Device 1: ####--##---######
Device 2: ----###-###------
Device 3: ---##---####-----
在目前的系统中,他们运气不佳,因为在这段时间内没有可用的设备。但是,如果算法能够查看这三个设备,它可以将保留从设备2移动到设备1上的开放插槽,然后通过给它们设备2来填充请求,最终看起来像:

Device 1: ####--###########
Device 2: ----###-####-----
Device 3: ---##---####-----

假设单个请求不能跨越多个设备,我将如何重新组织这些请求?

贪婪算法可以最大限度地提高设备利用率:

如果有人请求设备进行间隔a、b,请从设备1开始,并检查设备是否在a、b期间的某个时间可用。从设备1空闲的a、b中减去这些间隔,并在这些时间段中将其标记为“已采取”。如果原始间隔没有留下任何内容,那么您就完成了;否则,继续使用设备2,剩余的时间间隔可能还有多个不相交的间隔

当然,这可能意味着一个给定的请求将由多个设备来完成,因此,例如,如果我想租赁一个设备整整一周,我可能必须在周一到周三使用设备1,然后在周三到周五归还它并使用设备2。

怎么样

initialize device end times to 0 (or some non-zero time if the device is in use)
sort the intervals by end time
for each interval
{
   assign the interval to the device
     a) whose end time is less than the interval start time (no overlap)
     b) has the minimum gap between the device end time and the interval start time
   update the device end time
}
使用问题中的示例,按结束时间排序的间隔为:

1 - [1,4]
2 - [4,5]
3 - [5,7]
4 - [7,8]
5 - [9,11]
6 - [9,12]
7 - [12,17]
该算法将间隔分配给两个设备,如下所示

time:     12345678901234567
Device 1: 1111333-6666-----
Device 2: ---22-44555777777

间隔1可分配给任一设备。由于无重叠规则,分配了间隔2、3和4。间隔5是根据最小间隙规则指定的。然后根据无重叠规则分配6和7。

我应该添加一个要求,即用户的请求不能扩展到多个设备。如果没有可能的答案,他们将无法满足请求,但算法应确保没有可能的答案。@Tom:哦,好的。在这种情况下,需要计算与请求相对应的区间图的顶点着色: