Dijkstra 알고리즘을 사용하여 그래프에서 최소 경로를 찾는 응용 프로그램을 작성하고 있습니다. 그래프의 노드와 에지의 가중치는 float
이며, 알고리즘은 부동 소수점 숫자에 대해 많은 연산을 수행합니다. 모든 체중을 int
s로 변환하면 실행 시간이 향상 될 수 있습니까? int 산술 연산은 자바에서 더 빠르다.int에서 Java의 부동 소수점 연산 효율성
나는 그것을 체크하기 위해 간단한 벤치 마크를 쓰려고했지만, 내가 얻은 결과에 만족하지 않는다. 아마도 컴파일러가 프로그램의 일부분을 최적화하여 결과가 저에게 적합하지 않을 수도 있습니다.
편집 :
내가 해결하기 위해 노력하고있어 문제는 정보 검색 필드에 있습니다. 애플리케이션은 키워드 세트로 제기 된 검색어에 대한 답변을 표시해야합니다.
내 데이터 구조는 가중치 적용 그래프입니다. 잎 노드 집합을 감안할 때이 노드를 연결하고 사용자에게 대답을 표시하는 가장 작은 트리를 찾아야합니다. 가중치는 부분적으로 tf/idf 기법을 기반으로하는 가중치 함수에 의해 할당됩니다. 사용자는 자신이 제기 한 쿼리와 관련된 답변을 보려고하는 노드와 에지에 어떤 가중치를 할당했는지 알지 못합니다. 정확한 결과가 필요하지 않으며, 가중치에 따라 답변을 열거 할 수 있습니다. 가중치 함수 (tf/idf를 기반으로한다고 언급했듯이)의 본래 용도는 플로트 가중치를 제공하므로 지금까지 수레를 사용했습니다.
질문에 배경이 추가되기를 바랍니다.
어쨌든 결과는 무엇입니까? – Amarghosh
나는 곱셈 된 int 값이 약 13 % 빨라졌지만, 두 int 값을 비교하면 약 22 % 느리다. – jutky
나는 완전히 확신 할 수는 없지만 Dijkstra의 경우 추가 및 비교 연산만으로 충분할 것입니다. 그리고 이러한 연산의 경우 float 또는 int에 대해 그다지 변하지 않습니다. 나는 정수 비교가 22 % 더 느릴 것이라고 정말로 놀랍다. 어떤 종류의 벤치마킹을 수행했는지 알 수 있습니까? – tafa