|
本帖最后由 香川群子 于 2013-5-2 00:29 编辑
lee1892 发表于 2013-4-25 22:02
我很期待~
速度果然进入了秒级别……
Data Compare Check.rar
(368.41 KB, 下载次数: 65)
附件已有更新……增加了任意检查个数的选项。请已经下载的同学注意。
算法要点:
1. 读取原始数据后,用字典法整理为长整形序号: Dic to Long: 大约0.8秒
2. 按字典项个数计算循环比对次数以后,从小到大排序找到比对次数最少的前几列: Sort: 0秒
(循环比对次数=k*(K+1)/2 → 貌似Lee1892直接用了平方计算虽然没有产生实际差别但有点不讲理)
3. 对前几列用数组法归并具有相同项的行序号,以便缩小检查范围: Filter: 0.2秒
4. 遍历2 to m -1 进行检查,仅检查前几列中有相同字典项的行数……(这个就是我前面忽然想起来的算法精髓)
For...Next...Compare Check: 仅需2-3秒
(实际检查716,145行)而全循环检查需要比对=Σ(1-9585)=45,940,905行次,相差64倍。
但因为预先决定比对行位置也需要大量计算,所以计算效率也损失很大的,实际速度差就没有几十倍那么大了。
5. 输出结果: Output: 大约0.02秒
因此在我的计算机上合计耗时 2-3秒左右,如果机器好,或许可以进入2秒。
补充:
Lee1892的结构算法代码构造稍复杂一些,一下子是看不懂的。
但当我自己的算法代码实现以后,再去看一下,发现原理几乎是相同的。
但显然Lee1892的算法速度更快。
有趣的是,我的检查比对次数明显比Lee1892的算法少,相差大约10倍。
但我的过程耗时要大很多,所以最后还是他的代码速度更快一些。
|
评分
-
1
查看全部评分
-
|