Генерация таблицы правды
У кого-нибудь есть мысли о создании строки таблицы истинности без создания всей таблицы. Например, пользователь вводит номер строки, и эта строка таблицы истинности генерируется. Кроме того, это должно быть сделано без создания таблицы, пока вы не доберетесь до этого номера строки. По сути, я хочу знать, существует ли эффективный способ вычисления значения строки истинности только на основе строки таблицы истинности в качестве входных данных.
Пример: предположим, что 3 переменные printTruthTableRow(3) выдают 010
На самом деле, могу ли я просто преобразовать input-1 в двоичное значение, чтобы получить эту строку таблицы истинности?
РЕДАКТИРОВАТЬ: Позвольте мне дать вам немного больше опыта. Я написал базовый DPLL SAT Solver на Java. Моя цель состоит в том, чтобы запустить поток решателей для решения проблемы n-Queen. В настоящее время мой алгоритм генерирует строку таблицы истинности по одной, а затем передает ее в поток для решения. Проблема в том, что моя генерация таблицы истинности не может выполняться одновременно потоками. Если поток захватывает строку таблицы истинности, он должен заблокировать метод, сгенерировать строку и затем разблокировать. Я могу увеличить ускорение, если при создании строки таблицы истинности выполняется меньше работы. Я могу просто преобразовать значение атомного счета в двоичный файл и протестировать поток. Спасибо всем за ответы.
4 ответа
Будет ли первый ряд 0 или 1? Если 0, то вам просто нужно преобразовать номер строки в его двоичное представление, например, если у вас есть 3 логические переменные, сделайте что-то вроде
0 -> 0 0 0
1 -> 0 0 1
2 -> 0 1 0
3 -> 0 1 1
...
Затем используйте эти биты и вашу функцию истинности для вычисления результата.
Вам нужно знать функцию для генерации строки и какие значения во входах соответствуют этой строке. Когда вы знаете эти две вещи, реализация становится тривиальной.
Например, если функция - И, а строка 3 - 0,1, тогда строка - 0, 1, 0 И 1 - что составляет 0,1,0.
Но как узнать, какие значения имеют входы для этой строки? Это полностью зависит от того, как вы наметите таблицу, но это должно быть возможным для расчета по строке - возможно, с использованием битовых масок и операторов сдвига.
Вы можете использовать структуру данных, которая содержит только те строки, которые вы создали. Вы могли бы рассмотреть что-то вроде HashMap<int,boolean[] truthinfo>
, Остальное оставлено в качестве упражнения для спрашивающего.
Кажется, вы говорите немного о картографии.
если вас интересуют таблицы истинности, проверьте это.