sfondo
Un albero di decisione binario è un albero radicato dove ogni nodo interno (e radice) è etichettato da un indice tale che nessun percorso dalla radice alla foglia ripete un indice, le foglie sono etichettate dagli output in e ogni bordo è etichettato da per il figlio sinistro e per il figlio destro. Per applicare un albero a un input :
- Inizia dalla radice
- se si è in foglia, si produce l'etichetta foglia o e termina
- Leggi l'etichetta del tuo nodo corrente, se x j = 0 quindi passa al figlio sinistro e se x j = 1 quindi passa al figlio destro.
- vai al passaggio (2)
L'albero è usato come un modo per valutare una funzione, in particolare diciamo che un albero rappresenta una funzione totale f se per ogni x ∈ { 0 , 1 } n abbiamo T ( x ) = f ( x ) . La complessità della query di un albero è la sua profondità e la complessità della query di una funzione è la profondità dell'albero più piccolo che lo rappresenta.
Problema
Dato un albero decisionale binario T emette un albero decisionale binario T 'di profondità minima tale che T e T' rappresentino la stessa funzione.
Domanda
Qual è l'algoritmo più noto per questo? Sono noti limiti inferiori? E se sappiamo che la ? Che dire se richiediamo che T ′ abbia una profondità approssimativamente minima?
Approccio ingenuo
L'approccio ingenuo è dato per enumerare in modo ricorsivo tutti gli alberi di decisione binaria di profondità D - 1 durante il test se si valutano per la stessa cosa di T . Questo sembra richiedere O ( d 2 n n !passi (supponendo che siano necessaridpassi per verificare a cosaT(x)valuta per unaxarbitraria). C'è un approccio migliore?
Motivazione
Questa domanda è motivata da una precedente domanda sul compromesso tra complessità della query e complessità temporale . In particolare, l'obiettivo è limitare la separazione temporale per le funzioni totali. Possiamo creare un albero da un algoritmo ottimale nel tempo con runtime t , e quindi vorremmo convertirlo in un albero T ′ per un algoritmo di query ottimale. Sfortunatamente, se t ∈ O ( n ! / ( N - d ) ! ) (E spesso d ∈ Θ ( n )) il collo di bottiglia è la conversione. Sarebbe bello se potessimo sostituire da qualcosa come 2 d .