Как решить такую задачу на булеву алгебру? Столкнулся с онлайн-тестом, есть некоторые непонятные для меня моменты в задаче.Какие утверждения справедливы для последовательности чисел, генерируемой алгоритмом? (только один ответ)for i = 0..2^k-1
output(i^(i>>1))
Где ^ - побитовый XOR
>> - сдвиг на один бит вправо
1. Следующее число всегда больше предыдущего
2. i-й бит следующего числа хранит сумму по модулю два всех битов предыдущего числа, номера чьих позиций меньше либо равны i.
b_i = ( \sum_{j=0} ^ {i} a_i ) % 2
3. Битовое представление следующего числа отличается от предыдущего только в одном бите.
4. Без первого элемента последовательность совпадает со следующей:
seq(2^k)
seq(2^k) = seq(2^{k-1}) 2^k seq seq(2^{k-1})
seq(1) = 1
Что я могу и уже сделал:
1. Взял некое k и получил последовательность промежуточных результатов, чтобы посмотреть. Это занимает большое время, очевидно тут надо работать не руками.
2. Понимаю, что такое xor
3. Понимаю, что сдвиг на один бит вправо даёт деление по модулю 2
4. Погуглил по синтаксису секвенций из ответов - не нашёл.
Мои вопросы:
1. Не понимаю синтаксис описанных секвенций, в гугле не нашёл, видимо не могу составить верный запрос по теме.
2. Не понимаю как быстро описать правило результирующей последовательности. Очевидно, что расписывать всю таблицу истинности для некоего k и искать потом закоомерность глазами - не то, что ожидается, учитывая, что на решение отводится минимум минут.
3. Видимо что-то не совсем знаю про свойства XOR в сочетании со сдвигом и вычитанием.
Помогите, пожалуйста, разобраться с принципом решения.
P.S. Я не хочу пройти тест за ваш счёт, в следующий раз вопросы всё равно будут другие. Моя задача - изучить тему и освоить подход.

21 Авг 2019 в 06:05
208 +1
1
Ответы
1

Давайте разбираться по порядку.

Утверждение 1: "Следующее число всегда больше предыдущего" - неверно. Примером может служить последовательность чисел 0, 1, 3, 2, 6, 4, 12, 7, 14, 8, 24, ...

Утверждение 2: "i-й бит следующего числа хранит сумму по модулю два всех битов предыдущего числа, номера чьих позиций меньше либо равны i" - верно. Это свойство побитовой операции XOR.

Утверждение 3: "Битовое представление следующего числа отличается от предыдущего только в одном бите" - неверно. В этом алгоритме битовое представление следующего числа отличается от предыдущего числа в нескольких битах.

Утверждение 4: "Без первого элемента последовательность совпадает со следующей" - верно. Так как seq(2^k) = seq(2^{k-1}) 2^k seq seq(2^{k-1}) - это свойство побитовой операции XOR.

Таким образом, единственным правильным ответом на ваш вопрос является утверждение 2.

20 Апр в 13:24
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 86 726 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир