【发布时间】:2011-03-31 11:23:48
【问题描述】:
我有两个文件 - 我们称它们为 file0 和 file1。
我想要的是一个快速算法来解决以下问题(我很清楚如何编写一个相当慢的算法来解决它):
检测file0的最大后缀,即file1的前缀,即最大长度的内存块B(或者更准确地说:这样一个内存块的字节数)使得
- file0 由一些内存块 A 组成,然后是 B
- file1 由内存块 B 组成,后跟一些内存块 C
请注意,块 A、B 和 C 的长度也可以为零字节。
编辑(回答drysdam的评论):我想到的明显相当慢的算法(伪代码):让文件的长度以m为界,n与wlog m
for each length from m to 0
compare the m last bytes of file0 with the first m bytes of file1
if they are equal
return length
这显然是一个 O(m*min(m, n)) 算法。如果文件大小相同,则为 O(n^2)。
我目前必须处理的文件大小为 10 到几百兆字节。但在极端情况下,它们的大小也可能为几 GB——大到不再适合 x86 的 32 位地址空间。
【问题讨论】:
-
你的慢算法有多慢,你需要多快?我可以想到一种算法,但据我所知,它比你的“慢”算法慢。