问题:C++算法,检索或匹配速度。
比如,一个学校有上千名学生(假设m个);
每个学生有如下的兴趣属性:
序号,姓名,爱好(排球,篮球。。。),性别,排除饮食(鱼,鸡..),n次的成绩(数学,语文,)。。。
假设:要找出,爱好(排球或者足球),性别 男,不吃鸡,鸭 。。。的人。
如果:for(i=0;i<m;i++)
{
....挨个比对,爱好,成绩等等,
}
这样虽然可以实现,但是效率很低,循环套着循环,特别慢,有没有高手给的好的算法 C++
[解决办法]
把这个信息存储到数据库,有数据库的
select * where 来匹配,绝对能满足你的要求
[解决办法]
单关键字可以用hash, 多关键字可以考虑用存于内存中的数据库。
[解决办法]
你能保证你写的匹配算法比现在流行的数据库匹配算法更快吗?这种方式使你免去了设计自己的匹配算法,
[解决办法]
sql 能解决,不用写程序处理。
[解决办法]
否则你最好设计一个适合你的匹配算法,如hash,b树,基于索引等能提高匹配速度的算法,而数据库这些都用了,所以最好不要重复设计轮子,
前提是你的数据量的确很大,如果就10000条记录一下,采用线性匹配应该也是可以接受的
[解决办法]
数据库索引通常采用B+树。
[解决办法]
不知道开源数据库Berkeley DB的里面有没有B+树索引相关源代码。
[解决办法]
可以用内存数据库啊 比如 sqlite
因为lz你的需求肯定不是固定的
你不会永远都是找“爱好排球,足球,性别男,不吃鸡,鸭”的人
你可能还会需要找
“爱好羽毛球,性别女,不挑食的”
“爱好足球,不吃鱼的,数学成绩没有不及格的”
等等等等
所以用数据库才是正途啊