哪種方法過濾文本效率最高?

devhp 2010-03-31 11:15:20
加精
文本A 200M

格式:
dsafdsafd
dsafdsafdsafdsa
dsafdsafdsa
dsafdsaf
.....


文本B 150M

格式:相同

用哪種方法將文本A中與文本B中相同的行過濾掉

最好不要用什麼數據庫之類的
...全文
4157 152 打赏 收藏 转发到动态 举报
写回复
用AI写文章
152 条回复
切换为时间正序
请发表友善的回复…
发表回复
BambooCaep 2010-07-22
  • 打赏
  • 举报
回复
不好意思,做了点优化后发现,用排序算法只要108秒(笔记本CPU:T5600 1.83GHz 测试程序为单线程)。
BambooCaep 2010-07-21
  • 打赏
  • 举报
回复
当然是hash。
我做的测试如下:
A:15,000,000条不重复的随机AnsiString,长度为10-15。
B:从A里随机抽取的10,000,000个字符串。
除去装载的用时:用排序算法,耗时约5分钟;用hash算法,20秒。
Reverse.King 2010-04-13
  • 打赏
  • 举报
回复
[Quote=引用 149 楼 wangpeng0228 的回复:]
引用 4 楼 pilotedit 的回复:
用PilotEdit就可以了。
http://topic.csdn.net/u/20100327/22/0b5656cb-f2c7-49c5-931c-1bd639ace04d.html
1。打开A, B两个文件
2。对两个文件排序
3。比较两个文件
4。在比较窗口中,点击选中A文件,
5。在比较窗口的工具栏中,点按纽“拷贝所有不同的行”,……
[/Quote]
这么大的数据量他那个控件不死掉才怪。
无语中V5 2010-04-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pilotedit 的回复:]
用PilotEdit就可以了。
http://topic.csdn.net/u/20100327/22/0b5656cb-f2c7-49c5-931c-1bd639ace04d.html
1。打开A, B两个文件
2。对两个文件排序
3。比较两个文件
4。在比较窗口中,点击选中A文件,
5。在比较窗口的工具栏中,点按纽“拷贝所有不同的行”,这将把所有和B文件不同的行拷贝到剪贴板
[/Quote]顶
winner2050 2010-04-10
  • 打赏
  • 举报
回复
LINQ 的话很简单的事。
xiaoyaolanchong 2010-04-10
  • 打赏
  • 举报
回复
无敌了,都是高人啊……
小弟刚入门不久,望这里面的大侠多多指教

最近在弄电话的话单,也曾遇到类似的问题,没有找到好的算法,愁ING……
skyaspnet 2010-04-09
  • 打赏
  • 举报
回复
学习。。
qwejosl 2010-04-09
  • 打赏
  • 举报
回复
学习中。。。
应该会用到。。。
head_java_web 2010-04-09
  • 打赏
  • 举报
回复
10分
codehacker123 2010-04-09
  • 打赏
  • 举报
回复
Concatenate two text file and make the suffix array indexing;
Keep the line ID and Text ID (here Text ID is A and B);

After the suffix array indexing constructed, the text file will be sorted according to the alphabet order. simply identify the duplicate prefix and see their correspondent line ID;
Reverse.King 2010-04-08
  • 打赏
  • 举报
回复
[Quote=引用 139 楼 r11222 的回复:]
while (PWORD(DWORD(_MapFile) + i + j)^ <> $0A0D) do


这句有问题

如果每行字符不是2的倍数呢
[/Quote]

while (PWORD(DWORD(_MapFile) + i + j)^ <> $0A0D) do
begin
Inc(j);
看清楚了按字节递增
axinxkx 2010-04-08
  • 打赏
  • 举报
回复
Delphi 的不怎么看得明白
不过这种比较可以参看很经典的 blz 的 One-Way Hash 算法。
如果文件更大,这个算法威力就更强大。
kqjekthh 2010-04-08
  • 打赏
  • 举报
回复
1111
tanpenghotmail 2010-04-07
  • 打赏
  • 举报
回复
很好很强大
零度空间0520 2010-04-07
  • 打赏
  • 举报
回复
学习,,,,,,
r11222 2010-04-07
  • 打赏
  • 举报
回复
while (PWORD(DWORD(_MapFile) + i + j)^ <> $0A0D) do


这句有问题

如果每行字符不是2的倍数呢
whywen_MoJian 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 71 楼 songsaiga 的回复:]

对于这样的问题,最快的方法一定是只遍历一遍。如果不考虑内存问题,可以用trie树。
思想:不是匹配,而是查找。
把最小的文本建立成trie树,然后用大文本的每一行去trie树中查找,遍历到叶子即表示A与B中有相同的行。
这种方法的查找是线性数组查找,速度非常快。每一行到另外一个文本中比较是最慢的办法,如果用hash运算的过程可能也不会太快。不过tire树是不平衡树,非常耗内存的,但速度非常……
[/Quote]

思路跟这位大哥差不多。
xinxin13579 2010-04-06
  • 打赏
  • 举报
回复
高手………………
zuwei123321 2010-04-06
  • 打赏
  • 举报
回复
太厉害了学习了
linchb_ 2010-04-06
  • 打赏
  • 举报
回复
mark ~
加载更多回复(123)

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧