用最短的一天达到目标的算法

时间:2015-10-23 05:12:43

标签: algorithm big-o divide-and-conquer

我遇到了这个问题,并不太确定如何处理它。

我想也许最好的方法是向东行驶1公里,然后向西行驶2公里,然后行驶3公里......依此类推,直到我们到达出口。

我们站在一条左右隧道的中间。离我们不到数K公里的地方就是出口。我们不知道出口是位于东部还是西部。也不知道距离出口的距离K.

我们想尽可能少地走进去。假设我们每天可以步行50公里。提供一种算法,确保我们在<input type="file" name="fileToUpload" id="fileToUpload"> 天内到达退出。认为你的算法是正确的。在一个例子中解释你的算法。

1 个答案:

答案 0 :(得分:3)

你走在正确的轨道上。你需要在向东和向西之间振荡,而不是将振幅增加1,每次加倍。

  1. 向西行驶1公里。
  2. 返回原位,往东走2公里。
  3. 回到家,向西走4km。 ...
  4. 这将确保您在O(K)天内到达出口。这是因为,如果K是2 ^ p,那么在到达出口之前,你将会行进最多的O(2 ^ p)km。

    例如:如果K = 2 ^ n + 1,最坏的情况可能是:
    1
    1 + 2
    2 + 4
    4 + 8
    8 + 16
    ...
    2 ^(n)+ 2 ^(n + 1)
    2 ^(n + 1)+ 2 ^ n + 1
    (O(9K))。