Предположим, у меня есть логическая схема это вычисляет некоторую функцию , Предположим, что схема состоит из логических элементов И, ИЛИ и НЕ с максимальным и минимальным разветвлениями 2.
Позволять быть заданным входом. Данный а также Хочу оценить на входы, которые отличаются от в позиции одного бита, т. е. для вычисления ценности где такой же как кроме того, что его этот бит перевернут.
Есть ли способ сделать это более эффективным, чем независимая оценка? раз на разные входы?
Предполагать содержит ворота. Затем самостоятельно оценивая на все входы будут принимать время. Есть ли способ вычислить в время?
Необязательный контекст: если бы у нас была арифметическая схема (чьи ворота - умножение, сложение и отрицание) надтогда можно было бы вычислить производные по направлению в время. В принципе, мы могли бы использовать стандартные методы для вычисления градиента (правило обратного распространения / цепочки), ввремя. Это работает, потому что соответствующая функция непрерывна и дифференцируема. Мне интересно, можно ли сделать нечто подобное для логических схем. Булевы схемы не являются непрерывными и дифференцируемыми, поэтому вы не можете сделать то же самое, но, может быть, есть какой-то другой умный метод, который можно использовать? Может быть, какой-то трюк Фурье или что-то?
(Вариант вопроса: если у нас логические вентили с неограниченным разветвлением и ограниченным разветвлением, можете ли вы сделать асимптотически лучше, чем оценка раз?)
Ответы:
Я считаю маловероятным, что такой трюк легко найти и / или даст вам значительный выигрыш, поскольку он даст нетривиальные алгоритмы выполнимости. Вот как:
Прежде всего, хотя якобы проще, ваша проблема может на самом деле решить более общую проблему, учитывая схемуC а также N входные x0,…,xN−1 оценить C на всех входах быстрее, чем O~(N⋅|C|) время. Причина в том, что мы можем настроитьC в цепь C′ размера |C|+O~(Nn) который на входе 0i10N−1−i , выходы C(xi) , По сути, мы просто создаем небольшую таблицу поиска, которая отправляет0i10N−1−i в xi и подключите его к C ,
Нетривиальные алгоритмы для пакетной оценки булевых схем могут затем использоваться для создания быстрых алгоритмов выполнимости. Вот пример в простом случае, когда мы предполагаем, что у нас есть алгоритм, выполняющий оценку во времениO~(|C|2−ϵ+(N⋅|C|)1−ϵ/2+N2−ϵ) для любой постоянной ϵ>0 , На входе цепьC мы можем решить удовлетворяемость путем расширения C в цепь C′ размера 2n/2⋅|C| который является просто ИЛИ над всеми возможными вариантами первого n/2 входы в C (оставляя другие входы свободными). Затем мы проводим пакетную оценкуC′ на всем своем 2n/2 входы. Конечным результатом является то, что мы находим удовлетворительное назначениеC′ тогда и только тогда C выполнимо. Время работыO~(2(n/2)(2−ϵ)⋅|C|2−ϵ)=O~(2n(1−ϵ/2)⋅poly(|C|)) ,
источник