Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 - Fatal编程技术网

Algorithm 等待医生的算法问题

Algorithm 等待医生的算法问题,algorithm,sorting,Algorithm,Sorting,问题: 目前有n名患者在等待看医生。第i名患者需要的估计会诊时间为ti分钟,由分诊决定。只有一名医生,医生在任何时间点只能为一名患者提供服务,所有其他患者都必须等待。例如,如果医生服务的第一位患者的ti=5,则剩余的n−1所有患者必须再等待5分钟。您可以假设,一旦医生完成为患者提供服务,他将立即为下一位患者提供服务——在为两位患者提供服务之间的任何时间都可以忽略不计。医生可以按任何顺序为病人服务。医生必须为所有病人服务。医生希望尽量减少所有病人的总等待时间描述您能想到的最有效的算法,以确定为所有

问题:

目前有n名患者在等待看医生。第i名患者需要的估计会诊时间为ti分钟,由分诊决定。只有一名医生,医生在任何时间点只能为一名患者提供服务,所有其他患者都必须等待。例如,如果医生服务的第一位患者的ti=5,则剩余的n−1所有患者必须再等待5分钟。您可以假设,一旦医生完成为患者提供服务,他将立即为下一位患者提供服务——在为两位患者提供服务之间的任何时间都可以忽略不计。医生可以按任何顺序为病人服务。医生必须为所有病人服务。医生希望尽量减少所有病人的总等待时间描述您能想到的最有效的算法,以确定为所有患者提供服务所需的最小总等待时间。您的算法的运行时间是多少?

在建议的答案中,使用了贪婪的方法。 所有患者都按等待时间——O(N logn)排序。 为患者提供增加Ti--O(N)的服务。 总数:0(N对数N)

然而,我认为,在给定的限制条件下,要将总等待时间减至最少,只需为最后就诊时间最长的患者提供服务。 因此,我将通过n名患者进行一次检查,以找到会诊时间最长的患者P。第二次通过执行滚动求和以确定总等待时间,当我遇到患者P时,我将跳过该患者。这将需要O(n)


我可以知道这种方法有什么问题吗?

图3患者。一个在5分钟,一个在20分钟,一个病人在1小时。如果按升序排列,患者的总等待时间为25分钟。如果按降序排列,则总时间为2小时20分钟。因此,将列表按升序排序。现在你的问题是“什么是最有效的排序”。任何答案都取决于项目的大小、键和项目的数量。额外的现实约束:患者在等待过程中死亡,更多患者在8小时的治疗过程中到达,患者提出支付现金、双倍,等等。真正的分类也会重新安排优先顺序。接下来,有哪些硬件/系统/软件可用?如果是JAVA,则为timsort。如果Unix可能是qsort。我确信唯一合理允许添加项的排序技术是插入排序和合并排序。如果SQL创建表,则使用估计时间作为主键/索引。然后可以随意添加或删除患者/行。

您的方法将最长等待时间(而不是总等待时间)降至最低。不仅仅是最后一位患者需要等待,其他所有患者也都有等待时间(第一位除外),而您忽略了这一点。

如果我没有弄错的话,它实际上是O(n^2),因为您必须为每个人重复搜索整个列表。还是我误读了?嗨,谢谢你的评论!我只搜索整个列表一次,以找到最大咨询时间,因此这需要线性时间。然后我再次遍历整个列表,但执行滚动求和,这也需要线性时间。所以如果我没有错的话,我想应该是O(n)!交叉发布到。请为所有复制文本的来源提供适当的归属和信用。您说了很多,但甚至没有尝试回答OP的问题:他们的方法有什么问题?