【问题标题】:Suggestions on designing an algorithm are needed需要有关设计算法的建议
【发布时间】:2012-04-13 09:16:46
【问题描述】:

我正在设计一种算法,其工作原理如下:

假设有 N 个插槽,它们最初是空的,每个插槽 插槽编号是唯一的。

随着时间的流逝,物品会到达并存放在编号匹配的插槽中 物品的编号。但是,假定物品到达的顺序为 随意。

同时,会定期执行合并算法来合并相邻的占用槽,这样槽会随着时间的推移越来越“连接”,最终成为一个大的占用槽,此时算法终止。

附:我的算法是串行的。合并部分在一定次数后定期激活 的新插槽已被占用。

【问题讨论】:

  • 查看插槽的容量?另外,合并任意两个相邻插槽的标准是什么
  • @Dzire,容量可以忽略,因为一个插槽将与一个项目以一对一的方式匹配。

标签: algorithm


【解决方案1】:

您可能正在寻找基于disjoint-set 的东西。

n 集合开始,每个集合对应一个空槽,然后在填满两个相邻槽后“合并”[联合]它们。这可以通过在每个集合的每个根中维护“最高”和“最低”字段来完成。

一旦你输入了一个元素,你需要找到它的根[用这个数据结构很容易做到],并将它与set[root.highest+1]set[root.lowest-1]合并——如果它们都已经“填充”了。

每次合并还必须修改 root.highest 和 root.lowest 字段,但在找到新根后,这可以在 O(1) 中轻松完成。

如果实现disjoint set as forests,算法的初始化时间为O(n)[其中n为槽数],每次插入操作为O(alpha(n))其中alpha(n)为逆ackerman function , 是次对数。

【讨论】:

  • 非常感谢您提供的信息,看起来很有希望。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 2011-11-13
相关资源
最近更新 更多