Здравствуйте. Я хочу решить задачу нахождения функционала, который для данной булевой функции выдает 1 бит. На данном этапе не столь важно какой это именно будет функционал, но он обязательно должен зависеть от всей функции целиком, а также легко вычисляться. Объясняю: любую булевую функцию
переменных можно представить в виде последовательности
бит. Данный функционал должен зависеть от всей этой последовательности. Проблема в том, что вся последовательность при больших
нам недоступна, поэтому необходимо найти способ составления такого функционала, который использует функцию так, как она задана, например, с помощью графа вычислений.
Первым (и самым очевидным) решением стала сумма всех выходов функции (по модулю 2). В моем случае, функция задается графом вычислений, узлами которого являются операторы AND, OR, NOT, XOR. Мною была выдвинута гипотеза, что, для выбранного узла, для входов которого данный функционал уже посчитан, можно также его посчитать. Основанием для этого послужило наблюдение, что, если данный узел соответствует оператору XOR, то результатом было бы применение этой операции к значениям функционала обоих входов. Но, к сожалению, у меня так и не получилось приблизиться к решению данной задачи для узла AND, который необходим для полной системы, и я полагаю, что это невозоможно. Также интересным наблюдением стало то, что значение данного функционала для узла равно 1 тогда и только тогда когда в полиноме Жегалкина, соответствующего данному узлу, коэффициент при последнем члене равен 1. Но применения я этому не нашел, т.к. в общем случае полином растет экспоненциально, что не позволяет эффективно использовать данный факт. ДНФ также построить не удастся, по этой же причине.
Самой успешной моей попыткой является следующее:
1) Выбираем первый бит из последовательности, соответствующей данной функции, соединяем его как-то с номером итерации алгоритма (то есть с 1) и хешируем это какой-нибудь хорошей хеш-функцией.
2) Полученный результат является индексом следующего бита, который мы также соединяем с номером итерации (то есть 2) и снова хешируем.
Повторяем это достаточное количество раз.
Таким образом получается функционал, который зависит от какой-то части выходов и эти выходы размазаны по всей последовательности (но он возращает не 1 бит в данном случае, однако всегда можно взять остаток от деления на 2).
Проблема в том, что данный функционал, как я сказал, зависит от какой-то части выходов, потенциально, очень маленькой в случае большого
.
Я бы хотел спросить у вас, знаете ли вы что-нибудь по данной теме? Знаете ли вы о подобных функционалах?
P.S. Термин "функционал" я здесь сам ввел и можете к нему не привязываться, просто использовал в значении "функция от функции".