String 二进制字符串中的反转
长度为n的二进制字符串中有多少个倒数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作为第一个
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)
;如果一个人不想解特征方程之类的东西,他/她可以用归纳法证明这个解