使用n个动作强制执行O(n ^ 2)个操作(重新分配)

时间:2016-05-12 08:51:44

标签: performance dynamic-memory-allocation

我必须容纳一定数量的人(这里不相关)。

我有无数的房间,每个房间可以容纳两个人(从2,4,8,......)。而且,我一次只能买一个房间。

每次,房间太小,房间A 必须移动到更大的房间B 。当房间只有一半填满时,会发生相同的程序。在这种情况下,每个人都必须从房间B 移回房间A

现在有一个人违反我的策略并输入错误"进入/离开 - "行动,以便实际安置的人数是错误的(或多或少)。 我已经证明可以强迫O(n ^ 2)人改变房间 n"进入/离开" -actions (n是进入和离开的数量 - 动作)。

请注意,必须更改房间x次的人算作x次更换房间。

1 个答案:

答案 0 :(得分:0)

首先进行n / 2 pushBack操作

然后房间里有n / 2个人

然后做n / 4(pushBack + popBack)

对于每个pushBack,分配一个大小为n的房间,并且“复制”n / 2个人

对于popBack,分配一个大小为n / 2的较小房间,并将剩下的每个n / 2人复制到其中。

对于(pushBock + popBock) - 操作有n个操作完成(应对)

所有操作的总工作量(移动除外)在O(n)

这意味着对于n次操作,至少有(n / 4)* n =Θ(n ^ 2)复制操作