Вообразите две битовых маски, я буду просто использовать 8 битов для простоты:
01101010
10111011
2-е, 4-е, и 6-е биты оба 1. Я хочу выбрать одного из распространенных "на" битах наугад. Но я хочу сделать это в O (1).
Единственным путем я нашел, чтобы сделать, это до сих пор - выбор случайное "на" бите в одном, затем проверьте другой, чтобы видеть, включено ли это также, затем повторитесь, пока я не нахожу соответствие. Это все еще O (n), и в моем случае большинство битов выключено в обеих масках. Я делаю, конечно, и их вместе, чтобы первоначально проверить, существуют ли какие-либо общие биты вообще.
Существует ли способ сделать это? Если так, я могу увеличить скорость своей функции приблизительно на 6%. Я использую C#, если это имеет значение.Спасибо!
Mike