堆算法问题

时间:2014-06-05 14:55:00

标签: algorithm haskell functional-programming heap

我有这个算法问题,我想讨论一下。不是       关于找到解决方案,但关于运行时的优化。所以这就是:

  

假设我们有一个长度为L 的比赛场地和一共 N辆参赛     在比赛中。比赛规则很简单。一旦汽车超过另一辆车的第二辆     汽车被淘汰出局。当不再有可能超车时,比赛结束     发生     棘手的部分是第k辆汽车有一个起始点点x [k] 和一个     速度v [k] 。点数按升序给出,但速度     可能有所不同

到目前为止我做了什么:

  

鉴于汽车只能被之前的汽车超越,我计算了时间     每辆车都要到达下一辆车

t = (x[i] - x[i+1])/(v[i] - v[i+1])
     

我将这些时间插入到 O(n log n)的最小堆中     所以理论上我必须弹出 O(logn)中的第一个元素,找到它的前一个,     弹出它,更新它的时间并再次将它插入堆中     像一个优先级队列。我的主要问题是如何访问a的特定点     以O(log n)或更快的速度堆积以保持O(n log n)级别的复杂性     这个程序应该写在Haskell上,所以我想保持简单     尽可能

编辑:我忘了写比赛的实际观点。目标是找到汽车退出游戏的顺序

0 个答案:

没有答案