Sto provando a scrivere un pezzo di codice che può ridurre al minimo la LUNGHEZZA di un'espressione booleana, quindi il codice dovrebbe ridurre il numero di elementi nell'espressione al minimo possibile. In questo momento sono bloccato e ho bisogno di aiuto = [- Ridurre al minimo le espressioni booleane
Ecco la regola: ci può essere un numero arbitrario di elementi in un'espressione booleana, ma contiene solo operatori AND e OR, più parentesi.
Ad esempio, se passo un'espressione booleana: ABC + BCD + DE, l'uscita ottimale sarebbe BC (A + D) + DE, che salva 2 spazi unitari rispetto a quello originale perché i due BC sono combinati in uno.
La mia logica è che tenterò di trovare l'elemento più frequentemente apparso nell'espressione, e di tenerlo fuori. Quindi chiamo ricorsivamente la funzione per fare la stessa cosa con l'espressione fattorizzata fino a quando non viene completamente fattorizzata. Tuttavia, come posso trovare l'elemento più comune nell'espressione originale? Cioè, nell'esempio sopra, BC? Sembra che dovrei provare tutte le diverse combinazioni di elementi e trovare il numero di volte in cui ogni combinazione appare nell'intera espressione. Ma questo suona davvero ingenuo. Secondo
Qualcuno può dare un suggerimento su come farlo in modo efficiente? Anche alcune parole chiave che posso cercare su Google lo faranno.
Utilizzare la mappa di Karnaugh, Luke? –
@ Li-aungYip Ya Ci ho pensato, ma è solo se stai usando matite e carta, giusto? Come posso fare un codice computer che lo fa? – turtlesoup
Con le parentesi, BC (A + D) + DE e ABC + BCD + DE hanno la stessa lunghezza. Sto lavorando allo stesso problema in questo momento. Questo [collegamento] (http://babbage.cs.qc.edu/courses/Minimize/) ne parla un po 'sotto la sezione Minimizzazione algebrica. Penso che si stiano facendo dei passaggi che applicano le identità booleane alla formula. – douggard