(再发)求大表搜索关键字算法?

hawk_e2e 2005-12-24 03:29:02
碰到难题,没什么好思路。

从网上(INTERNET)提取一张大表(大概100K条记录),表的主要结构是:
列名: 用户ID(char[20]) 会话ID(dword) ....
其中,用户ID是主键,会话ID不唯一。
有一个特点:表数据分成两部分。每部分都会按会话ID来排序,但是升序还是降序两部分是不同的。如下所示:

用户ID 会话ID
-- 第一部分 --
admin 10012
zmh 10223
lyx 10225
.... .....
slb 12710
-- 第二部分 --
rainmin 50247
charls 50211
bobo 50204
.... .....
marks 10084

现在要通过用户ID和会话ID来定位记录。最主要它不是数据库,不能写SQL查,要自己写查找过程。
而且两部分的数据量每次查都会变化。头痛。

想用二分查找法,但两部分边界的地方不好确定。请高手给点好的思路。
...全文
243 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
MadLee 2006-04-12
  • 打赏
  • 举报
回复
什么语言?
C++的话pair和map不就全搞定了?
spirit_sheng 2006-04-11
  • 打赏
  • 举报
回复
如果排序了, 那就用二分查找, 对于排序方式不同, 需要将查找算法部分与比较部分分开
查找算法部分接受一个用于比较的回调函数作为参数, 算法需要比较两项大小时, 调用此回调函数就行了
具体可以参照STL
sclzmbie 2006-04-10
  • 打赏
  • 举报
回复
最好是解出一个数据,就放到 std:map 中,随后的查找就很容易。因为你的用户ID是char[],放到 std::hash_map 中也不错,找一个好一点的hash函数。
radio_3000 2006-04-10
  • 打赏
  • 举报
回复
为什么 不放入数据库再处理呢?
感觉有些晕
chenzhichao2008 2006-03-31
  • 打赏
  • 举报
回复
你所谓的变化是怎么样变化的,数据个数变化大不大,每部分有没有特殊标志
jp1984 2006-03-31
  • 打赏
  • 举报
回复
hash了
hawk_e2e 2006-03-30
  • 打赏
  • 举报
回复
感谢xdspower的回复
xdspower 2005-12-26
  • 打赏
  • 举报
回复
如果随时都在变化,那么后排序查找肯定要被否定的。
不过现在我还是没有明白你到底有什么要求,想解决什么问题。
如果变化仅仅是增加内容,则在本地维护一个正式的表来处理还是可以的,你所说的文本文件其实格式相当标准,可以很容易的添加进数据库的一个表。
hawk_e2e 2005-12-24
  • 打赏
  • 举报
回复
想用二分法来找,但太多情况要处理了,而且不知道效率如何。
hawk_e2e 2005-12-24
  • 打赏
  • 举报
回复
第一部分跟第二部分的按会话ID排序,共有4种情况:
1.升 降
2.升 升
3.降 升
4.降 降
每次提取的数据的排序情况会是以上4种情况的一种,也就是说排序情况会变动的。
hawk_e2e 2005-12-24
  • 打赏
  • 举报
回复
不是。数据是打包传送过来,我这边解包,自己查找。
调用方式、数据格式、数据的排列顺序都定了,不能更改,无奈....
xdspower 2005-12-24
  • 打赏
  • 举报
回复
文本数据库啊

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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