导航:首页 > 源码编译 > 查询算法

查询算法

发布时间:2022-02-27 20:02:27

1. 几种常见的查找算法之比较

二分法平均查找效率是O(logn),但是需要数组是排序的。如果没有排过序,就只好先用O(nlogn)的预处理为它排个序了。而且它的插入比较困难,经常需要移动整个数组,所以动态的情况下比较慢。

哈希查找理想的插入和查找效率是O(1),但条件是需要找到一个良好的散列函数,使得分配较为平均。另外,哈希表需要较大的空间,至少要比O(n)大几倍,否则产生冲突的概率很高。

二叉排序树查找也是O(logn)的,关键是插入值时需要做一些处理使得它较为平衡(否则容易出现轻重的不平衡,查找效率最坏会降到O(n)),而且写起来稍微麻烦一些,具体的算法你可以随便找一本介绍数据结构的书看看。当然,如果你用的是c语言,直接利用它的库类型map、multimap就可以了,它是用红黑树实现的,理论上插入、查找时间都是O(logn),很方便,不过一般会比自己实现的二叉平衡树稍微慢一些。

2. 二分法查找算法

哪里查不到?我复制你的程序,输入字符c,结果显示“要查找的字符是第2个”,可以找到

3. 顺序查找算法

#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);
}

4. 查找算法有几种,怎么编程

大概有顺序查找,二分查找,堆查找,二叉树查找,散列查找等,老兄自己上网看看行吗?我实在没时间给你写代码,找本数据结构看看吧

5. java中哪种查找算法最有效率

这个问题不能一概而论


如果有一种算法优于其他算法,那么其他算法就不存在了不是?


所以,要看在什么情况下,那么有这么几个方面

  1. 背景数量级和匹配数量级,就是说你要在多少数据中查找多少数据。

  2. 背景数据差异度,背景数据如果包罗万象,或者都是数字,那么选择的算法区别就大了

  3. 背景数据整理程度。很多人在选择查找算法时不考虑这个,但是这在实际应用中很有异议,比如数据都排序过和没有排序过,可想而知算法的选择有很大的不同。

  4. 匹配方式,是用“等于” 这种方式匹配,还是用like这种方式匹配,也对算法有很大影响。

6. 最好的查找算法是什么

没有最好只有更好
对不同特征的数据也有不同的查找算法,所有的查找算法都是针对某一特征的数据进行优化的,比如用散列表查找很快的数据用二分发就不一定快,散列表用不同的哈希算法查找性能也大不相同。

7. 查找算法的作用

查找就是在一个数据集合里查找到你需要的数据,查找算法就是在查找过程中使用的算法。查找算法有好多,最基础的就是线性表查找。
因为提到了算法,所以需要注意的是时间复杂度跟空间复杂度,进而涉及到数据的存储方式,比如数组,链表,矩阵,树,图等等数据结构,这些数据结构可以帮助你降低算法的复杂度。
如果有兴趣,随便找本数据结构书翻翻,里面或多或少都会有讲解。用关键字标识一个数据元素,查找时根据给定的某个值,在表中确定一个关键字的值等于给定值的记录或数据元素。在计算机中进行查找的方法是根据表中的记录的组织结构确定的。顺序查找也称为线形查找,从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。二分查找要求线形表中的结点按关键字值升序或降序排列,用给定值k先与中间结点的关键字比较,中间结点把线形表分成两个子表,若相等则查找成功;若不相等,再根据k与该中间结点关键字的比较结果确定下一步查找哪个子表,这样递归进行,直到查找到或查找结束发现表中没有这样的结点。分块查找也称为索引查找,把线形分成若干块,在每一块中的数据元素的存储顺序是任意的,但要求块与块之间须按关键字值的大小有序排列,还要建立一个按关键字值递增顺序排列的索引表,索引表中的一项对应线形表中的一块,

8. 高效率排序查找算法

(1) 若n较小(n <= 50),则可以采用直接插入排序或直接选择排序。由于直接插入排序所需的记录移动操作较直接选择排序多,因而当记录本身信息量较大时,用直接选择排序较好。
(2) 若文件的初始状态已按关键字基本有序,则选用直接插入或冒泡排序为宜。
(3) 若n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序。
快速排序是目前基于比较的内部排序法中被认为是最好的方法。

9. 数据结构中有哪些查找算法

和二分查找性能接近的:既然可以二分查找,那么关键字肯定可以满足全序关系。那么可以用二叉查找树,一般的就是平摊O(logn),最坏O(n)。如果用平衡树,如AVL,Treap,Splay等等,可以做到保持O(logn)的界。
比二分查找性能更优的:大概只有Hash了吧。如果Hash函数设计的好,基本可以认为是O(1)的。这个你最好系统学习一下,尤其是字符串的Hash函数。

阅读全文

与查询算法相关的资料

热点内容
java7并发编程实战手册pdf 浏览:340
windows打印机编程 浏览:234
怎么用纸做解压小方块 浏览:264
8253的编程方式 浏览:140
云服务器无法连接到当前网络 浏览:468
香港服务器什么时候租用 浏览:599
福州高精密三坐标测量仪编程 浏览:709
变量的作用域编译预处理 浏览:177
程序员买台式机好还是笔记本 浏览:811
安卓叮当猫年卡怎么样 浏览:426
自学旅游英语用什么app 浏览:154
linux端口开放命令 浏览:681
单片机小汽车 浏览:953
思考与决策pdf 浏览:624
ted加密货币 浏览:721
联想服务器如何安装硬盘阵列驱动 浏览:130
c语言编译器怎么打中文 浏览:492
加密exe文件打不开怎么办 浏览:14
仕女pdf 浏览:933
安装储存服务器是什么意思 浏览:114