二进制字符串中的反转

时间:2017-01-05 09:56:28

标签: string algorithm binary inversion

长度为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

2 个答案:

答案 0 :(得分:3)

问题看起来像是一个家庭作业,这就是为什么让我省略细节。你可以:

  1. 将问题解决为重复性问题(参见Толя的答案)
  2. 弥补并解决特征方程,得到具有一些任意常数的闭合公式的解(c1c2,...,{{1} });事实上,你只需要一个未知的常数。
  3. 将一些已知的解决方案(例如cnf(1) = 0)放入公式中,找出所有未知系数
  4. 你应该得到的最终答案是

    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)