![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
На днях обсуждали со
spamsink минимизацию булевских функций. Тема из далёкого студенчества. Задачка нетривиальная, но давно и глубоко проработанная. Озадачил нею Грока, получил два решения:
на Питоне: minimize-boolean-function.py
на Rust: minimize-boolean-function.rs
Функция с 8 переменными вычисляется на Rust за шесть секунд:
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
на Питоне: minimize-boolean-function.py
на Rust: minimize-boolean-function.rs
Функция с 8 переменными вычисляется на Rust за шесть секунд:
$ rustc minimize-boolean-function.rs
$ /usr/bin/time ./minimize-boolean-function
Truth table: 0000000000X10000000000000000000000000000000000000000000000000000010X010X010X010X010X010X010X010X010X010X010X010X010X010X010X010X00000000001X0000000000000000000000000000000000001X1X1X1X1X1X1X1X0000000000000000000000000000000000000000000000000000000000000000
8-variable result: ~ABH + ~B~C~DE~FG + A~BCD
6.26 real 6.22 user 0.03 sys
no subject
Date: 2025-06-11 01:48 (UTC)no subject
Date: 2025-06-11 02:13 (UTC)Truth table: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'X', 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 'X', 0, 1, 0, 'X', 0, 1, 0, 'X', 0, 1, 0, 'X', 0, 1, 0, 'X', 0, 1, 0, 'X', 0, 1, 0, 'X', 0, 1, 0, 'X', 0, 1, 0, 'X', 0, 1, 0, 'X', 0, 1, 0, 'X', 0, 1, 0, 'X', 0, 1, 0, 'X', 0, 1, 0, 'X', 0, 1, 0, 'X', 0, 1, 0, 'X', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 'X', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 'X', 1, 'X', 1, 'X', 1, 'X', 1, 'X', 1, 'X', 1, 'X', 1, 'X', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
8-variable result: ~ABH + ~ABH + ~ABH + ~ABH + ~ABH + ~ABH + ~ABH + ~ABH + ~ABH + ~ABH + ~ABH + ~ABH + ~ABH + ~ABH + ~ABH + ~ABH + ~B~C~DE~FG + A~BCD + A~BCD + A~BCD + A~BCD + A~BCD + A~BCD + A~BCD + A~BCD
real 0m12.881s
user 0m12.800s
sys 0m0.074s
no subject
Date: 2025-06-11 02:17 (UTC)https://github.com/sergev/vak-opensource/blob/master/languages/rust/qmc/src/minimizer.rs
Правда, имена переменных печатает неправильно, не с того конца.
no subject
Date: 2025-06-11 03:03 (UTC)Что за бардак?
no subject
Date: 2025-06-11 12:30 (UTC)no subject
Date: 2025-06-11 16:10 (UTC)Так что естественный ум в программировании всё ещё необходим.
no subject
Date: 2025-06-11 16:37 (UTC)no subject
Date: 2025-06-11 17:19 (UTC)no subject
Date: 2025-06-11 18:16 (UTC)no subject
Date: 2025-06-11 18:26 (UTC)no subject
Date: 2025-06-11 21:45 (UTC)no subject
Date: 2025-06-11 22:38 (UTC)no subject
Date: 2025-06-20 15:52 (UTC)Мое личное, ничем не подкрепленное мнение: минимизация булевских функций стала сильно пересекаться с криптографией и тему из паблика убрали.
Там еще можно как-то минимизировать через SAT solvers, но это руки не дошли.
А Квайна МакКласки я, замахавшись студентом рисовать карты Карно, написал на Basic на ПК-01 "Львов" влет, получил ответ и дурак выключил, лень было магнитофон подключать.
Через неделю на Spectrum повторить не смог.
no subject
Date: 2025-06-20 16:31 (UTC)Эспрессо известный тул, жаль не сопровождается больше. Многие пакеты используют espresso, к примеру pyeda. Из-за этого имеют проблемы с установкой.