一个程序需要在内存中存储500,000个员工数据,并根据员工的姓名查询相关数据,给出你的解决方案,注意时间空间开销。
27 个解决方案
#1
500,00个员工数据,那要1G以上的空间(极有可能超过4个G),放到RAM里现实吗?
所以说还是放到数据库里的好。
所以说还是放到数据库里的好。
#2
ft,算错了,收回上面的话
#3
要想快,一般是建HASH表,不过这个HASH函数很难设计
#4
没门!
#5
做一个链表,这样只要存储500000个指针就可以了
#6
做一个链表,这样只要存储500000个指针就可以了
----------------------------------
存储的指针没有分配空间有作用吗??
要想快,一般是建HASH表,不过这个HASH函数很难设计
-----------
赞同
----------------------------------
存储的指针没有分配空间有作用吗??
要想快,一般是建HASH表,不过这个HASH函数很难设计
-----------
赞同
#7
用STL的技术呢????
#8
用Hash表吧..
其它的开销都比较大..
其它的开销都比较大..
#9
先根据姓名排序,然后二分查找,应该不会很慢
#10
桶结构
B+树
按照姓名建立B+树,两级就够了
B+树
按照姓名建立B+树,两级就够了
#11
要想快,一般是建HASH表,不过这个HASH函数很难设计
//=============================================
难点好像还不只是函数上的设计,还有一点就是解决碰撞上的设计,这一点在这么多数据时也是很重要的!!
最好的方法就是连数据库!!^_^
当然如果折中一些的话,我认为用B-树,可以试试
//=============================================
难点好像还不只是函数上的设计,还有一点就是解决碰撞上的设计,这一点在这么多数据时也是很重要的!!
最好的方法就是连数据库!!^_^
当然如果折中一些的话,我认为用B-树,可以试试
#12
靠,回的都这么快,早知道写个同意楼上就行了
#13
不然就用java中的hash类库,也会相对方便的多,C在写这方面的东东上没有什么优势.
#14
顶一下吧
看了大家的想法才知道自己的想法有多幼稚
看了大家的想法才知道自己的想法有多幼稚
#15
sleepy cat 的 berkeley db ,基于 B+ Tree 的、嵌入程序内部的、C++ 的数据库。
#16
B+/B_ Tree一般用于文件数据库,在内存中显示不出优势来,建议楼主找一找一本叫做《特种数据库》的书,那里面有内存数据库的实现,优化做得更好些。
#17
顺便说一句,楼主的标题太能唬人了。这等问题,不用高手来看就行。
#18
顶啊 你们说到 好多都没接触过 啊
#19
学习ing
#20
……
#21
最快就用商业的内存数据库好了.
#22
YFY(天易.我们要充满热情的向前冲锋)
最快就用商业的内存数据库好了
______________________________
___________________________
呵,商业的?不知和其他的内存数据库有什么区别吗?麻烦能说说
最快就用商业的内存数据库好了
______________________________
___________________________
呵,商业的?不知和其他的内存数据库有什么区别吗?麻烦能说说
#23
问题在于这个500,000上!现在应用程序最多可以用倒3g的独立地址空间。放500,000个员工数据到内存里应该不是太大问题。但员工的数据是怎么分布的?需要记录那些数据是不知道的。搜索的算法有很多,我们只要按数据的分布情况对算法进行优化就可以了。
没有最快的算法,只有最合适的算法!
没有最快的算法,只有最合适的算法!
#24
建个数据库吧。
如果规定只能用纯C。那就建议用Hash表。设计的时候小心点。 别出错就行
如果规定只能用纯C。那就建议用Hash表。设计的时候小心点。 别出错就行
#25
全部实现在C里面的话,很烦琐啊
不如让我偷偷懒,用个C++的map然后随便搞一下就可以了……
要么就让我用一下perl,那个里面也有散列的……
实在要出必杀的话就只能两叉树了,至少可以接受,ln(500,000)/ln(2)才只有19不到,最多不超过21层的树也就差不多了……
不如让我偷偷懒,用个C++的map然后随便搞一下就可以了……
要么就让我用一下perl,那个里面也有散列的……
实在要出必杀的话就只能两叉树了,至少可以接受,ln(500,000)/ln(2)才只有19不到,最多不超过21层的树也就差不多了……
#26
up
#27
如果不是面试题/作业题,可以用SQLite数据库
#1
500,00个员工数据,那要1G以上的空间(极有可能超过4个G),放到RAM里现实吗?
所以说还是放到数据库里的好。
所以说还是放到数据库里的好。
#2
ft,算错了,收回上面的话
#3
要想快,一般是建HASH表,不过这个HASH函数很难设计
#4
没门!
#5
做一个链表,这样只要存储500000个指针就可以了
#6
做一个链表,这样只要存储500000个指针就可以了
----------------------------------
存储的指针没有分配空间有作用吗??
要想快,一般是建HASH表,不过这个HASH函数很难设计
-----------
赞同
----------------------------------
存储的指针没有分配空间有作用吗??
要想快,一般是建HASH表,不过这个HASH函数很难设计
-----------
赞同
#7
用STL的技术呢????
#8
用Hash表吧..
其它的开销都比较大..
其它的开销都比较大..
#9
先根据姓名排序,然后二分查找,应该不会很慢
#10
桶结构
B+树
按照姓名建立B+树,两级就够了
B+树
按照姓名建立B+树,两级就够了
#11
要想快,一般是建HASH表,不过这个HASH函数很难设计
//=============================================
难点好像还不只是函数上的设计,还有一点就是解决碰撞上的设计,这一点在这么多数据时也是很重要的!!
最好的方法就是连数据库!!^_^
当然如果折中一些的话,我认为用B-树,可以试试
//=============================================
难点好像还不只是函数上的设计,还有一点就是解决碰撞上的设计,这一点在这么多数据时也是很重要的!!
最好的方法就是连数据库!!^_^
当然如果折中一些的话,我认为用B-树,可以试试
#12
靠,回的都这么快,早知道写个同意楼上就行了
#13
不然就用java中的hash类库,也会相对方便的多,C在写这方面的东东上没有什么优势.
#14
顶一下吧
看了大家的想法才知道自己的想法有多幼稚
看了大家的想法才知道自己的想法有多幼稚
#15
sleepy cat 的 berkeley db ,基于 B+ Tree 的、嵌入程序内部的、C++ 的数据库。
#16
B+/B_ Tree一般用于文件数据库,在内存中显示不出优势来,建议楼主找一找一本叫做《特种数据库》的书,那里面有内存数据库的实现,优化做得更好些。
#17
顺便说一句,楼主的标题太能唬人了。这等问题,不用高手来看就行。
#18
顶啊 你们说到 好多都没接触过 啊
#19
学习ing
#20
……
#21
最快就用商业的内存数据库好了.
#22
YFY(天易.我们要充满热情的向前冲锋)
最快就用商业的内存数据库好了
______________________________
___________________________
呵,商业的?不知和其他的内存数据库有什么区别吗?麻烦能说说
最快就用商业的内存数据库好了
______________________________
___________________________
呵,商业的?不知和其他的内存数据库有什么区别吗?麻烦能说说
#23
问题在于这个500,000上!现在应用程序最多可以用倒3g的独立地址空间。放500,000个员工数据到内存里应该不是太大问题。但员工的数据是怎么分布的?需要记录那些数据是不知道的。搜索的算法有很多,我们只要按数据的分布情况对算法进行优化就可以了。
没有最快的算法,只有最合适的算法!
没有最快的算法,只有最合适的算法!
#24
建个数据库吧。
如果规定只能用纯C。那就建议用Hash表。设计的时候小心点。 别出错就行
如果规定只能用纯C。那就建议用Hash表。设计的时候小心点。 别出错就行
#25
全部实现在C里面的话,很烦琐啊
不如让我偷偷懒,用个C++的map然后随便搞一下就可以了……
要么就让我用一下perl,那个里面也有散列的……
实在要出必杀的话就只能两叉树了,至少可以接受,ln(500,000)/ln(2)才只有19不到,最多不超过21层的树也就差不多了……
不如让我偷偷懒,用个C++的map然后随便搞一下就可以了……
要么就让我用一下perl,那个里面也有散列的……
实在要出必杀的话就只能两叉树了,至少可以接受,ln(500,000)/ln(2)才只有19不到,最多不超过21层的树也就差不多了……
#26
up
#27
如果不是面试题/作业题,可以用SQLite数据库