Trovare la distanza tra due polinomi (rappresentati da alberi)


20

Un collega che lavora sulla programmazione genetica mi ha posto la seguente domanda. Prima ho provato a risolverlo sulla base di un approccio avido, ma su un secondo pensiero, ho trovato un controesempio all'algoritmo avido. Quindi, ho pensato che valesse la pena menzionarlo qui.


Considera due polinomi che sono rappresentati dai loro alberi delle espressioni. Ad esempio, e x ^ 2 + 4 sono illustrati di seguito:x32x+1x2+4

Regole:

  1. Ogni nodo è un nome di variabile ( x,y,z, ), un numero o un'operazione (+, -, ×).
  2. La traversata in ordine dell'albero dovrebbe risultare in un polinomio valido.
  3. I nodi operativi hanno in-gradi 2. Altri nodi hanno in-gradi 0. Tutti i nodi hanno out-grade 1 (tranne root, il cui out-grade è 0).

Su un nodo N dell'albero, definire l' operazione di base come segue:

  1. Un'operazione di base può cambiare l'etichetta del nodo. Ad esempio, può essere modificato in 3 o + in .x×
  2. Un'operazione di base può costruire un albero di espressioni sopra N (vedi l'esempio seguente).

Il costo dell'operazione di base di tipo 1 è 1. Il costo per il tipo 2 è uguale al numero di operazioni {+, -, ×} nell'albero delle espressioni appena creato.

Esempio per il tipo 2: il costo della seguente operazione di base è 2, poiché l'albero delle espressioni costruito in cima al nodo N utilizza due operazioni (- e ×).

Sia T1 e T2 due alberi di espressione che rappresentano i polinomi. Definire la distanza di T1 e T2 come segue: il costo minimo delle operazioni di base per convertire T1 in T2. Si noti che non è necessario che l'albero convertito abbia la stessa struttura di T2. Vogliamo solo che calcoli lo stesso polinomio di T2. (Vedi i commenti per un esempio.)

Il problema: dati T1 e T2, presentano un algoritmo che calcola la loro distanza.

Esempio 1: Sia T1 e T2 i due alberi illustrati all'inizio di questo post. Per convertire l'albero di destra in quello di sinistra, si può costruire un albero di costo 3 sopra × e cambiare da 4 a 1 (il costo totale è 4).

Esempio 2: Lascia che T1 = sia rappresentato dal seguente albero. Per convertire T1 in T2 = , è sufficiente aggiungere 1 a ciascuno dei nodi , per ottenere = T2. Questo può essere fatto aggiungendo un albero di espressioni cost-1 sopra ogni nodo . Questo esempio mostra che la conversione termine per termine (che ho chiamato l' approccio avido all'inizio di questo post) non è un approccio ottimale. Cioè, se si vogliono produrre termini in T2 che non sono presenti in T1 (cioè , , e 1), il costo sarà molto più elevato.x4x4+4x3+6x2+4x+1x(x+1)4x4x36x24x


2
Se l'operazione "elimina" non è consentita, la distanza non è una distanza. Ad esempio: un albero T1 = (x * x) +4 non può essere trasformato in T2 = x, ma T2 può essere trasformato in T1 aggiungendo (* x) e quindi (+4) sopra x. Va bene ? In alternativa, è necessario definire la distanza come le operazioni minime necessarie per convertire T1 in T2 o T2 in T1.
Marzio De Biasi,

4
Il costo è uguale a 0 se e solo se le due formule aritmetiche fornite (senza divisione) rappresentano lo stesso polinomio. Se lo ricordo correttamente, questo è un problema tipico nel coRP (per assegnazione casuale) che non è noto essere in P.
Tsuyoshi Ito

4
@Tsuyoshi: Oh, capisco. Stai indicando il problema del test di identità polinomiale . (Buoni riferimenti: [1 ] e [2 ]). Devo pensarci. Nel frattempo, qualsiasi suggerimento è il benvenuto.
MS Dousti,

4
Sì è quello. Sembra che nella versione tipica del problema del test di identità polinomiale, due polinomi di input siano dati come circuiti, non formule. Quindi la mia formulazione secondo cui la versione della formula è "tipica" era probabilmente imprecisa. Ad ogni modo mettere anche la versione della formula in P sembra essere un problema aperto.
Tsuyoshi Ito,

2
@Vor: Nella formulazione attuale, l'ingresso T1 è in realtà un albero e l'ingresso T2 è un polinomio che si presenta come albero, nel senso seguente. Cambiare T1 in un albero diverso che rappresenta lo stesso polinomio può cambiare la risposta in generale, mentre cambiando T2 in un modo simile no.
Tsuyoshi Ito,

Risposte:


10

La distanza di modifica dell'albero è una generalizzazione della distanza di modifica della stringa. La distanza tra due alberi è il numero minimo di inserimenti di nodi \ eliminazioni \ e rietichette richieste per trasformare un albero nell'altro. (quando eliminiamo il nodo v, i figli di v diventano figli del genitore (v)). Il problema è NP-difficile quando gli alberi non sono ordinati, ma quando vengono ordinati (cioè c'è un ordine da sinistra a destra tra i fratelli) il problema è risolvibile in tempo O (n ^ 3) (come nel documento che Sadeq menzionato). Un buon sondaggio che descrive questo: http://portal.acm.org/citation.cfm?id=1085283


1
Grazie Aviv. Sarà fantastico se unisci le tue risposte (penso che tu abbia problemi con il tuo account precedente). Puoi usare i consigli in questo post (Specialmente, questo link ).
MS Dousti,

In che modo questo approccio coprirebbe alberi diversi con polinomi
equivalenti
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.