Durante il tentativo di modellare i polinomi, in particolare la loro moltiplicazione, mi imbatto nel seguente problema. Durante la moltiplicazione, i singoli monomi dei due polinomi sono moltiplicati e, naturalmente, può accadere che io abbia (3x^2 y + 5x y^2) * (x + y). Il risultato contiene 3x^2 y^2 e 5 x^2 y^2, che voglio combinare per addizione subito.Mappa che consente di fornire separatamente il comparatore di uguali e la funzione di hashing
Naturalmente mi piacerebbe utilizzare la parte x^2 y^2 del monomio come chiave in una mappa (cancelletto) per sommare i diversi coefficienti (3 e 5 nell'esempio). Ma l'oggetto monomio come lo immagino dovrebbe naturalmente contenere anche il coefficiente, che dovrebbe essere non parte della chiave mappa.
Ovviamente potrei scrivere equals/hashcode dell'oggetto monomiale in modo tale che ignorino il coefficiente. Ma questo sembra proprio sbagliato, perché matematicamente un monomio chiaramente è uguale a un altro se anche i coefficienti sono uguali.
Anche l'introduzione di un oggetto monomio privo di coefficiente per le operazioni intermedie non sembra corretta.
Invece di utilizzare la mappa, è possibile utilizzare un elenco e utilizzare una ricerca binaria con un comparatore dedicato che ignora il coefficiente.
A corto di implementazione di una mappa che non utilizza i tasti 'equals/hashcode, ma uno dedicato, ci sono idee migliori su come fondere i monomiali?
L'utilizzo di un wrapper è ovviamente una possibilità, ma considero questo troppo sovraccarico, se non per le prestazioni (non ottimizzarlo in anticipo), ma concettualmente è troppo secondo me. – Harald
Quindi prova con una TreeMap, ma questa dovrebbe essere una TreeMap> o non dovresti dimenticare di sommare il coefficiente :) –
NoDataFound