我正在实现模式挖掘算法,通常输入的数据是具有以下格式的文件
item1 item2 item3
item0 item3 item10
....
item30 item40 item30
通常itemx
是String
。为了提高效率,我曾使用ByteString
读取文件,该文件比默认String
更快。由于模式挖掘算法的重要任务是项集之间的比较。我想知道如果我更改输入文件格式以便在Int
之间进行比较而不是在ByteString
之间进行比较,我的程序会更快或更慢。这是新颖的格式:
1 2 3
0 3 10
....
30 40 30
谢谢!
答案 0 :(得分:3)
如果你仅限于询问由eqInt#
primop给出的Int上的相等函数是否比bytestrings中的相等函数更快 -
primop IntEqOp "==#" Compare
Int# -> Int# -> Bool
with commutable = True
VS
eq :: ByteString -> ByteString -> Bool
eq a@(PS fp off len) b@(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案例会更快。毫无疑问。
但是,如果必须先将您的bytestring输入(或String输入)解析为Int
标记,则可能会丢失。
真正了解这里的唯一方法就是衡量。