查找算法
❶ 数据结构中有哪些查找算法
和二分查找性能接近的:既然可以二分查找,那么关键字肯定可以满足全序关系。那么可以用二叉查找树,一般的就是平摊O(logn),最坏O(n)。如果用平衡树,如AVL,Treap,Splay等等,可以做到保持O(logn)的界。
比二分查找性能更优的:大概只有Hash了吧。如果Hash函数设计的好,基本可以认为是O(1)的。这个你最好系统学习一下,尤其是字符串的Hash函数。
❷ 最好的查找算法是什么
没有最好只有更好
对不同特征的数据也有不同的查找算法,所有的查找算法都是针对某一特征的数据进行优化的,比如用散列表查找很快的数据用二分发就不一定快,散列表用不同的哈希算法查找性能也大不相同。
❸ 高效率排序查找算法
(1) 若n较小(n <= 50),则可以采用直接插入排序或直接选择排序。由于直接插入排序所需的记录移动操作较直接选择排序多,因而当记录本身信息量较大时,用直接选择排序较好。
(2) 若文件的初始状态已按关键字基本有序,则选用直接插入或冒泡排序为宜。
(3) 若n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序。
快速排序是目前基于比较的内部排序法中被认为是最好的方法。
❹ 顺序查找算法
#include <stdio.h>
#include <stdlib.h>
#define MAX_LENGTH 100
typedef int KeyType;
typedef struct {
KeyType *elem;
int length;
}SSTable; //顺序表的存储结构
/*
此算法比第二个算法多了一个判定i是否出界的流程,对于查找数目较少的情况,
二者查找时间相差不大,对于存在大量数据时,该算法的主要查找时间消耗再判
定是否出界上,所以第二个算法明显比第一个算法好,唯一增加的就是一个“哨兵”
数据。
int Search_Seq(SSTable ST, KeyType key){
int i;
for(i=1; i<=ST.length && ST.elem[i] != key; i++ )
;
if(i<=ST.length)
return i;
else
return 0;
}
*/
int Search_Seq(SSTable ST, KeyType key){
int i;
ST.elem[0] = key; //“哨兵”,如果顺序表中不存在要查找的数据的话,则查找指针必定指向该哨兵
for(i = ST.length; ST.elem[i] != key; i--)
;
return i; //找到的话,则i != 0,否则i = 0
}
void main()
{
int i, key;
SSTable T;
T.elem = (KeyType *)malloc(sizeof(KeyType));
printf("How Many Entries Do You Want input\n");
scanf("%d", &T.length);
for(i=1; i<=T.length; i++){
printf("Please input the %dth entries \n", i);
scanf("%d", &T.elem[i]);
}
for (i=1; i<=T.length; i++)
printf("%5d",T.elem[i]); //显示已经输入的所有数据
printf("\nPlease input the data you want to search\n");
scanf("%d", &key);
i = Search_Seq(T,key);
printf("the search data is locate the %dth(0 indicate can not find)\n",i);
}
❺ 查找算法有几种,怎么编程
大概有顺序查找,二分查找,堆查找,二叉树查找,散列查找等,老兄自己上网看看行吗?我实在没时间给你写代码,找本数据结构看看吧
❻ 查询算法
两个list 没有关联 怎么计算?
如果 不要计算两个list 应该关联
❼ java中哪种查找算法最有效率
这个问题不能一概而论
如果有一种算法优于其他算法,那么其他算法就不存在了不是?
所以,要看在什么情况下,那么有这么几个方面
背景数量级和匹配数量级,就是说你要在多少数据中查找多少数据。
背景数据差异度,背景数据如果包罗万象,或者都是数字,那么选择的算法区别就大了
背景数据整理程度。很多人在选择查找算法时不考虑这个,但是这在实际应用中很有异议,比如数据都排序过和没有排序过,可想而知算法的选择有很大的不同。
匹配方式,是用“等于” 这种方式匹配,还是用like这种方式匹配,也对算法有很大影响。
❽ 几种常见的查找算法之比较
二分法平均查找效率是O(logn),但是需要数组是排序的。如果没有排过序,就只好先用O(nlogn)的预处理为它排个序了。而且它的插入比较困难,经常需要移动整个数组,所以动态的情况下比较慢。
哈希查找理想的插入和查找效率是O(1),但条件是需要找到一个良好的散列函数,使得分配较为平均。另外,哈希表需要较大的空间,至少要比O(n)大几倍,否则产生冲突的概率很高。
二叉排序树查找也是O(logn)的,关键是插入值时需要做一些处理使得它较为平衡(否则容易出现轻重的不平衡,查找效率最坏会降到O(n)),而且写起来稍微麻烦一些,具体的算法你可以随便找一本介绍数据结构的书看看。当然,如果你用的是c语言,直接利用它的库类型map、multimap就可以了,它是用红黑树实现的,理论上插入、查找时间都是O(logn),很方便,不过一般会比自己实现的二叉平衡树稍微慢一些。
❾ 二分法查找算法
哪里查不到?我复制你的程序,输入字符c,结果显示“要查找的字符是第2个”,可以找到