Недавно я прочитал интересный нить в группе новостей D, которая в основном просит,
Учитывая два (подписанных) целых числа a & isin; [a min, a max], b & isin; [b min, b max], что является самым трудным интервалом для | б?
Я думаю, что если интервальная арифметика может быть применена к общим побитовым операторам (предполагая бесконечные биты). Побитовые NOT и сдвиги тривиальны, так как они просто соответствуют -1 & минус; x и 2 n x. Но побитовое-AND/OR намного сложнее из-за сочетания поразрядных и арифметических свойств.
Существует ли алгоритм полиномиального времени для вычисления интервалов побитового-AND/OR?
Примечание:
- Предположим, что все побитовые операции выполняются в линейном времени (количества бит), а test/set бит - постоянное время.
- Алгоритм грубой силы работает в экспоненциальном времени.
- Поскольку
~(a | b) = ~a & ~b
, решение проблемы с поразрядным и -NOT подразумевает поразрядное ИЛИ. - Хотя содержание этого потока предполагает min {a | b} = max (a min, b min), это не самая узкая граница. Просто рассмотрите
[2, 3] | [8, 9] = [10, 11]
.) - На самом деле для работы с беззнаковой арифметикой достаточно, так как мы можем разбить подписанный интервал на отрицательные и неотрицательные подмножества и использовать законы Мормага и коммутативность только побитовые-AND, -OR и -AND-NOT случаи на неотрицательных интервалах должны быть решен.