问题:C++算法,检索或匹配速度。

xinyao58 2013-11-06 10:22:44
比如,一个学校有上千名学生(假设m个);
每个学生有如下的兴趣属性:
序号,姓名,爱好(排球,篮球。。。),性别,排除饮食(鱼,鸡..),n次的成绩(数学,语文,)。。。

假设:要找出,爱好(排球或者足球),性别 男,不吃鸡,鸭 。。。的人。

如果:for(i=0;i<m;i++)
{
....挨个比对,爱好,成绩等等,
}

这样虽然可以实现,但是效率很低,循环套着循环,特别慢,有没有高手给的好的算法
...全文
682 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-11-07
  • 打赏
  • 举报
回复
引用 11 楼 FancyMouse 的回复:
才几千行数据,能慢到哪里去
支持!
xinyao58 2013-11-06
  • 打赏
  • 举报
回复
用sql不太现实,内存中都能放下的数据,非得把它导入到数据库里面?然后再查询,总觉得不合适
RabinSong 2013-11-06
  • 打赏
  • 举报
回复
否则你最好设计一个适合你的匹配算法,如hash,b树,基于索引等能提高匹配速度的算法,而数据库这些都用了,所以最好不要重复设计轮子, 前提是你的数据量的确很大,如果就10000条记录一下,采用线性匹配应该也是可以接受的
别闹腰不好 2013-11-06
  • 打赏
  • 举报
回复
sql 能解决,不用写程序处理。
RabinSong 2013-11-06
  • 打赏
  • 举报
回复
你能保证你写的匹配算法比现在流行的数据库匹配算法更快吗?这种方式使你免去了设计自己的匹配算法,
xinyao58 2013-11-06
  • 打赏
  • 举报
回复
引用 1 楼 LazyDreamHunter 的回复:
把这个信息存储到数据库,有数据库的 select * where 来匹配,绝对能满足你的要求
这是C++程序,数据就在内存中,如果用数据库?估计没有内存快把
帅得不敢出门 2013-11-06
  • 打赏
  • 举报
回复
单关键字可以用hash, 多关键字可以考虑用存于内存中的数据库。
RabinSong 2013-11-06
  • 打赏
  • 举报
回复
把这个信息存储到数据库,有数据库的 select * where 来匹配,绝对能满足你的要求
qq120848369 2013-11-06
  • 打赏
  • 举报
回复
算法有难度, 可以用数据库.
FancyMouse 2013-11-06
  • 打赏
  • 举报
回复
才几千行数据,能慢到哪里去
zilaishuichina 2013-11-06
  • 打赏
  • 举报
回复
可以用内存数据库啊 比如 sqlite 因为lz你的需求肯定不是固定的 你不会永远都是找“爱好排球,足球,性别男,不吃鸡,鸭”的人 你可能还会需要找 “爱好羽毛球,性别女,不挑食的” “爱好足球,不吃鱼的,数学成绩没有不及格的” 等等等等 所以用数据库才是正途啊
赵4老师 2013-11-06
  • 打赏
  • 举报
回复
不知道开源数据库Berkeley DB的里面有没有B+树索引相关源代码。
赵4老师 2013-11-06
  • 打赏
  • 举报
回复
数据库索引通常采用B+树。

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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