计算多项式时间内最小运算的期望值

时间:2017-12-02 13:48:32

标签: algorithm math dynamic-programming

最近我遇到了一个有趣的问题,它花了我几天的思考但我找不到多项式时间解决方案。所以我决定与你分享:

S = {s1,s2,...,sn}   0 <= si <= 3
T = {t1,t2,...,tn}   0 <= ti <= 1

现在我们想要以满足以下条件的方式更改S的元素:

t1 = s1 mod 2
ti = (si mod 2) xor ( floor(0.5 * s(i-1)) )      2 <= i <= n

允许的唯一操作是将si增加或减少1或让它保持不变。目标是找到满足S和T的上述等式的最小增加或减少操作次数。对于任何给定的S和T,可以使用O(n)中的动态编程简单地完成此任务。

主要问题是&#34;每个给定n的最小操作的期望值是多少?&#34;。第一个想法是在计算每对的最小运算之后,为给定的n生成S和T的每个序列,计算预期值或平均值。但这是在O(n8^n)中运行的。是否有像DP这样的多项式时间算法来解决这个问题?

0 个答案:

没有答案