2013-01-02 67 views
0

我執行模式挖掘算法,通常輸入數據格式如下Int比較比Haskell中的ByteString比較快多少?

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

其中通常itemxString文件。爲了提高效率,我用ByteString比默認String更快的讀取文件。由於模式挖掘算法中的重要任務是項目集之間的比較。我不知道如何更快或更慢我的計劃將是,如果我改變輸入文件格式,以便使ByteString之間的比較Int之間的比較,而不是。這裏是新穎的格式:

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

謝謝!

+3

你熟悉的優秀[標準庫(http://hackage.haskell.org/package/criterion)?我建議做幾個簡單的基準,代表了你的使用情況,並回答自己的問題 – jberryman

+2

或更好,但不要用在所有基於文本的文件格式,只是存儲臺X位字,怎麼過小可以使他們。 –

回答

3

如果你限制自己只是要求在詮釋平等功能是否 - 由eqInt# primop給出的 - 是比字節串平等函數更快 -

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

VS

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 #-} 

然後Int情況會更快。毫無疑問。

但是,如果你有你的字節字符串輸入(或字符串輸入)第一解析成Int令牌,你可能會失去。

這裏真正知道的唯一方法是測量。