Minimalną liczbę bramek można znaleźć tylko w sieci wielopoziomowej, rozwiązując problem z programowaniem liczb całkowitych [lub odpowiedniki, patrz poniżej]. Ten problem jest NP-zupełny, więc praktyczne jest rozwiązanie tylko kilkunastu bramek.
Istnieją metody aproksymacyjne, które nie dają minimalnej liczby, ale są łatwiejsze do opanowania pod względem wymaganego czasu ... Są to same w sobie obszerne tematy, w zasadzie całe pole optymalizacji wielopoziomowej. Można przeczytać [Free] przegląd tutaj .
W przypadku małych sieci NAND (do 4 zmiennych) problem został całkowicie rozwiązany przez wyczerpujące wyliczenie [lub równoważne metody]. Istnieje dość niedawna rozprawa doktorska [2009] Elizabeth Ann Ernst, która podsumowuje starożytne wyniki i je rozszerza. Ernst używa rozgałęzień, co poprawia wyczerpującą metodę w praktyce, ale nie asymptotycznie. Zauważa również, że inne metody wyliczania domyślnego, takie jak programowanie liczb całkowitych lub CSP (spełnienie ograniczeń, rozwiązane przez SAT) działają gorzej w praktyce.
Oczywiście napisała oprogramowanie dla swojej metody (zwane BESS), ale nie jestem pewien, czy jest to gdzieś publicznie dostępne. Pełny tekst jej pracy dyplomowej jest dostępny bezpłatnie na stronie umich . I rzeczywiście znalazłeś minimalne wyrażenie dla xor 2-wejściowych (oczywiście twój drugi), ten wyróżniony poniżej:
Porównała również dokładne wyniki (dla NAND) z wynikami heurystycznego optymalizatora z ABC .
ABC udało się stworzyć optymalną sieć dla 340 z 4043 funkcji, w których znana jest optymalna sieć. Dla tych funkcji, w których ABC nie stworzył optymalnej sieci, była ona średnio o 36% większa niż optymalna sieć [.]
Istnieją (oczywiście) niektóre [większe] sieci, dla których BESS nie zakończył, ale umożliwił znalezienie górnej granicy (w punkcie, w którym wyszukiwanie zostało porzucone). Dla tych ABC wypadło całkiem dobrze [dobrze w odniesieniu do znalezionych granic], jak widać na drugim wykresie poniżej.