zoukankan      html  css  js  c++  java
  • 14.查找概论与顺序查找

    一、查找概论
    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)。

  • 相关阅读:
    horizontal line and right way to code it in html, css
    Inline vs. block-level elements: a demonstration
    How wide is the default `<body>` margin?
    Getting wrong Version from Assembly using Reflection
    Where is the default size of a div element defined or calculated?
    Why padding is included in height sometimes?
    动态分析Android App之动态调试
    学习: Linux的 date 命令
    一个有趣的安全分析场景DSL设计
    Beats Elastic中的Auditbeat使用介绍
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6812015.html
Copyright © 2011-2022 走看看