Я пишу приложение, которое использует алгоритм Дейкстры для поиска минимальных путей на графике. Весов узлов и ребер на графике составляет float
номеров, поэтому алгоритм выполняет множество арифметических чисел с плавающей запятой. Могу ли я улучшить время работы, если я преобразую весь вес в int
? Являются ли int арифметические операции быстрее в Java, а затем float?int vs float арифметическая эффективность в Java
Я попытался написать простой тест, чтобы проверить это, но я не удовлетворен результатами, которые я получил. Возможно, компилятор оптимизировал некоторые части программы, чтобы результаты не выглядели хорошо для меня.
EDIT:
Проблема, которую я пытаюсь решить в области информационного поиска. Приложение должно отображать ответы на запрос, представляющий собой набор ключевых слов.
Моя структура данных представляет собой взвешенный ориентированный граф. Учитывая набор листовых узлов, я должен найти самое маленькое дерево, которое соединяет эти узлы и показывает ответ пользователю. Веса назначаются взвешивающей функцией, основанной частично на методе tf/idf. Пользователь не знает, какие весы я назначаю узлам и краям, которые он просто хочет видеть ответы, относящиеся к запросу, который он задал. Точные результаты не требуются, просто возможность перечислить ответы в соответствии с их весом. Просто использование весовой функции (как я уже упоминал, она основана на tf/idf) дает весовые веса, поэтому я использовал поплавки.
Надеюсь, это добавит некоторого фона на вопрос.
Каков был результат? – Amarghosh
Я получил, что умножение ints немного быстрее около 13%, но сравнение двух ints медленнее около 22%. – jutky
Я не совсем уверен, но для Dijkstra достаточно просто выполнить операции сложения и сравнения. И для этих операций он не должен сильно отличаться для float или int. Я действительно удивлен тем, что целочисленное сравнение будет на 22% медленнее. Могу ли я узнать, какого рода бенчмаркинг вы провели? – tafa