Как стать автором
Обновить
9
0

Пользователь

Отправить сообщение

Как найти показатель степени двойки за O(1) с помощью последовательности де Брёйна

Время на прочтение2 мин
Количество просмотров29K

Аперитив


Всем, наверное, известно, как посчитать количество бит в числе. Например, подойдут следующие два способа:
while (n)
{
    ++count;
    n &= (n-1);
}

while (n)
{
    if (n&1)
        ++count;
    n >>= 1;
}

Упражнение: какое в среднем количество операций будет выполнено в первой и во второй реализации?

Блюдо


Пусть у нас есть n-битное число вида 2^i. Нам необходимо найти i за O(1).
Как это сделать? Пусть n = 2^k. Построим последовательность де Брёйна (de Bruijn) над алфавитом {0,1} для подстрок длины k.

Что такое последовательность де Брёйна?

Читать дальше →
Всего голосов 60: ↑52 и ↓8+44
Комментарии49

Информация

В рейтинге
Не участвует
Откуда
Сент-Джонс, Антигуа и Барбуда, Антигуа и Барбуда
Зарегистрирован
Активность