贪心算法伪代码

时间:2013-07-25 04:33:52

标签: algorithm pseudocode greedy

假设您必须从伊斯兰堡开车到拉合尔。一开始,你的油箱已满。您的油箱装满后,可以保持足够的气体行驶m英里,并且您有一张地图可以显示沿途加油站之间的距离。让d1 < d2 < … < dn成为沿途所有加油站的位置,其中di是从伊斯兰堡到加油站的距离。相邻加油站之间的距离最多为m英里。此外,最后一个加油站和拉合尔之间的距离最多为m英里。

你的目标是尽可能减少气体停留。给出一个贪婪的算法(伪代码形式)来确定你应该停在哪个加油站。

您的解决方案是否最佳?您的解决方案的时间复杂度是多少?

1 个答案:

答案 0 :(得分:2)

该算法从伊斯兰堡开始,并在不耗尽气体的情况下反复尝试驾驶。

current_distance = 0
current_stop = 0
stops = []
while current != lahore:
  next_stop = 0
  while distance(next_stop) - current_distance <= m:
    next_stop = next_stop + 1
  next_stop = next_stop - 1

  current_stop = next_stop
  current_distance = distance(current_stop)
  add next_stop to stops
return stops

这是一种最佳解决方案。为了看到这一点,我们注意到任何减少停止然后贪婪算法的停止序列都必须在路径的某个点“传递”贪婪算法。

使用归纳法,我们可以看到,如果贪心算法在第一次停止后是最远的,并且在第n次停止之后它是最远的,它可以被给予停止n - 1,那么贪心算法必须是它最远可以是沿途的所有站点。

尽管该算法具有复杂度O(n)并且在计算上返回最优解,但是它返回的路线可能不是非常“均匀”或“平滑”的路线。为了产生人们实际使用的路线,需要考虑更多均匀地停留其路线的路线。