Algorithm 贪婪算法:机器人
有什么想法吗?我试着把它画出来,缩小了你需要的机器人的最小数量,但我不知道如何用贪婪算法来表达它,或者如何证明它。这是我们讲座中的一个附加问题,所以我们不必知道如何做,但我觉得这是一个很好的练习。提前谢谢 或者更简洁地说:Algorithm 贪婪算法:机器人,algorithm,pseudocode,greedy,Algorithm,Pseudocode,Greedy,有什么想法吗?我试着把它画出来,缩小了你需要的机器人的最小数量,但我不知道如何用贪婪算法来表达它,或者如何证明它。这是我们讲座中的一个附加问题,所以我们不必知道如何做,但我觉得这是一个很好的练习。提前谢谢 或者更简洁地说: If there are coins to the right: go right Otherwise: go down 编辑: 要想知道该算法是最优的,因为它需要最少的机器人总数来清除棋盘,请注意,没有一个机器人的动作比最优机器人更差:“贪婪保持领先”。下面是一个让这个
If there are coins to the right: go right
Otherwise: go down
编辑:
要想知道该算法是最优的,因为它需要最少的机器人总数来清除棋盘,请注意,没有一个机器人的动作比最优机器人更差:“贪婪保持领先”。下面是一个让这个论点更正式的尝试:
设G为贪婪算法,R为任意最优算法
从单个机器人的角度来看,有一些硬币可以够得到。例如,从起始位置开始,所有硬币都在伸手可及的范围内(当然,有些硬币可能是相互排斥的)。当机器人r移动时,S的子集V对于r变得不可到达。很明显,对于任何单次移动,只需要一个额外的机器人来获取V中的所有硬币。因此,在某种意义上,最糟糕的单个移动将是V不为空,并且单次移动不可能导致算法需要两个或多个额外的机器人
对于G中的机器人,除非S为空,否则V始终是S的真实子集。换句话说,G不会做出任何“明显愚蠢”的动作。再加上G和R收集所有硬币的事实,我们发现机器人唯一有趣的不同之处是,他们在拿走同一枚硬币后做出不同的选择(向下或向右)
考虑机器人r in r和g in g的不同点。有两种可能性:
- 对于任何机器人:
- 右下看最近的硬币(使用出租车区
)min(deltaX,deltaY)
- 收集
- 从当前点开始,重复步骤1
只需在第一步“退出”一个看不到硬币的机器人。距离使用曼哈顿距离
While robot cannot move:
if robot is at right edge:
nextStep = down
if robot is at bottom edge:
nextStep = right
nextStep = F(right,down)
F(right,down):
if(distanceAll(right)<distanceAll(down))
return right
else return down
distanceAll(location):
return the sum of distance between this location to remaining coins
机器人无法移动时:
如果机器人位于右边缘:
下一步=下一步
如果机器人位于底部边缘:
下一步=右
下一步=F(右下)
F(右下):
如果(距离所有(右)反例:00=开始,23=结束,硬币在:10,01,02,03,12,22如果机器人从左上角开始,走到左下角,它不能向左移动,那么它只能向下移动。我认为第二个限制应该是机器人走到右下角。机器人知道硬币的位置,还是只是“绊倒”硬币行走?在任何情况下,你最多需要8个机器人:第一个机器人从0,0开始向右移动到边缘,然后向下移动。下一个机器人从0,0开始向下移动一行,然后向右移动到边缘,然后向下移动。下一个机器人向下移动两行,以此类推。如果机器人可以向前看,那么最坏情况下的机器人数量至少为(占用的行、占用的列)。也就是说,如果只有2行包含硬币,那么你只需要2个机器人。这很好,可能比我的答案更直观。可能也更容易证明最优。但需要始终以相同的方式打破联系,否则可能不是最优的。如果第一个机器人这样做,则不是最优的:不是我。谢谢你的回答。
While robot cannot move:
if robot is at right edge:
nextStep = down
if robot is at bottom edge:
nextStep = right
nextStep = F(right,down)
F(right,down):
if(distanceAll(right)<distanceAll(down))
return right
else return down
distanceAll(location):
return the sum of distance between this location to remaining coins