14.查找概论与顺序查找

news/2024/7/5 2:18:55
一、查找概论
1.查找即依据给定的某个值,在查找表中确定一个其keyword等于给定值的数据元素(或纪录)。若表中不存在keyword等于给定值的纪录。则称查找不成功,此时查找的结果可给出一个"空"纪录或"空"指针。另外,查找表依照操作方式来分有两大种:静态查找表动态查找表
(1)查找表(Search table):是由同一类型的数据元素(或纪录)构成的集合
(2)keyword(Key):是数据元素中某个数据项的值。又称为键值,用它能够标志一个数据元素,也能够标志一个纪录的某个数据项(字段),又称关键码;
(3)主keyword:若此keyword能够唯一地标志一个纪录,则称此keyword为主keyword(Primary Key),主keyword所在的数据项成为主关键码;
(4)次keyword(Secondary Key):对于那些能够识别多个数据元素(或纪录)的keyword,我们称为次keyword;

2.静态查找表(Static Search Table):仅仅作查找操作的查找表。
它的主要操作有:
(1)查询某个"特定的"数据元素是否在查找表中;
(2)检索某个"特定的"数据元素和各种属性。

3.动态查找(Dynamic Search Table)
    在查找过程中同一时候插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素。

它的主要操作有:

(1)查找时插入数据元素;
(2)查找时删除元素数据元素;
凝视:为了提供查找的效率,我们须要专门为查找操作设置数据结构。即改变数据元素之间的关系(表、树等结构)。


二、顺序表查找
1.定义:顺序查找又称线性查找。是最主要的查找技术,它的查找过程是:从表中第一个(或者最后一个)纪录開始,逐个进行纪录的keyword和给定值比較,若某个纪录的keyword和给定值相等,则查找成功。找到所查的纪录;假设直到最后一个(或第一个)纪录。其keyword和给定值比較都不等时,则表中没有所查的纪录,查找不成功。

2.顺序表查找算法
/*顺序查找:a为数组,n为要查找的数组个数。key为要查找的keyword*/
int  Sequential_Search(int *a,int n,int key)
{
    int i;
    for(i=1;i<n;i++)
    {
            if(a[i]==key)
                    return i;    //返回该keyword的纪录位置
    }
}
3.顺序表查找优化
    因为一般的顺序查找算法每次循环时。都须要对i是否小于等于n作推断

从某些程序上来说,当总数据量非常多的时候。该推断无疑减少了查找的效率。我们能够通过在尽头设置一个"哨兵"的方法,来解决每次i与n作出比較的问题来提高查找效率。

长处:实现简单,小型数据查询效率较高。

缺点:n非常大时。查找效率非常低。

/*有哨兵顺序查找*/
int Sequential_Search2(int *a,int n,int key)
{
    int i;
    a[0]=key;        //设置a[0]为keyword值,我们称之为"哨兵"
    i=n;                //循环从数组尾部開始
    while(a[i]~=key)
    {
            i--;
    }
return i;            //返回0则说明查找失败
}
分析:此代码从尾部開始查找,假设在a[i]中有key则返回i值。查找成;否则一定在终于的a[0]处等于key,此时返回的是0,即说明a[1]~a[n]中没有keywordkey,查找失败。
时间复杂度:最好情况为O(1),最坏为O(n);查找失败n+1次时间复杂度为O(n);平均查找次数为(n+1)/2,即平均复杂度为O(n)。


http://lihuaxi.xjx100.cn/news/242198.html

相关文章

元数据驱动的微服务架构(上)

本次分享有两个部分&#xff1a; 微服务架构需要元数据 介绍微服务与元数据的关系。 一、微服务架构需要元数据 企业IT架构已经发展了多个阶段&#xff0c;一方面是服务化架构的发展&#xff0c;在SOA阶段主要解决应用间集成问题&#xff0c;但随着企业业务的发展&#xff0c;…

厦门 服务器管理系统,厦门erp电商管理系统排行榜

优势点1、快捷、方便、好用、可靠&#xff0c;以适应电商的需要。2、系统建设也需要基础理论&#xff1b;并且系统服务器也有与其他平台的优势&#xff0c;强大的互联网功能能解决功能任务。3、在电商领域&#xff0c;提供erp企业级电商平台&#xff0c;为电商平台的服务提供完…

参加Python培训班能找到工作吗?

参加Python培训班能找到工作吗?很多人都比较关心这个问题&#xff0c;尤其是正在参加Python培训的同学&#xff0c;想要了解这个问题&#xff0c;我们必须从Python就业市场、Python就业班优劣以及个人学习效果三个大的方面进行分析。来看看下面的详细介绍。 参加Python培训班能…

最早接触到的计算机编程语言——c语言

最早接触到的计算机编程语言——C语言在经过入学后计算机导论的熏陶后&#xff0c;在大一的下半学期我终于接触到了一门语言&#xff0c;这也是我们最早接触的计算机编程语言——c语言。在初学的时候&#xff0c;感觉这门课程十分晦涩&#xff0c;但是当学习了一段时间以后&…

机器学习中的三对性能度量参数

文章目录1 分类结果混淆矩阵2 错误率和精度3 查准率P和查全率R4 真正例率TPR和假正例率FPR1 分类结果混淆矩阵 2 错误率和精度 错误率&#xff1a;分类错误的样本数占样本总数的比例 精度&#xff1a;分类正确的样本数占样本总数的比例 关系&#xff1a;两者之和为1 3 查准率…

参加软件测试培训前景怎么样

软件测试在近几年的发展前景还是非常不错的&#xff0c;很多人都开始参加软件测试培训班学习技术&#xff0c;要想具体了解参加软件测试培训前景怎么样?来看看下面的详细介绍就知道了。 参加软件测试培训前景怎么样?各大招聘平台上&#xff0c;都能看到测试的影子&#xff0c…

函数式编程(三)

前面两节介绍了纯函数和高阶函数&#xff0c;在函数式编程中&#xff0c;函数就是我们的砖块。我们编写一些可以完成非常具体任务的函数&#xff0c;然后像乐高积木一样将他们搭建起来。 这就是所谓的函数组合。 函数组合 先看两个纯函数 let add10 value > value 10; let…

[elixir! #0007] [译] 理解Elixir中的宏——part.5 重塑AST by Saša Jurić

上一章我们提出了一个基本版的deftraceable宏&#xff0c;能让我们编写可跟踪的函数。宏的最终版本有一些剩余的问题&#xff0c;今天我们将解决其中的一个——参数模式匹配。 今天的练习表明我们必须仔细考虑宏可能接收到的输入。 问题 正如我上一次暗示的那样&#xff0c;当前…