Ho trovato un interessante problema algoritmico. Ci viene dato un albero binario che ha valore 0 in ogni vertice oltre alle foglie. In foglie abbiamo due opzioni:Somme bilanciate nell'albero binario
valore è sconosciuto, ma sappiamo che è un numero naturale> = 1
valore è noto ed è un numero naturale> = 1
Il problema è decidere se è possibile impostare ogni valore sconosciuto in foglie in modo tale che ogni albero secondario di un dato albero abbia la stessa somma di valori nei vertici nella sua sottostruttura sinistra e destra.
Ad esempio:
tree1:
0
/\
0 ?
/\
0 5
/\
? ?
la risposta è no - non prendendo in considerazione che ogni punto di domanda deve essere un numero naturale, è naturalmente possibile
tree2:
0
/ \
0 0
/\ /\
0 10 ? ?
/\
5 ?
La risposta è SI - impostiamo: 5, 10, 10 rispettivamente in ogni punto interrogativo.
Finora, sono arrivato solo con un algoritmo ovvio: creiamo un sistema di equazioni lineari e controlliamo se ha una soluzione in numeri naturali. Ma penso che possa essere molto lento per i grandi alberi e dovrebbe essere un modo migliore per risolverlo. Qualcuno può aiutare? Sarei molto grato.
Si può sempre provare a disegnare l'albero in un codeblock: | – Alexander
non creare un unico grande sistema di equazioni, ma crearne di piccole, risolverli, quindi riempire i risultati e cercare la prossima sottoproblema. –