Sto scrivendo un'applicazione che utilizza l'algoritmo Dijkstra per trovare percorsi minimi nel grafico. I pesi dei nodi e degli spigoli del grafico sono numeri float
, quindi l'algoritmo esegue molti aritmetici su numeri mobili. Potrei ottenere un tempo di esecuzione migliore se converto tutto il peso in int
s? Le operazioni aritmetiche int sono più veloci in Java e quelle mobili?int vs float efficienza aritmetica in Java
Ho provato a scrivere un semplice benchmark per verificarlo, ma non sono soddisfatto dei risultati ottenuti. Forse il compilatore ha ottimizzato alcune parti del programma, quindi i risultati non mi sembrano buoni.
EDIT:
Il problema che sto cercando di risolvere è nel campo Information Retrieval. L'applicazione dovrebbe mostrare le risposte a una query posta come un insieme di parole chiave.
La mia struttura dati è un grafico orientato ponderato. Dato un insieme di nodi foglia, devo trovare un albero più piccolo che colleghi questi nodi e mostri la risposta all'utente. I pesi sono assegnati da una funzione di ponderazione basata parzialmente sulla tecnica tf/idf. L'utente non sa quali pesi assegnare ai nodi e ai bordi vuole solo vedere le risposte rilevanti per la query che ha posto. Non sono richiesti risultati esatti, solo una possibilità per enumerare le risposte in base al loro peso. Solo l'uso nativo della funzione di ponderazione (come ho accennato è basato su tf/idf) dà pesi flottanti quindi ho usato i float finora.
Spero che questo aggiunga un po 'di background alla domanda.
Qual è stato il risultato comunque? – Amarghosh
Ho capito che il moltiplicarsi di un integer è un po 'più veloce del 13%, ma il confronto tra due integer è più lento del 22%. – jutky
Non ne sono completamente sicuro, ma per Dijkstra basterebbero solo le operazioni di addizione e confronto. E per quelle operazioni, non dovrebbe variare così tanto per float o int. Sono davvero sorpreso che il confronto tra i numeri interi sarebbe del 22% più lento. Posso sapere che tipo di benchmarking hai effettuato? – tafa