我现在有7个文件,大小分别为 2K,20K,200K,2M,20M,200M,2G
这些文件中的内容都是分行的(即一行一条数据)
不同的文件中可能存在相同的数据,比如 2K的文件中含有字符"abcdef" 200M的那个中也有"abcdef"
现在我需要将这些文件中不相同的内容(相同的部分只去一个,过滤掉重复的)全部整理到另外一个单独的文件中去,采用什么样的算法能够最快最高效!有没有可能在秒级完成?
这些文件中的内容都是分行的(即一行一条数据)
不同的文件中可能存在相同的数据,比如 2K的文件中含有字符"abcdef" 200M的那个中也有"abcdef"
现在我需要将这些文件中不相同的内容(相同的部分只去一个,过滤掉重复的)全部整理到另外一个单独的文件中去,采用什么样的算法能够最快最高效!有没有可能在秒级完成?
解决方案 »
- VB中如何定义RegCreateKeyEx这个API函数中的lpSecurityAttributes参数
- VB如何声明数字变量
- 此问题是属于CAD二次开发还是用VBA编程?
- 100分求一算法,在家都来看看。
- sql2000和vb程序打包问题
- 请问textbox控件为什么不能输入中文呢?我要输入中文该怎么办呀?
- 如何用findwindow函数取得其它软件窗体的按钮属性呢?
- InternetFindNextFile此API如何使用,求救!!!!!!在线等待!
- 非计算机专业,没有证,怎么找工作,怎么面试,过来的大哥帮兄弟一把。给分
- vb怎么用*输出圆形
- 一个关于数据绑定的问题
- 结交江苏的VB程序员!
A 秒级别
B 分级别
C 2小时内
D 3小时内
E 3小时已经是最大忍耐限度了硬盘配置:
四核 AMD/或 I7
MEM 4G~8G
显卡 2G 带GPU
不说别的,就单纯的文件读写速度来说,读写数据的缓存大小设置因机器而已都会有不同,有些机器每次处理4K速度快,有些是8K,有些可能是2K。VB的运行效率本来就不高,也不是很适合做比较大量的数据对比工作,应为这会觉得很慢,虽然能做,不过效率要低过VC的几十倍。当然可以通过交互界面让人不感觉到这种过程有那么久,不过这种是实在没有办法的情况下用的招。如果说VB用相同的算法和过程要处理25秒,VC可能只需要800毫秒,这是我曾经测试的结果。你要提高效率,如果单纯是这种对比,建议用VC来做,如果不会VC,可以用VC写API函数给VB调用,其他的就是基本的循环判断语句或数组操作,花个几分钟就能了解C语言的这些东西。
给你介绍VC中API接口的处理方法,用这种VB+VC的架构应该能提高整个过程的处理速度。
http://blog.csdn.net/supermanking/article/details/5347763
1.AMD 相对于Intel,CPU性能差太多.
2.显存大小对您的"算法"基本不搭界.
3.显卡貌似都是带GPU的.
1)将所有数据分成每份 1K 条记录,这 1K 条记录在内存中排序、去除重复项后分别存成文件到模拟硬盘。
2)然后不停用归并排序法(改进是需要去除重复项)将每 2 个文件合并成更大的文件,并删除原先的两个小文件。
3)最终一个大文件就是结果。
这样的算法耗时最多是分级别的。如果要利用4核CPU:
步骤 1) 中将小数据文件平分到 4 个目录中。
步骤 2) 同时运行 4 个程序实例分别处理一个目录。
步骤 3) 需要将 4 个文件再运用改进的归并排序法合并成最终结果。
其次,大文件夹不要直接读到内存中,要用内存映射方式+VB模拟指针来搜索,我以前曾经实验过,较大的文件使用内存映射+VB模拟指针的方式比直接使用VB内置命令快上近100倍,具体代码可参见我实验后写的一篇文章《VB快速查找大型文件中包含的字符串 》。