社区
C语言
帖子详情
关于文件比较请教算法思路。。。
casio
2005-07-20 08:10:43
假设有两个文本文件,其中一个a.txt内容如下
123
321
569
888
...
b.txt 内容如下:
123
321
777
569
125
...
a.txt和b.txt行数不固定。请问有什么好的算法实现更快找出在a.txt中有却不存在于b.txt中的888 以及存在于b.txt而不存在于a.txt中的777、125?
...全文
386
15
打赏
收藏
关于文件比较请教算法思路。。。
假设有两个文本文件,其中一个a.txt内容如下 123 321 569 888 ... b.txt 内容如下: 123 321 777 569 125 ... a.txt和b.txt行数不固定。请问有什么好的算法实现更快找出在a.txt中有却不存在于b.txt中的888 以及存在于b.txt而不存在于a.txt中的777、125?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pure_flame
2005-07-20
打赏
举报
回复
将文件A,B的内容装进容器,使用set_difference算法
casio
2005-07-20
打赏
举报
回复
楼上的想法有道理。之前我都采用的内部排序,所以要循环多次得出结果,如果采用外部排序分别对A.TXT和B.TXT排序,然后采用类似归并排序的算法,效率应该会提高不少。先这样了,谢谢大家。
boxban
2005-07-20
打赏
举报
回复
to: casio(天意)
有一个比较笨的办法,首先是对A.TXT和B.TXT分别排序,然后定义两个结构数组S1、S2,假设数组长度为N,文件行数为M,分别在A.TXT和B.TXT取出N行存入结构数组中,然后对S1,S2折半比较,此操作循环M/N次,完成对两个文件的比较。不过速度太慢。很是郁闷。请教有什么效率高的好办法?
=============================
我觉得你的思路很好呀(前半部 ;p)!
首先将A.TXT和B.TXT的内容“按行”分别排序(如果文件太大,可以考虑外部排序)。
排序以后可以对两个序列进行一次类似归并排序的处理.
这仅需要一趟遍历
zhangcloud
2005-07-20
打赏
举报
回复
mark
casio
2005-07-20
打赏
举报
回复
楼上的哥哥,用c++STL的算法是可以的。有好的方法么?
laomai
2005-07-20
打赏
举报
回复
先问一下,如果用c++STL的算法可不可以?
laomai
2005-07-20
打赏
举报
回复
先留名,回头找人看,呵呵
casio
2005-07-20
打赏
举报
回复
有一个比较笨的办法,首先是对A.TXT和B.TXT分别排序,然后定义两个结构数组S1、S2,假设数组长度为N,文件行数为M,分别在A.TXT和B.TXT取出N行存入结构数组中,然后对S1,S2折半比较,此操作循环M/N次,完成对两个文件的比较。不过速度太慢。很是郁闷。请教有什么效率高的好办法?
积木
2005-07-20
打赏
举报
回复
我先去吐吐血……
casio
2005-07-20
打赏
举报
回复
楼上的方法很好,值得参考,可用于数字不是很大时的情况。但是我的数字是很变态的。举一个比较实际一点的例子:
A.TXT
3103790 037763214268 204 02005052121084320050521220629 3466
3173992 179090536839118 115 02005052122221320050521222321 68
3103961 037167785746 204 02005052122245820050521222733 155
3102751 03948300988 204 02005052122394120050521224247 186
3102839 01082162694 204 02005052123374020050521234404 384
.....
A.TXT
3103790 037763214268 204 02005052121084320050521220629 3466
3173992 179090536839118 115 02005052122221320050521222321 68
3103961 037167785746 204 02005052122245820050521222733 155
3102751 03948300988 204 02005052122394120050521224247 186
3102839 01082162694 204 02005052123374020050521234404 384
1111111 222222222222 333 44444444444444444444444444444 555
....
两个文件都有几千万行,处理这样一个文件,用楼上的方法可能还是有点问题。请问有什么更好的建议吗?
积木
2005-07-20
打赏
举报
回复
。。。居然还有数字以外的东西,发帖子的时候没有看到……
积木
2005-07-20
打赏
举报
回复
本思路试用于里面的数字不是很变态的情况下。例如,就是你的三位数字。
首先取得文件a.txt和b.txt的最大数字 m,n。
申请一个内存空间 a[m] 用来统计文件a.txt中存在哪些数字,
比如你可以得到
a[123]=1;就是a.txt中有一个123。a[100]=0;因为a.txt中没有100。
然后呢,就用b.txt中的数字去a中寻找。
比如b中的123。因为a[123]=1,所以,123这个数字在a.txt和b.txt中同时存在。这个时候将a[123]修正为2。证明这两个数字在a.txt和b.txt中同时存在。
而b中的 888,因为a[888]=0;所以这个数字在a中不存在而在b中存在,直接输出就可以了。
当b中的数字都检测结束后,回头看看数组a中还有什么位置为1,输出这些为1的元素的位置,他们都是在a.txt中存在而在b.txt中不存在的。
这个方法的优点就是查找速度快,因为直接用数组查找,几乎可以说是零代价。缺点就是比较浪费内存空间。做一次初始化是线性的时间(a.txt文件越大,初始化时间越长,当然这是任何对任何方法来说,都是必要的代价。)
casio
2005-07-20
打赏
举报
回复
看来要举个实际例子来说说
第一个文件
<html>
<head>
<tltle>123</title>
</head>
<body>
abc
777
</body>
</html>
第二个文件
<html>
<head>
<tltle>123</title>
</head>
<body>
abc888
777
999
</body>
</html>
可以看到第二个文件的abc后面多了个888
而且777下面多了一行999 通过程序怎么找到这两个变化
如果采用行比较的话因为第二个文件多了一行和第一行没法对应?所以即使勉强比较则会把第一个文件的</body>和第二个文件的999相比较,这当然不是我想要的结果,因为第二个文件实际有</body>, 我想要的结果是 把888 和 999这个两个变化的内容提出来。请高手代码指点啊
FBIq
2005-07-20
打赏
举报
回复
(fp1..
(fp2..
FBIq
2005-07-20
打赏
举报
回复
flag=0;
fscanf(fp,"%d",&n);
while(fscanf(fp,"%d",&t)!=NULL)
if(t==n)
flag=1;
音乐网站的开发-asp.net
接着在此基础上设计出网站模块功能结构图,然后用E-R图说明了系统的库表结构,最后论文从网页上的风格、色彩、链接、功能、
算法
等属性分析了系统中典型的ASP网页
文件
。在附录中则给出本系统库表结构的详细说明和本...
asp.net知识库
在ASP.NET 1.1下实现模板化站点的新
思路
在ASP.Net中两种利用CSS实现多界面的方法 用于弹出ModalDialog进行数据选择的控件 使用.ashx
文件
处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能...
一个牛人提供的GIS源码(很好)
特别说明:两个程序中已经提供了
比较
完整的数据和代码,可以复制、修改、传播,传播情保证
文件
完整性,并且包含Readme
文件
同时注明出处,但禁止用于商业用途。谢谢。 但愿我的礼物能够给您带来一些帮助。 ==...
php整点抽奖活动,php,抽奖
算法
_PHP抽奖
算法
思路
?,php,抽奖
算法
,
算法
- phpStudy
PHP抽奖
算法
思路
?网上有个烂大街的
算法
,具体请看链接大概原理是:1,生成一个随机数;2,循环对比第N个奖品的概率;3,确定奖品;如果按照这个
算法
,主观上是抽一次奖,但客观上,把每个奖品都循环抽了一遍,其实是...
linux如何判断文本
文件
,
请教
个问题,Linux下如何区分二进制
文件
和文本
文件
?...
请教
个问题,Linux下如何区分二进制
文件
和文本
文件
?(2012-04-13 07:22:09)标签:文本
文件
二进制linux如何杂谈
请教
个问题,Linux下如何区分二进制
文件
和文本
文件
?RT,我想全文索引硬盘中的文本
文件
(包括程序
文件
、...
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章