zoukankan      html  css  js  c++  java
  • 2019年春阅读笔记11——常见的查询算法及数据结构

    我们知道,数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。那么有哪些查询算法可以使查询速度变得更快呢?
    顺序查找(linear search )
    最基本的查询算法当然是顺序查找(linear search),也就是对比每个元素的方法,不过这种算法在数据量很大时效率是极低的。
    •数据结构:有序或无序队列
    •复杂度:O(n)

    //顺序查找
    int SequenceSearch(int a[], int value, int n)
    {
    int i;
    for(i=0; i<n; i++)
    if(a[i]==value)
    return i;
    return -1;
    }

    二分查找(binary search)

    比顺序查找更快的查询方法应该就是二分查找了,二分查找的原理是查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。
    •数据结构:有序数组
    •复杂度:O(logn)

    //二分查找,递归版本
    int BinarySearch2(int a[], int value, int low, int high)
    {
    int mid = low+(high-low)/2;
    if(a[mid]==value)
    return mid;
    if(a[mid]>value)
    return BinarySearch2(a, value, low, mid-1);
    if(a[mid]<value)
    return BinarySearch2(a, value, mid+1, high);
    }

    二叉排序树查找
    二叉排序树的特点是:
    若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
    若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
    它的左、右子树也分别为二叉排序树。
    搜索的原理:
    若b是空树,则搜索失败,否则:
    若x等于b的根节点的数据域之值,则查找成功;否则:
    若x小于b的根节点的数据域之值,则搜索左子树;否则:查找右子树
    数据结构:二叉排序树
    时间复杂度: O(log2N)
    哈希散列法(哈希表)
    其原理是首先根据key值和哈希函数创建一个哈希表(散列表),燃耗根据键值,通过散列函数,定位数据元素位置。
    数据结构:哈希表
    时间复杂度:几乎是O(1),取决于产生冲突的多少。
    分块查找
    分块查找又称索引顺序查找,它是顺序查找的一种改进方法。其算法思想是将n个数据元素”按块有序”划分为m块(m ≤ n)。每一块中的结点不必有序,但块与块之间必须”按块有序”;即第1块中任一元素的关键字都必须小于第2块中任一元素的关键字;而第2块中任一元素又都必须小于第3块中的任一元素,依次类推。    算法流程:
    先选取各块中的最大关键字构成一个索引表;
    查找分两个部分:先对索引表进行二分查找或顺序查找,以确定待查记录在哪一块中;然后,在已确定的块中用顺序法进行查找。

  • 相关阅读:
    Java中的Iterable与Iterator详解
    1、JAVA数据类型
    maven 国内阿里云镜像配置
    数据库优化以及SQL优化小结
    用IDEA生成javadoc文档
    Elastic Search 新手笔记(1)——入门篇
    MQ技术选型
    springboot + aop + Lua分布式限流的最佳实践
    go 变量声明作用域问题
    android 开发环境变量配置
  • 原文地址:https://www.cnblogs.com/kangxy/p/11053879.html
Copyright © 2011-2022 走看看