编程实现机器人相遇

  今天去面试遇到这个问题,有俩个机器人在一个二维世界里面只有上下左右,机器人只能执行三个命令:left right 和check(检测是否相遇)。问如何才能让机器人相遇。当时面试官问题没有问完善,他告诉我俩个机器人的程序一模一样。但是我回来看了下这个问题其实是考验算法的一个问题但是他实在是误导我。答案是让其中一个不动另一个开始执行搜寻搜寻的方式是 left+1 找不到就回去原地然后right+1然后在left+2在回去right+2如此往复直到找到。假设A、B之间的距离为n,那么我们可以简单地算出A、B相遇的时间复杂度为O(n^2)。

  下面这个是我在人人上找到的更详细的解释

那有没有更优的方法呢?我想起了c++ stl里面的vector的扩张策略,每次扩张到原来的1.5倍,最终的时间负责度比每次扩展一个要优一些。那我们这里也一样,搜索的序列不再是线性增加了,而是采用指数增加的方式。比如可以按如下序列进行:-1,+1,-2,+2,-4,+4,-8,+8,-16,+16,……。这样时间复杂度就是O(n lgn)了。

另外他还问到如果有三个异步的方法A B C,其中C需要A B执行完毕后执行请问如果实现。哈哈,我要去找答案了。我发现面试很能学习东西啊。

posted on 2014-03-19 19:51  cjl416545857  阅读(450)  评论(1编辑  收藏  举报

导航