• [从今天开始修炼数据结构]查找算法概论和顺序表查找


    一、查找概论

      查找的概念也没什么好说的,就介绍几个特殊概念

      主关键字:唯一标识一个记录的关键字,对比sql中的主键

      次关键字:可以识别多个数据元素的关键字,即并非一一对应的关键字

      静态查找表:只做查找,不做其他操作的表

      动态查找表:查找的同时,插入或删除数据的表

      好了下面进入正题

    二、顺序表查找

      1,顺序表查找就是最基本的查找技术,从表中的第一个或最后一个元素开始,将表中的元素逐个与进行记录的关键字和给定值进行比较,若比较相同,则查找成功,若比较到尽头都不等,则查找失败

      代码实现:

        public static int equentialSearch(List list, Object obj){
            for (int i = 0; i < list.size(); i++){
                if (list.get(i).equals(obj)){
                    return i;
                }
            }
            return -1;
        }

      查找复杂的表结构时,把你的List换成泛型,或者其他数据结构;写一个comparator或者comparable就可以了。

      2,顺序表查找优化

      每次查找都要对i是否越界进行判断,是件很麻烦的事。我们用更好的方法,设置一个哨兵。实现如下

        public static int enquentialSearch2(List list, Object obj){
            list.set(0, obj);
            int index = list.size();
            while (!list.get(index).equals(obj)){
                index--;
            }
            return index;
        }

      设置了list的0元素作为哨兵。

      3,算法分析

      顺序查找最好的情况,就是一开始就找到了目标元素,那么时间复杂度是O(1),如果最终才找到,查找次数是n+1,则时间复杂度是O(n),所以平均查找次数是(n+1)/2。即最终时间复杂度还是O(n)

      顺序表查找的显著缺点就是,面对表长很大的情况下,查找效率很低,但好处是,算法简单,对静态查找表没有组织结构的需求。对于这种查找,由于查找概率不同,我们在组织数据时,可以将常用的记录放在前面,不常用的往后面放,效率可大大提高。

      4,使用Java8流式编程实现

      

  • 相关阅读:
    URL解析模式(伪静态)
    PHP各环境下的伪静态配置
    亚马逊-购书(电子)
    前端路由-JS实现
    SpringBoot 2.3.0.RELEASE版本后自定义404页面,SpringBoot 404错误兼容Ajax请求
    不设置DIV宽度水平居中,div不设置宽度居中
    js 保留两位小数,Js四舍五入,JavaScript Math四舍五入
    Laravel 自定义公共函数的引入
    EF Core3.1 CodeFirst动态自动添加表和字段的描述信息
    Android 高德地图API INVALID_USER_SCODE 错误
  • 原文地址:https://www.cnblogs.com/Joey777210/p/12114439.html
Copyright © 2020-2023  润新知