【发布时间】:2015-02-21 07:02:57
【问题描述】:
假设我有一列有 N 节车厢的火车。每辆货车i 有n_i 牢房,而每个牢房有6 个座位。
现在假设 0 i 并希望坐在同一个牢房中。我想找到第一个在最坏情况下有足够空闲座位的合适单元O(log*n)。
系统初始化最多需要O(n)。
n=训练中的细胞总数。
我试图用 6*(货车数量)不相交的集合来解决这个问题,但是我很难维持这样一个复杂的解决方案。
PS:log*n 是一个迭代对数。
【问题讨论】:
-
在这种特殊情况下,您已经知道 wagon 和 n_i 会相当小(比如
-
这个问题纯属理论,因此你不能做出这样的假设。货车的数量和货车内的单元数可以是任意大的数字。
-
N是否与您的问题相关?在我看来,为一辆货车解决这个问题与为N解决它是相同的,因为您的查询仅针对特定的货车,对吧? -
确实,原来的问题比较复杂,所以我省略了一些细节。
-
为什么不使用单元格作为主要对象,将它们保存在 7 个列表/数组中。 Array 0-> Empty Cells... Array 6 -> 6 个席位。将所有其他信息标记到单元格(货车索引等)。如果您需要一个可容纳 3 人的单元格,您可以在该索引后面找到它。然后将单元格转移到新位置。