找回密码
 加入
搜索
查看: 6864|回复: 2

[效率算法] 数组查找算法哪种最效率?

[复制链接]
发表于 2010-5-21 22:57:42 | 显示全部楼层 |阅读模式
验证码识别需要用到数组查找方面的代码, 谁有兴趣了一起研究研究。  
目前数组查找方法有四种。
1.顺序查找
在一个已知数组中找出与给定关键字相同的数的具体位置。原理是让关键字与数组中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止
2.二分查找
二分查找法二分查找又称折半查找,它是一种效率较高的查找方法。   
【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。   
【优缺点】折半查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。   
【算法思想】首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。   重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
3.插值查找
二分查找法的改进。查找码不是中间的元素了,变成了一个估算值。
该估算值等于(被查找的关键值-被查找的数组的下界元素)/(被查找数组的上界元素-被查找数组的下界元素)*(上界元素下标-下界元素下标)+下界元素下标 ,如果关键值等于数组下标为估算值的元素,则返回估算值,如果关键值大于数组下标为估算值的元素,下界数值=估算值+1,否则,上界=估算值-1.
直到数组查找结束。
4.动态查找
动态查找表的特点是:表结构本身是在查找过程中生成的,即对于给定值key,若表中存在其关键字等于key的记录,则查找成功返回,否则插入关键字等于key的记录。常见的是二叉树查找法。
发表于 2010-5-22 21:33:36 | 显示全部楼层
除了顺序查找 和 二分法,其他的看不懂。。。
 楼主| 发表于 2010-5-22 22:05:19 | 显示全部楼层
回复 2# zjimmy


    额, 其实插值和动态查找 都是二分查找的优化算法。

二分法每次以数组(子数组)中间的元素为分界线,将数组拆分,插值法是假设一个元素为数组的中间元素,该假设元素的下标是通过一个公式算出来的。公式是:
假设元素下标=(被查找的关键值-被查找的数组的下界元素)/(被查找数组的上界元素-被查找数组的下界元素)*(上界元素下标-下界元素下标)+下界元素下标
动态查找法最常用的是二叉树查找,  对于一个给定的关键字K, 从二叉树的根节点开始查找,如果K大于根节点,则K的顺序一定在根节点的右侧,再从右侧的第一个叶子节点开始查找,大于在右,小于在左,直到找到一个位置,K大于左侧节点值,小于右侧节点值,则将K插入到该节点位置,原来的节点向右移动。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 10:54 , Processed in 0.072785 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表