工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 2113|回复: 10

问个算法问题

[复制链接]
发表于 2009-9-21 01:10 | 显示全部楼层 |阅读模式
假设A文件有100万条记录,B文件也有100万条记录,有什么算法可以快速地找出两文件中共有的记录?
发表于 2009-9-21 14:46 | 显示全部楼层
我的笨方法:把 A文件的 key与行号 加载进内存, 并按key 排好序. 然后顺序读取B文件的 key , 查找得相同记录的行号对应关系.
回复

使用道具 举报

发表于 2009-9-21 15:37 | 显示全部楼层
unoin all比left join快
用union all后
select   a.a1   from   ab   group   by   a1   having   count(*)>1
回复

使用道具 举报

发表于 2009-9-21 15:48 | 显示全部楼层
不好意思,看成数据库了
回复

使用道具 举报

 楼主| 发表于 2009-9-21 17:31 | 显示全部楼层
4# 2002070344
其实数据库就是用B树来解决的,这也是一个思路
回复

使用道具 举报

 楼主| 发表于 2009-9-21 17:33 | 显示全部楼层
2# 自由自在
效率很低……
回复

使用道具 举报

发表于 2009-9-23 22:55 | 显示全部楼层
共有的定义是什么样 行号和内容一样?

如果只是内容一样可以排序(n*logn)

不过数据才100w 直接用map把一个文件放到内存,再读另一个在map中查找内存一般也吃得消的
回复

使用道具 举报

发表于 2009-10-7 03:01 | 显示全部楼层
关键是事先有没有建立索引~~索引是快速检索的关键。
回复

使用道具 举报

 楼主| 发表于 2009-10-7 23:06 | 显示全部楼层
8# adisonlee
无……乱序,只是普通的文本文件
回复

使用道具 举报

发表于 2009-10-8 02:01 | 显示全部楼层
9# 低调的MJ

无序不能做到优化,需要用内存空间换取时间。这是基本原则。

没有办法只好续条读取检索。或者换个快点的硬盘吧,没有什么好的办法。
回复

使用道具 举报

发表于 2009-10-16 22:46 | 显示全部楼层
看你的数据特征
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-12 22:53

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表