描述:将k个0插入由m个1组成的环中(k<=m),使得得到的新的环尽可能的均匀
例如 k = 5, m = 8.R1=[0000011111111] 明显不均匀
R2=[1010101010111] 稍微均匀,但是环中有连续的4个1
R3=[1011011010101] 比较均匀,但是环中11太密集
R4=[1011010110101] 最佳均匀方案
R1 简单的把0连续的插入环中,不均匀
R2 两个0中间用一个1隔开,最后却有连续的四个1,1的局部密度太大
R3 两个0中间用一个或两个1隔开,但是11的局部密度太大。
令a=11,R3=[a0a0a01010]
R4 是最优方案!
令a=11,R4=[a0a010a010]
从均匀性考虑:最后的方案中
1.不可能有两个相邻的0,因为k<=m,0少1多
2.连续的1的长度只能是 m/k or m/k + 1
还是以 k = 5, m = 8 为例,
首先将5个0和5个1配对,令b=01,这样还剩下三个1,问题变成把5个b插入3个1中的环中。
子问题出现了,而且递归结构应该是:
(5,8) -> (3,5) -> (2,3) -> (1,2) -> (0,1)
(k,m)=(0,1): A=[1]
(k,m)=(1,2): 一个0,两个1,任意方案都是一个方案,B=[1,1,0]
(k,m)=(2,3): 两个0,三个1,最佳方案,C=[1,0,1,0,1]
i)2个0和两个1配对,构成 10
ii)将方案B=[1,1,0]中的 1 用 10替换,0 用 1 替换,
于是得到了方案C=[1,0,1,0,1].
(k,m)=(3,5): 3个0,5个1,最佳方案,D=[1, 0, 1, 1, 0, 1, 1, 0]
同样,将方案C中的 1 用 10替换,0 用 1 替换,
于是得到了方案D.
(k,m)=(5,8): 5个0,8个1,最佳方案,
E=[1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1]
这种分配方法,和求最大公约数的辗转相除法是一样的,能保证最后的结果的均匀性。
以下给出最优结果的一些例子:
(k,m)=(2,4):[1, 1, 0, 1, 1, 0]
(k,m)=(2,5):[1, 1, 0, 1, 1, 0, 1]
(k,m)=(2,7):[1, 1, 1, 0, 1, 1, 1, 0, 1]
(k,m)=(3,7):[1, 1, 0, 1, 1, 0, 1, 1, 0, 1]
(k,m)=(5,7):[1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0]
以下是python代码:
#!/usr/bin/python
import sys
from sys import argv
#------------------------------------------
def uniformly(k,m):
if(k>m):return uniformly(m,k);
ans = [];
if(k==0):
return [1]*m; # m ones
res = uniformly(m%k,k);
d = m/k;
for i in res:
if i==1:
# 1 -> 1**10, append d ones and 1 zero
ans = ans + [1]*d;
ans.append(0);
else:
# 0 -> 1
ans.append(1);
return ans;
#------------------------------------------
def main():
if len(sys.argv) > 2:
k = int(sys.argv[1]);
m = int(sys.argv[2]);
print uniformly(k,m);
if __name__ == "__main__":
print('-----------');
main();
print('-----------');
续:01环的均匀分布性和以下这个函数的最大值密切相关
对于给定的n,令 2^r 为第一个大于3^n的数,那么
函数H(x,n)取最大值 当且仅当
i) x1 + x2 + ... xn = r
ii) xi = 1 or 2
iii) 向量x中的1和2分布是最均匀的
01环的均匀分布:寻找最佳插入策略
本文探讨了如何在包含m个1的环中均匀地插入k个0,以达到最均匀的分布状态。研究发现,这个问题与特定函数H(x,n)的最大值紧密相关。当2^r成为大于3^n的第一个数时,H(x,n)取得最大值的条件包括:x1+x2+...xn=r,xi取1或2,并且1和2在向量x中的分布最为均匀。"
112407537,10544879,Bootstrap4布局技巧:卡片居中与响应式设计,"['前端开发', 'Bootstrap', 'CSS', 'HTML', '响应式布局']
16

被折叠的 条评论
为什么被折叠?



