String 二进制字符串中的反转

String 二进制字符串中的反转,string,algorithm,binary,inversion,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 这是一个简单的递归函数。 假设我们知道n-1的答案。 在所有之前的序列之后,我们添加0或1作为第一个字符 若我们添加0作为第一个字符,这意味着倒数的计数将不会改变:所以答案将和n-1相同 若我们把1作为第一个

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

这是一个简单的递归函数。 假设我们知道n-1的答案。 在所有之前的序列之后,我们添加0或1作为第一个字符

若我们添加0作为第一个字符,这意味着倒数的计数将不会改变:所以答案将和n-1相同

若我们把1作为第一个字符,那个么倒数的平均计数将和之前一样,并且将在所有之前的序列中添加额外的倒数等于0的计数

长度为
n-1
的序列中的0和1计数将为:

(n-1)*2^(n-1)
其中一半为零,它将给出以下结果

(n-1)*2^(n-2)
这意味着我们有以下公式:

f(1) = 0
f(n) = 2*f(n-1) + (n-1)*2^(n-2)

这是一个简单的递归函数。 假设我们知道n-1的答案。 在所有之前的序列之后,我们添加0或1作为第一个字符

若我们添加0作为第一个字符,这意味着倒数的计数将不会改变:所以答案将和n-1相同

若我们把1作为第一个字符,那个么倒数的平均计数将和之前一样,并且将在所有之前的序列中添加额外的倒数等于0的计数

长度为
n-1
的序列中的0和1计数将为:

(n-1)*2^(n-1)
其中一半为零,它将给出以下结果

(n-1)*2^(n-2)
这意味着我们有以下公式:

f(1) = 0
f(n) = 2*f(n-1) + (n-1)*2^(n-2)

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

  • 以反复出现的方式解决问题(见托洛托夫的答案)
  • 构造并求解特征方程,得到具有任意常数的封闭式解(
    c1
    c2
    ,…,
    cn
    );事实上,你只会得到一个未知常数
  • 将一些已知解(例如
    f(1)=0
    f(3)=6
    )放入公式中,找出所有未知系数
  • 你应该得到的最终答案是

     f(n) = n*(n-1)*2**(n-3)
    

    其中,
    **
    表示提升权力(
    2**(n-3)
    n-3中的
    2
    )。如果你不想处理复发之类的问题,你可以通过归纳法来证明这个公式。

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

  • 以反复出现的方式解决问题(见托洛托夫的答案)
  • 构造并求解特征方程,得到具有任意常数的封闭式解(
    c1
    c2
    ,…,
    cn
    );事实上,你只会得到一个未知常数
  • 将一些已知解(例如
    f(1)=0
    f(3)=6
    )放入公式中,找出所有未知系数
  • 你应该得到的最终答案是

     f(n) = n*(n-1)*2**(n-3)
    

    其中,
    **
    表示提升权力(
    2**(n-3)
    n-3中的
    2
    )。如果你不想处理复发和类似的事情,你可以通过归纳法证明公式。

    你说的“反转”是什么意思?请展示一些努力。你能做出一个强力的解决方案吗?你所说的“反转”是什么意思?请展示一些努力。你能做一个蛮力解吗?再进一步,我们可以得到封闭式,它是
    f(n)=n*(n-1)*2^(n-3)
    ;如果一个人不想解特征方程之类的东西,他/她可以通过进一步归纳来证明这个解,我们可以得到一个封闭的公式,它是
    f(n)=n*(n-1)*2^(n-3)
    ;如果一个人不想解特征方程之类的东西,他/她可以用归纳法证明这个解