查找searching


在有序数列中查找某一个数据时候的算法设计

查找表的分类

静态查找表:只进行查找操作

动态查找表:不断的插入不存在,删除已存在

查找表的操作

查找、插入、删除

查找也叫检索,是根据给定的某个值,在表中确定一个关键字等于给定值的记录或数据元素。

关键字,是数据元素中某个数据项的值,它可以标识一个数据元素

查找方法评价

查找速度

占用存储空间多少

算法本身复杂程度

平均查找长度ASL(Average Search Length):为确定记录在表中的位置,需将关键字和给定值进行比较的平均次数

针对静态查找表,主要方法有

###顺序查找 :

查找过程是从表的一端开始逐个进行记录的关键字和给定值的比较

二分查找 :

查找过程是每次将待查记录所在区间缩小一半,适用条件是采用顺序存储结构的有序表。

算法实现:

��设表长为n,low、high和mid分别指向待查元素所在区间的上界、下界和中点,k为给定值。

初始时,令low=1,high=n,mid=(low+high)/2。 让k与mid指向的记录比较。

若k==d[mid].key,查找成功;

若k小于r[mid].key,则high=mid-1;

若k>r[mid].key,则low=mid+1;

重复上述操作,直至low>high时,查找失败。

具体的实现,还记得堆这个数据结构吗?或者是二叉搜索树吗?可以参看数据结构(三):非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树

判定树:描述查找过程的二叉树

有n个结点的判定树的深度为[log2n]+1

折半查找法在查找过程中进行的比较次数最多不超过其判定树的深度��

分块查找

查找过程:将表分成几块,块内无序,块间有序;先确定待查记录所在块,再在块内查找

适用条件:分块有序表

算法实现

用数组存放待查记录,每个数据元素至少含有关键字域

建立索引表,每个索引表结点含有最大关键字域和指向本块第一个结点的指针

哈希查找

可以参看我的博客《散列表


动态查找表

左右子树都是二叉树

二叉顺序树:左子树都小于根节点,右子树都大于根节点

它的特点很奇葩,分左右,直接先和节点比较,(从根节点开始)逐渐向下走,遍历。。。(一定不能从叶节点,叶节点作为循环的控制语句,查不到就失败返回-1)

查找不成功的时候要插入(如新设备,直接在设备连表里插入新设备)等于说是更新一次数据节点(直接在叶子处,将叶子的左右子树的指针指向另外一个要插入的数据节点)

删除的时候最简单的是叶子节点:直接使之为空NULL。

有一个特征:节点的任意一个子节点要比其双亲节点数据都要小或者大

这方面可以参看数据结构(三):非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树

查找表的比较


2015-9-17 艺少

查找searching的更多相关文章

  1. IT软件开发常用英语词汇

    Aabstract 抽象的abstract base class (ABC)抽象基类abstract class 抽象类abstraction 抽象.抽象物.抽象性access 存取.访问access ...

  2. 数据结构之Binary Search Tree (Java)

    二叉查找树简介 二叉查找树(Binary Search Tree), 也成二叉搜索树.有序二叉树(ordered binary tree).排序二叉树(sorted binary tree), 是指一 ...

  3. 查找与排序算法(Searching adn Sorting)

    1,查找算法 常用的查找算法包括顺序查找,二分查找和哈希查找. 1.1 顺序查找(Sequential search) 顺序查找: 依次遍历列表中每一个元素,查看是否为目标元素.python实现代码如 ...

  4. Firebird Case-Insensitive Searching 大小写不敏感查找

    Firebird 默认是大小写敏感,在检索的时候. 要想不敏感检索,两种方法: 1.where upper(name) = upper(:flt_name) 2.检索时指定字符集collation,例 ...

  5. 常用查找数据结构及算法(Python实现)

    目录 一.基本概念 二.无序表查找 三.有序表查找 3.1 二分查找(Binary Search) 3.2 插值查找 3.3 斐波那契查找 四.线性索引查找 4.1 稠密索引 4.2 分块索引 4.3 ...

  6. Linux下动态库查找路径的问题

    说到和动态库查找路径相关的问题,总体上可以分为两类:    第一类: 通过源代码编译程序时出现的找不到某个依赖包的问题,而如果此时你恰好已经按照它的要求确确实实.千真万确.天地良心地把依赖库给装好了, ...

  7. 谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH

    谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH  PKG_CONFIG_PATH 转载自:http://blog.chinaunix.net/xmlrpc.ph ...

  8. 谈谈Linux下动态库查找路径的问题

    学习到了一个阶段之后,就需要不断的总结.沉淀.清零,然后才能继续"上路".回想起自己当年刚接触Linux时,不管是用源码包编译程序,还是程序运行时出现的和动态库的各种恩恩怨怨,心里 ...

  9. 如何查找MySQL中查询慢的SQL语句

    如何查找MySQL中查询慢的SQL语句 更多 如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow ...

随机推荐

  1. windows错误代码摘录

    Windows API 错误代码定义在winerror.h里,当我们得到一个Error Code不知其意时,可以查阅这个文件 这里定义了绝大部分的错误,摘录翻译如下 [0]-操作成功完成. [1]-功 ...

  2. combox使用自定义的model列表中无元素显示

    自定义的model(stationModel)中有 name 和point两种属性名. 初始化stationModel Combobox{ textRole: 'name' model:station ...

  3. svg坐标转换

    本文内容转自 how-to-translate-from-dom-to-svg-coordinates-and-back-again svg coordinate system Why we need ...

  4. 服务器上build.xml文件乱码解决(亲测有效)

    前提条件:必须root账户登录系统,否则无权限 1. 修改/etc/sysconfig/i18n: 拷贝如下内容到文件中 #LANG="zh_CN.UTF-8" LANG=&quo ...

  5. Hbase监控指标项

    名词解释 JMX:Java Management Extensions,用于用于Java程序扩展监控和管理项 GC:Garbage Collection,垃圾收集,垃圾回收机制 指标项来源 主机名 u ...

  6. SpringMVC从Request域中获取数据

    SpringMVC从Request域中获取数据的三种方式 SpringMVC环境自行搭建, 约定存在如下目录和文件:/WEB-INF/pages/success.jsp 方式一:传入Model对象 前 ...

  7. JVM 类的卸载

    1.当某个类被加载,连接和初始化后,它的生命周期就开始了.当代表这个类的Class对象不再被引用,即不可触及时,Class对象就会结束生命周期,这个类在方法区内的数据也会被卸载,从而结束这个类的生命周 ...

  8. 基于CentOS7系统添加自定义脚本服务及参数说明【转】

    概述 centos6如果要添加自定义脚本服务只需要把脚本放到/etc/init.d然后授权后用chkconfig添加后就可以管理了,那么centos7又是怎么添加自定义脚本服务呢? CentOS7添加 ...

  9. C语言实现简单的停车场管理系统

    问题描述:停车场是一个能放n辆车的狭长通道,只有一个大门,汽车按到达的先后次序停放.若车场满了,车要停在门外的便道上等候,一旦有车走,则便道上第一辆车进入.当停车场中的车离开时,由于通道窄,在它后面呢 ...

  10. python 设计模式之桥接模式 Bridge Pattern

    #写在前面 前面写了那么设计模式了,有没有觉得有些模式之间很类似,甚至感觉作用重叠了,模式并不是完全隔离和独立的,有的模式内部其实用到了其他模式的技术,但是又有自己的创新点,如果一味地认为每个模式都是 ...