哈希散列表达到这样的时间复杂度前提是碰撞要处理得很好
最佳二叉树查找要比一般二叉树和二分法的查找要快的
各种不同的算法在不同的需求上的标显示不一样的,一般的像shell,快速……排序,在全部的可能性等权值上的查找速度是相当的,这里包括了,时间复杂度和空间复杂度!
我看还是根据你的系统,定制排序算法比较实际一点!
介绍一下吧!
:)
学习
用“快速排序”算法,数据结构书上有的
不好意思看错了,看成排序了 :)
好像,按“费波纳挈数列”的顺序查找,速度比较快,
1,1,2,3,5,8,13,21…………
查过了,再按“费波纳挈数列”往回查,数据多的话,用这个好像会快一点,
你的这个系统是做什么用的 ??
是什么数据??
为什么而做的??
数据之间有关联吗??
堆排序吧?
可以试着把一个文件分割成几个文件!
如果数据关联可以把数据按等价类分割(在排序时就作分割工作,设立标志符号),
然后同时对每个文件进行查找(使用诸如查找树之类的方法就行),效率回很高的.
*形成等价类时,如果不能满足原来的排序要求,就得为查找,建立一个副本,要用很多的空间.
如果不事先建立这个副本,在查找时建立,要在外存与主存之间进行多次的交换数据,效率反而不如直接查找高的.
其实你也可以不用现成的算法,自己想个算法呀!!
其实你的二分法查找是很快的, 不知道你的数据是放在一个文件, 还是多个文件中, 并且数据从文件中的读取,反而是更消耗资源
做个cache,将查找频率高的项放在cache,查找一个数据时,首先在cache里找..
首先,用二分查找的话首先数据已经是有序的了!
最坏的情况是数据刚好出现在你将数据分来分去分到还剩两个的时候还没有被找到!
这样的话,如果要查找的数据随机出现,没有很好的算法提高效率了!
但是如果有么噢谢数据,或者整个数据的某一短经常出现,可以把他放到一个单独的区域,查找时先行在这个段查找。找不到在到剩下的数据里找!
这个方法类似于使用高速缓存提高系统销路的那种方法差不多!
重要的看命中率如何!
如果,不行的话!
是使用对查找!或者二叉排序树。
加上索引的二叉排序树,查找的速度应该不慢!
哈希表法
gz
如果空间实在紧张,建议直接以hash表形式存放在外存,处理器一旦计算出hash值就从外存载入数据。为了加快速度,在内存中建立cache,经常访问的数据放在cache。
hash存储区应保证低于50%的饱和率,以减少冲突,再加上关键字有13个字符,一般来说hash冲突的机会就很小了。
用树型结构吧!
可以试试用hash法!
hash表不需要构造,只需要分配固定的空间即可。计算hash值的过程也相当简单,难点可能在于空间的限制。
数据是不是只有17000条, 不会再增加了? 如果不会再增加了, hash是个不错的选择.
学习
可以去看看《程序员合订本》的一篇关于数据库算法的文章,文章题目忘了,大概是《数据库算法的??》。里面介绍的b+树,也许对你有帮助。
利用哈希表。哈希表对文件的查找是相当快的
有点不明白,你这个数据库数据是按什么结构存放的?