小弟求一查找算法.要求有点苛刻

原贴:http://www.52unix.net/software/p620/A62076225.shtml

GGJJ们,小弟求一查找算法.要求有点苛刻...嘿嘿,请GGJJ们帮帮尽忙-->在线等

Posted by admin

小弟最近做一程序,发现我用的的二分查找算法在速度上不能满足要求,可是硬件上又无法再优化,只和在软件上动手了,  
  请问ggjj们在已经排好序的文件里查找数据用什么算法最好,速度最快  
 


网友回答:
发表者:hongyi2000

哈希散列表达到这样的时间复杂度前提是碰撞要处理得很好  
  最佳二叉树查找要比一般二叉树和二分法的查找要快的

发表者:doer_ljy

各种不同的算法在不同的需求上的标显示不一样的,一般的像shell,快速……排序,在全部的可能性等权值上的查找速度是相当的,这里包括了,时间复杂度和空间复杂度!  
  我看还是根据你的系统,定制排序算法比较实际一点!  
  介绍一下吧!  
  :)

发表者:joshuali

学习

发表者:shdiao

用“快速排序”算法,数据结构书上有的

发表者:shdiao

不好意思看错了,看成排序了   :)

发表者:shdiao

好像,按“费波纳挈数列”的顺序查找,速度比较快,  
   
  1,1,2,3,5,8,13,21…………    
  查过了,再按“费波纳挈数列”往回查,数据多的话,用这个好像会快一点,  
   
 

发表者:wengzhong

你的这个系统是做什么用的   ??

发表者:wengzhong

是什么数据??  
  为什么而做的??  
  数据之间有关联吗??

发表者:hutuworm

堆排序吧?

发表者:wengzhong

可以试着把一个文件分割成几个文件!  
  如果数据关联可以把数据按等价类分割(在排序时就作分割工作,设立标志符号),  
  然后同时对每个文件进行查找(使用诸如查找树之类的方法就行),效率回很高的.  
  *形成等价类时,如果不能满足原来的排序要求,就得为查找,建立一个副本,要用很多的空间.  
  如果不事先建立这个副本,在查找时建立,要在外存与主存之间进行多次的交换数据,效率反而不如直接查找高的.  
   
  其实你也可以不用现成的算法,自己想个算法呀!!

发表者:bruce007

其实你的二分法查找是很快的,   不知道你的数据是放在一个文件,   还是多个文件中,   并且数据从文件中的读取,反而是更消耗资源  
 

发表者:chinajiji

做个cache,将查找频率高的项放在cache,查找一个数据时,首先在cache里找..

发表者:doer_ljy

首先,用二分查找的话首先数据已经是有序的了!  
  最坏的情况是数据刚好出现在你将数据分来分去分到还剩两个的时候还没有被找到!  
  这样的话,如果要查找的数据随机出现,没有很好的算法提高效率了!  
  但是如果有么噢谢数据,或者整个数据的某一短经常出现,可以把他放到一个单独的区域,查找时先行在这个段查找。找不到在到剩下的数据里找!  
  这个方法类似于使用高速缓存提高系统销路的那种方法差不多!  
  重要的看命中率如何!  
  如果,不行的话!  
  是使用对查找!或者二叉排序树。  
  加上索引的二叉排序树,查找的速度应该不慢!

发表者:sea_lover

哈希表法

发表者:wshcdr

gz

发表者:joeren

如果空间实在紧张,建议直接以hash表形式存放在外存,处理器一旦计算出hash值就从外存载入数据。为了加快速度,在内存中建立cache,经常访问的数据放在cache。  
  hash存储区应保证低于50%的饱和率,以减少冲突,再加上关键字有13个字符,一般来说hash冲突的机会就很小了。  
 

发表者:bm1408

用树型结构吧!  
  可以试试用hash法!

发表者:joeren

hash表不需要构造,只需要分配固定的空间即可。计算hash值的过程也相当简单,难点可能在于空间的限制。

发表者:yuanhen

 
  数据是不是只有17000条,   不会再增加了?       如果不会再增加了,   hash是个不错的选择.

发表者:yzb1000

学习

发表者:hongfeeling

可以去看看《程序员合订本》的一篇关于数据库算法的文章,文章题目忘了,大概是《数据库算法的??》。里面介绍的b+树,也许对你有帮助。

发表者:sea_lover

利用哈希表。哈希表对文件的查找是相当快的

发表者:rainwindy

有点不明白,你这个数据库数据是按什么结构存放的?  

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值