Создайте логический вектор длины n с k истинно распределенными значениями - PullRequest
0 голосов
/ 08 ноября 2019

Проблема заключается в создании логического вектора длиной n с k true записями (и n-k false записями), хорошо рассредоточенными в векторе.

Если k = 5 иn = 8 Решения, созданные вручную: [1 0 1 1 0 1 0 1] или [1 0 1 0 1 0 1 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.

Как создать такой вектор?

1 Ответ

1 голос
/ 08 ноября 2019

Получите простейшую реализацию алгоритма Брезенхема и смоделируйте отрисовку отрезка линии с конечными координатами (0,0)-(ones,zeros). Это просто метод распространения ошибок.

Когда алгоритм генерирует изменение 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...