找到最短时间

Find the minimum time

问题陈述是->

我们想用两台扫描仪扫描N份文件。设S1和S2分别为扫描仪1和扫描仪2扫描单个文档所用的时间,求扫描完所有N个文档所需的最短时间

示例:-

S1 = 2,S2 = 4,N = 2

输出:4

解释:这里有两种可能。 在扫描仪 1 中扫描两个文档或 在每台扫描仪中扫描一份文件。 在这两种情况下,所需时间都是 4.

我想出了一个解决方案,我们找到所有的组合并将它们插入到集合中。最小值将是集合中的第一个元素。

问题是解决方案的时间复杂度为 O(n),但可接受的时间复杂度为 O(logn)。

我正在考虑二分查找的思路,但想不出一个解决方案。

方法应该是什么?

如果您可以扫描文档的一小部分,最快的方法是在扫描仪 1 中扫描 N*S2/(S1+S2) 个文档,在扫描仪 2 中扫描 N*S1/(S1+S2) 个文档。如果这些不是整数,您必须将其中一项向上舍入,将其中一项向下舍入,这样您就可以检查两种可能性。这是 O(1),而不是 O(log n)。

好吧,我正在分享 O(log n) 方法。通过对 ans / time 进行二分查找,我们可以找到最佳时间。

对于二分查找,我们需要上界和下界。假设下限为 0。现在我们需要找出上限。

如果我们用一台扫描仪扫描所有文件,最少需要多少时间。它将是 min (S1,S2) * N,对吗?注意:这里我们没有使用其他扫描仪,它可以在另一个扫描仪忙时扫描文档。所以 min(S1,S2) * N 将是我们的上限。

我们已经到了极限,

下限 = 0

上限 = min(S1,S2) * N

现在按时做 BS,中途检查并检查扫描仪 1 扫描仪 2 在中途可以扫描多少文档。每当扫描文档总数 >= N 时,mid 可能是 ans .

你可以从这里查看 BS - https://www.hackerearth.com/practice/algorithms/searching/binary-search/tutorial/