이것은 파일에서 정수를 읽고 역순 수, 즉 큰 숫자가 순서의 작은 숫자 앞에 나타나는 횟수를 계산하는 clojure 프로그램입니다. 그것은 O (n^2) 알고리즘을 구현하며, 크기가 100,000 인 입력을 실행하는 데 약 30 분이 걸립니다.Clojure 프로그램의 실행 시간
(defn count-inversions
[file]
(let [int-list (vec (map #(Integer/parseInt %)
(clojure.string/split (slurp file) #"\r\n")))]
(loop [c 0
t-list int-list]
(let [size (count t-list)]
(if (empty? t-list)
c
(recur (reduce #(if (< %2 (first t-list)) (inc %1) %1) c (subvec t-list 1 (dec size)))
(subvec t-list 1 (dec size))))))))
이 알고리즘은 Java에서 구현 될 때 완료하는 데 단지 몇 초가 걸립니다. 왜 그렇게 큰 차이가 있습니까? 나에게 잠재적으로 느린 볼
time'에'호출 시도 다양한 p 예술은 시간이 소비되는 곳을 볼 수 있습니다. 'long-array'와 인덱스를 사용하면 속도가 빨라지 겠지만, 나는 그것이 4 등급 차이라는 것을 알 수 없다. –