Eventuali duplicati:
Strategies for simplifying math expressionsSemplificare espressione algebrica
Ho un parser di un'espressione matematica che costruisce un albero per rappresentare l 'espressione. Diciamo, per esempio, io di ingresso 2+y+3+y
, la rappresentazione interna di questo sarebbe:
Ora, noi, come esseri umani, possiamo subito vedere che 2+y+3+y = 2y + 5
. La parte difficile per il computer che vedo è che se mi trovassi sulla sinistra +
, non avrei idea di avere un'altra aggiunta a destra nell'altro ramo - non importa quando si valuta ma quando si semplifica non vedo come questo possa essere fatto bene.
Questo è come le classi si combinano tra loro:
ho cercato di google questo, ma non ho trovato niente che mi potrebbe aiutare qui. Solo qualche waypoint generale, o un url o qualcosa del genere sarebbe apprezzato
MODIFICA: Nota che per l'esempio ho incluso solo l'aggiunta. Il parser supporta espressioni come: 1 + 2 * (3^4-4/5 * (1 + 2))
L'aggiunta è transitiva. Dalla radice +, può non vedere che entrambi i bambini sono anche un'aggiunta: significa che può riorganizzare le costanti e le variabili come meglio crede? –
Sono questi compiti? –
Potresti rendere '+' avere più di 2 bambini? Credo che linguaggi matematici simbolici come Mathematica memorizzino il tuo esempio come una lista '[2, y, 3, y]' con una testa di 'Plus', che verrebbe automaticamente semplificata usando alcune regole. – JohnPS