快速编码平衡向量


10

很容易看出,对于任何,存在从{0,1}到{0,1}的1-1映射,使得对于任何,向量是“平衡的”,即它具有相等的1和0。是否可以定义这样的以便在给定我们可以 有效地计算?F n n + O log n x F x F x F x nFnn+O(logn)xF(x)FxF(x)

谢谢。


我以为“有效”是指O(n)或大约等于(排除“重复随机试验”的论点)?
Suresh Venkat 2010年

@Suresh,您能否概述“重复随机试验”的论点?
埃米尔(Emil)2010年

证明映射存在的一种方法是通过概率方法:随机选择F,然后以一定的概率进行映射。我正是这个意思。
Suresh Venkat 2010年

1
这个问题定义得很清楚,但我认为标题是误导的。除非F是双射的,否则我不会将满足所述条件的映射F称为“平衡矢量的编码”。它更像是通过平衡向量对n位字符串进行编码。
伊藤刚(Tsuyoshi Ito)2010年

我的意思是,“完全定义明确”,甚至可能对“有效”做出不同的解释。但这不是我先前评论的重点。
伊藤刚(Tsuyoshi Ito)2010年

Answers:


12

让我们考虑位字符串。定义:Xnx

  • x if(x,i) =位串,后位为补码。xi
  • x x xb(x) =的“不平衡”:1秒的数量中的0的数目。xx x

现在修复字符串。考虑函数。观察结果:g i = b f x i xg(i)=b(f(x,i))

  • g(0)=b(x)
  • g(n)=g(0)
  • |g(i)g(i+1)|=2对于。我们要么删除一个0,再添加一个1,反之亦然。i

现在得出存在一个使得。- 1 + 1i1g(i)+1

因此,我们可以构造一个位字符串,如下所示:连接和索引的二进制编码。不平衡的绝对值为。而且,给定,我们可以恢复;映射是双射的。y(n+O(logn))yi y O log n x yf(x,i)iyO(logn)xy

最后,您可以添加虚拟位,以将的不平衡度从到。y O log n 0O(logn)yO(logn)0


第三行中的b(x)应该是b(y)。
埃米尔(Emil)2010年

我认为您可能需要在字符串x上再加上一点,以确保它具有偶数长度(以便可以确定对于某些i,g(i)为零)。
埃米尔(Emil)2010年

@Emil:我并不是说对于某些i为零;g i 的绝对值对于某些i来说“相当小” 就足够了(最多对数就足够了,但是很容易证明对某些来说它最多为1)。g(i)ig(i)i1i
Jukka Suomela 2010年

@Jukka:是的,我明白了。
埃米尔(Emil)2010年

1
但是,是的,您是对的,同一基本方法有很多变体。例如,按照您的建议,您可以首先使用填充位来确保对于某些i等于零;那么您可以使用位对0110编码i,即额外增加2 log n 位;则串联的结果是严格平衡的,您无需添加其他任何内容。g(i)ii01102log(n)
Jukka Suomela 2010年

9

使用保留词典顺序的映射。要找到具有n / 2 1的第个长度为n的平衡矢量,请递归执行:如果,则将第一个位设置为0,然后找到第个长度- 具有 1的向量,以完成剩余的位。否则,设置第一个位1并找到具有 1的 -th个长度-向量。knn/2ķñ-1ñ/2Ñ-1ķ- k(n1n/2)k(n1)n/2n1k(n1n/2)(n1)n/21


1
而且,如果您重用二项式系数的值来计算下一个所需的二项式系数,则整个算法的运行时间为O(n)。
伊藤刚(Tsuyoshi Ito)2010年

谢谢!这是有道理的。我想运行时间将取决于计算模型。如果您可以在单位时间内对n位数字执行运算,则伊藤刚的实现将在O(n)时间运行。另一方面,我认为如果计算位操作的时间将为O(n ^ 2)。
Piotr
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.