需要有关设计算法的建议

时间:2012-04-13 09:16:46

标签: algorithm

我正在设计一个如下工作的算法:

假设有N个槽最初是空的并且每个槽都是空的 slot是唯一编号的。

随着时间的推移,物品将到达并存入数字匹配的插槽中 物品的号码。但是,假定物品到达的顺序 随意。

同时,将定期执行合并算法以合并相邻的占用时隙,使得时隙越来越“连接”,并最终成为一个大的占用时隙,此时算法终止。

P.S。我的算法是串行的。合并部分在一定数量后定期激活 新的老虎机被占用了。

1 个答案:

答案 0 :(得分:3)

您可能正在寻找基于disjoint-set的内容。

n集合开始,每个集合用于空插槽,并在填充两个相邻插槽后“合并”[union]。这可以通过维护每个集合的每个根中的“最高”和“最低”字段来完成。

输入元素后,您需要查找其根[易于使用此数据结构],并将其与set[root.highest+1]set[root.lowest-1]合并 - 如果它们已经“填充”

每个合并还必须修改root.highest和root.lowest字段,但是一旦找到新的根,就可以在O(1)中轻松完成。

如果您实施disjoint set as forests,算法的初始化时间为O(n) [其中n为广告位数],每个插入操作均为O(alpha(n))其中{ {1}}是反ackerman function,它是次对数。

相关问题