그래서 문자열 목록을 가지며 작업은 각 문자열이 해당 목록에서 몇 번이나 만날 수 있는지 계산하는 것입니다.문자열 목록의 하스켈 배열
freqMap = M.fromListWith (+) [(c, 1) | c <- subs]
그냥 정렬 : 나는지도를 사용
frequency list = map (\l -> (length l, head l)) $ group (sort list)
을하지만, 내 모든 작업에 대해 너무 느린 - 원래 목록이 매우 큽니다. 박스가없는 배열을 사용하는 것이 매우 빠르다는 이야기를 들었습니다. 정수의 목록처럼 : 문자열로
histogram bounds xs = accumArray (+) 0 bounds [(x, 1) | x <- xs]
는 질문은, 1 × 클래스의 멤버가 아닌 : 그것은 문자열의 목록에서 배열을 만들 수 있습니까?
응답 해 주셔서 감사합니다. 각 문자열의 인스턴스를 세어 보았습니다 (길이가 없음). freqMap = M.fromListWith (+) [(c, 1) | c <- subs> 성능은 여전히 group.sort 버전과 같습니다. 프로파일 링은 또한 대부분의 시간이 정렬 또는 freqMap 평가에 소비되었음을 보여 줬다. – Triostrong
대신 ['Data.HashMap'] (https://hackage.haskell.org/package/unordered-containers-0.2.8.0/docs/Data-HashMap-Lazy.html#t:HashMap)을 사용해 보셨나요? 일을 빠르게 할 수 있습니다. – hnefatl
감사합니다. HashMap은 다른 변종보다 훨씬 뛰어났습니다. 아직 박스형 배열이 아니지만 나무 일지 모르지만 가능한 해시 값을 색인으로 만들기에는 너무 많은 메모리가 필요합니다. – Triostrong