Bit Vectors/Bitmaps - объясните как пользоваться данным ресурсом, если можно с примерами
Есть задача на https://www.codewars.com/kata/59f8dd1132b8b9af150001ea/train/python где нужно применить данный ресурс:
Описание задания: Растровая карта - это один из способов эффективного представления наборов уникальных целых чисел с использованием отдельных битов. Чтобы увидеть, как это работает, мы можем представлять набор уникальных целых чисел между
0
<20
с использованием вектора/массива 20 бит:`var set = [3, 14, 2, 11, 16, 4, 6];`
`var bitmap = [0, 0, 1, 1, 1, 0, 1, 0, 0,0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0];
`Как видите, с помощью растрового изображения длина вектора представляет диапазон уникальных значений в наборе (в данном случае
0-20
), а0/1
представляет, является ли текущий индекс равным к значению в наборе.Задача:
написать функцию
tobits
, которая примет набор из целых чисел Uniqe и выведет бит-вектор/растровый карту используя1
и0
для представления значений Вход: Функция будет передана набор уникальных целых чисел в строковой форме, в случайном порядке, разделенных по разрывам линии. Можно ожидать, что каждое целое число будет иметь уникальное значение> = 0
и<5000
. Ввод будет выглядеть так:lete anvessInput = '3 \ n14 \ n5 \ n19 \ n18 \ n1 \ n8 \ n11 \ n2 ...'
`Выход: Ожидается, что функция выведет 5000 -битный вектор (массив) битов, либо
0
, или1
, например:Let anvessOutput = [0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, ...]
Я нашёл в Инете - что можно какому то элементу из представленного набора данных присвоит бит 1 или 0 и по этому биту отслеживать - находится ли данный элемент в наборе или нет Допустим число 3 "011" - какому нужно биту присвоить 1 или 0 и как это делать
На ресурсе https://redis.io/docs/data-types/bitmaps/ поясняется работа с базой данных "redis" там описаны команды
import redis
r = redis.Redis(decode_responses=True)
res1 = r.setbit("pings:2024-01-01-00:00", 123, 1)
print(res1) # >>> 0
res2 = r.getbit("pings:2024-01-01-00:00", 123)
print(res2) # >>> 1
res3 = r.getbit("pings:2024-01-01-00:00", 456)
print(res3) # >>> 0
r.setbit("pings:2024-01-01-00:00", 123, 1)
res4 = r.bitcount("pings:2024-01-01-00:00")
print(res4) # >>> 1
где показаны примеры использования bitmaps - пример про велосипедистов - отслеживание по присвоенному биту - прошёл ли он промежуточную отметку или нет - 1 значит прошёл 0 - не прошёл
Тоже и на сайт какие посетители из зарегистрированных заходили
А можно ли без базы данных "redis" применять bitmaps
Если можно показать на примере - как устанавливать биты 0 или 1 - допустим на символы из списка
или на цифры
Если можно подскажите какую литературу просмотреть - меня заинтересовала данная задача
На redis.io/docs не так всё понятно.
Как же создать - растровую карту????