我有大约30个500MB文件,每行一个字.我有一个脚本,用伪bash做到这一点:
for i in *; do
echo "" > everythingButI
for j in *-except-$i; do
cat $j >> everythingButI
sort everythingButI | uniq > tmp
mv tmp everythingButI
done
comm $i everythingButI -2 -3 > uniqueInI
percentUnique=$(wc -l uniqueInI) / $(wc -l $i) * 100
echo "$i is $percentUnique% Unique"
done
Run Code Online (Sandbox Code Playgroud)
它计算每个文件的"唯一性"(文件已经在每个文件中排序和唯一).
所以,如果我有文件:
file1 file2 file3
a b 1
c c c
d e e
f g
h
Run Code Online (Sandbox Code Playgroud)
file1将是75%唯一(因为其中1/4的行在另一个文件中找到),file2将是60%唯一,file3将是33.33%唯一.但是要把它变成30个文件,500MB一个弹出,需要一点点才能运行.
我想编写一个python脚本,它可以做得更快,更快,但我想知道实际上最快的算法是什么.(我在PC上也只有2GB的RAM.)
任何人都有关于算法的意见,或者知道更快的方法吗?
编辑:由于每个输入都已经在内部排序和重复数据删除,因此您实际上需要为此进行n路合并,并且本文前一版本中的哈希构建练习相当毫无意义。
如果你不小心的话, n路合并会有点复杂。基本上,它的工作原理是这样的:
我省略了合并算法完整形式的优先级队列的使用;只有当您有足够多的输入文件时,这一点才变得重要。
| 归档时间: |
|
| 查看次数: |
174 次 |
| 最近记录: |