鉴于两个文件提出了一个算法/程序来查找file1中的单词,但不是在file2中 请注意,文件中的字词不按排序顺序。
这是我的思考过程:
如果两个文件中的单词数量都少于100或1000,则此算法可以正常工作 但是,如果这两个文件都很庞大(数十亿字),那么这个解决方案将不起作用,因此我想出了一个改进的解决方案:
因此,地图将如下所示[' a':{' ample'''' ...}]。这将帮助我在log(n)时间复杂度内搜索存储区,然后log(n)查找该单词是否包含在排序列表中。
此解决方案可行,但我相信仍有改进余地 如何进一步改进这个解决方案?
答案 0 :(得分:2)
一种可能的解决方案是使用一些external sort对两个文件进行排序,然后并行迭代它们以找到仅出现在文件1中的单词:
伪代码(排序后):
iter1 = 0
iter2 = 0
while iter1 < file1.length:
if file1[iter1] == file2[iter2]:
iter1 = iter1 + 1
iter2 = iter2 + 1
else if file1[iter1] > file2[iter2]:
iter2 = iter2 + 1
else: //we know for sure the item is only in file1
iter1 = iter1 + 1
yield file1[iter1]
此解决方案需要O(nlogn)
时间,所需空间非常小(外部排序所需的空间量)。
另请注意,此问题是element distinctness problem的变体,因此在使用基于比较的算法或Omega(n)时间+空间使用散列时,很可能它具有Omega(nl0gn)
的下限。 / p>