Math 创建长度为n且k个真值分散的布尔向量

Math 创建长度为n且k个真值分散的布尔向量,math,sequence,Math,Sequence,问题是创建长度为n的布尔向量,其中ktrue条目(以及n-kfalse条目)在向量中分散得很好 如果k=5和n=8手动创建的解决方案是[1 0 1 1 0 1 1][/code>或[1 0 1 0 1 1 1 1]等 带有分散性不好的条目的向量的示例是[1 1 0 0 0 0] “良好分散性”的一个可能标准是具有交替的零块和长度大致相同的一块-具体地说是一块大小floor(n/k)或floor(n/k)+1和零块大小floor(n/(n-k))或floor(n/(n-k))+1 如何创建这样一个

问题是创建长度为
n
的布尔向量,其中
k
true
条目(以及
n-k
false
条目)在向量中分散得很好

如果
k=5
n=8
手动创建的解决方案是
[1 0 1 1 0 1 1][/code>或
[1 0 1 0 1 1 1 1]

带有分散性不好的条目的向量的示例是
[1 1 0 0 0 0]

“良好分散性”的一个可能标准是具有交替的零块和长度大致相同的一块-具体地说是一块大小
floor(n/k)
floor(n/k)+1
和零块大小
floor(n/(n-k))
floor(n/(n-k))+1


如何创建这样一个向量?

获取最简单的实现,并模拟绘制具有端点坐标的线段
(0,0)-(1,0)
。这只是错误传播方法

当算法生成X坐标变化(X步)时,它对应于1个条目,Y步对应于零位

def Distribute(ones, zeros):
    leng = ones + zeros
    err = leng // 2
    res = []
    for i in range(0, leng):
        err = err - ones
        if err < 0 :
            res.append(1)
            err = err + leng
        else:
            res.append(0)
    print(res)

Distribute(5,3)
[1, 0, 1, 0, 1, 1, 0, 1]
def分配(一,零):
长度=一+零
err=leng//2
res=[]
对于范围(0,长度)内的i:
err=err-one
如果误差<0:
决议附件(1)
错误=错误+长度
其他:
res.append(0)
打印(res)
分发(5,3)
[1, 0, 1, 0, 1, 1, 0, 1]

一个可能的标准。。。有很多可能的标准,你必须指定一个,并解释你在这个问题上有什么困难。这很好!这个版本的Bresenham算法能保证创建一个精确的
k
个数的向量吗?或者我需要检查结果吗?由此可以得出derived@mschauer我希望是的。但也可以使用另一个带有显式循环X的实现