高手们来啊!看看自己的能力

时间:2020-12-25 22:37:18
用C语写一个完整的程序,功能如下:
一个程序需要在内存中存储500,000个员工数据,并根据员工的姓名查询相关数据,给出你的解决方案,注意时间空间开销。

27 个解决方案

#1


500,00个员工数据,那要1G以上的空间(极有可能超过4个G),放到RAM里现实吗?
所以说还是放到数据库里的好。

#2


ft,算错了,收回上面的话

#3


要想快,一般是建HASH表,不过这个HASH函数很难设计

#4


没门!

#5


做一个链表,这样只要存储500000个指针就可以了

#6


做一个链表,这样只要存储500000个指针就可以了
----------------------------------
存储的指针没有分配空间有作用吗??

要想快,一般是建HASH表,不过这个HASH函数很难设计
-----------
赞同

#7


用STL的技术呢????

#8


用Hash表吧..
其它的开销都比较大..

#9


先根据姓名排序,然后二分查找,应该不会很慢

#10


桶结构
B+树
按照姓名建立B+树,两级就够了

#11


要想快,一般是建HASH表,不过这个HASH函数很难设计

//=============================================

难点好像还不只是函数上的设计,还有一点就是解决碰撞上的设计,这一点在这么多数据时也是很重要的!!

最好的方法就是连数据库!!^_^

当然如果折中一些的话,我认为用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表。设计的时候小心点。 别出错就行

#25


全部实现在C里面的话,很烦琐啊

不如让我偷偷懒,用个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函数很难设计
-----------
赞同

#7


用STL的技术呢????

#8


用Hash表吧..
其它的开销都比较大..

#9


先根据姓名排序,然后二分查找,应该不会很慢

#10


桶结构
B+树
按照姓名建立B+树,两级就够了

#11


要想快,一般是建HASH表,不过这个HASH函数很难设计

//=============================================

难点好像还不只是函数上的设计,还有一点就是解决碰撞上的设计,这一点在这么多数据时也是很重要的!!

最好的方法就是连数据库!!^_^

当然如果折中一些的话,我认为用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表。设计的时候小心点。 别出错就行

#25


全部实现在C里面的话,很烦琐啊

不如让我偷偷懒,用个C++的map然后随便搞一下就可以了……

要么就让我用一下perl,那个里面也有散列的……

实在要出必杀的话就只能两叉树了,至少可以接受,ln(500,000)/ln(2)才只有19不到,最多不超过21层的树也就差不多了……

#26


up

#27


如果不是面试题/作业题,可以用SQLite数据库