Pull to refresh
9
0
Send message

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

Reading time2 min
Views30K

Аперитив


Всем, наверное, известно, как посчитать количество бит в числе. Например, подойдут следующие два способа:
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.

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

Читать дальше →
Total votes 60: ↑52 and ↓8+44
Comments49

Information

Rating
Does not participate
Location
Сент-Джонс, Антигуа и Барбуда, Антигуа и Барбуда
Registered
Activity