[#] Максимальное XOR
habrabot(difrex,1) — All
2014-12-17 19:30:03


Здравствуй, Хабр. И сразу к делу. Задача: _Есть два целых числа: **L** и **R**. Нужно найти максимальное значение **A** [xor][1] **B** на промежутке** [L; R]**, где **L ≤ A ≤ B ≤ R**._ Казалось бы ничего сложного. Сразу напрашивается решение простым перебором.

public int BruteForce(int one, int two)
{
int maxXor = 0;
while (one < two)
{
int oneTemp = one + 1;
while (oneTemp <= two)
{
int curXor = one ^ oneTemp;
if (maxXor < curXor) maxXor = curXor;
oneTemp++;
}
one++;
}

return maxXor;
}




Сложность этого решения O(n) = n. А что, если в интервале будет 1000000 чисел. Возьмем L = 1, а R = 1000001. Сколько времени понадобится cреднестатистическому компьютеру для того, чтобы посчитать максимальное значение xor на этом интервале? Моему ноутбуку потребовалось 1699914 миллисекунд. Существует решение, которое работает значительно быстрее, именно о нем и пойдет речь в этой статье. ![image][2] [Читать дальше →][3]

[1]: http://en.wikipedia.org/wiki/Exclusive_or
[2]: http://habrastorage.org/files/8c1/1c9/dde/8c11c9dde9b94df598c4ddd300a34ca7.png
[3]: http://habrahabr.ru/post/245801/#habracut