2013-01-02 4 views
0

나는 패턴 마이닝 알고리즘을 구현하고있어, 일반적으로 입력 데이터는 일반적으로 itemxString입니다 다음과 같은 형식Haskell에서 ByteString 비교보다 Int 비교가 얼마나 빠릅니까?

item1 item2 item3 
item0 item3 item10 
.... 
item30 item40 item30 

을 가진 파일입니다. 효율적으로하기 위해 String보다 빠른 ByteString으로 파일을 읽었습니다. 패턴 마이닝 알고리즘의 훌륭한 작업은 항목 세트 간의 비교이기 때문에. 나는 ByteString을 비교하는 대신에 Int을 비교하기 위해 입력 파일 형식을 변경하면 얼마나 빨리 또는 더 느리게 내 프로그램이 될지 궁금합니다. 다음은 새로운 형식입니다.

1 2 3 
0 3 10 
.... 
30 40 30 

감사합니다! eqInt# primop에 의해 주어진 - - 그런 다음

primop IntEqOp "==#" Compare 
    Int# -> Int# -> Bool 
    with commutable = True 

eq :: ByteString -> ByteString -> Bool 
eq [email protected](PS fp off len) [email protected](PS fp' off' len') 
    | len /= len'    = False -- short cut on length 
    | fp == fp' && off == off' = True  -- short cut for the same string 
    | otherwise    = compareBytes a b == EQ 
{-# INLINE eq #-} 

대 - bytestrings의 평등 기능보다 빠른

+3

당신은 훌륭한 [criterion library] (http://hackage.haskell.org/package/criterion)에 익숙합니까? 유스 케이스를 나타내는 몇 가지 빠른 벤치 마크를 제안하고 자신의 질문에 답변하십시오. – jberryman

+2

또는 더 나은 방법은 텍스트 기반 파일 형식을 사용하지 않고 X 비트 단어 세트를 저장하는 것입니다. 그들. –

답변

3

당신이 자신을 제한하는 경우 단지 지능의 평등 기능 여부를 묻는합니다 Int 케이스가 빠를 것입니다. 의심의 여지가 없습니다.

그러나 먼저 바이트 입력 (또는 문자열 입력)을 Int 토큰으로 구문 분석해야한다면 잃을 수도 있습니다.

여기서 실제로 알 수있는 유일한 방법은 측정하는 것입니다.

관련 문제