长度为n的二进制字符串中有多少个反转?
For example , n = 3
000->0
001->0
010->1
011->0
100->2
101->1
110->2
111->0
So total inversions are 6
答案 0 :(得分:3)
问题看起来像是一个家庭作业,这就是为什么让我省略细节。你可以:
c1
,c2
,...,{{1} });事实上,你只需要一个未知的常数。cn
,f(1) = 0
)放入公式中,找出所有未知系数你应该得到的最终答案是
f(3) = 6
其中 f(n) = n*(n-1)*2**(n-3)
表示上升为权力(**
2**(n-3)
权力2
。如果您不想处理重复性等问题,您可以通过 induction 来证明公式。
答案 1 :(得分:2)
很容易反复出现的功能。 假设我们知道n-1的答案。 在ato之前的所有序列之后,我们将0或1添加为第一个字符。
如果我们将0添加为第一个字符,表示不会改变反转计数:因此答案将与n-1相同。
如果我们添加1作为第一个字符,表示反转计数将与之前相同,并且将添加额外的反转等于0到所有先前序列的计数。
长度为n-1
的序列中的0和0的计数将为:
(n-1)*2^(n-1)
其中一半是零,它会给出以下结果
(n-1)*2^(n-2)
这意味着我们有以下公式:
f(1) = 0
f(n) = 2*f(n-1) + (n-1)*2^(n-2)