第一章:线性查找

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、线性查找
  • 二、实现查找算法
  • 三、循环不变量
  • 四、复杂度分析
  • 五、常见复杂度
  • 六、测试算法性能
  • 总结


前言

从线性查找入手算法。


一、线性查找

线性查找
目的在线性数据结构中一个一个查找目标元素
输入数组和目标元素
输出目标元素所在的索引;若不存在,返回-1

在这里插入图片描述

二、实现查找算法

public class LinearSearch {

    private LinearSearch(){}
    //构造函数私有化

    public static <E> int search(E[] data, E target)
    {
        for(int i = 0;i < data.length;i++)
        {
            if(data[i].equals(target))
                return i;

        }
        return -1;
    }
}

三、循环不变量

循环的目的
维持循环不变量

在这里插入图片描述
在这里插入图片描述

四、复杂度分析

算法复杂度分析T = o(?)
分析通过计算执行指令量(数据的规模)来衡量算法的复杂度,最终让算法的复杂度归结某一个量级,再来进行比较算法的性能
复杂度随着数据规模n的增大,算法性能的变化趋势

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、常见复杂度

复杂度估算量级
时间复杂度的计算与数据规模相关,要先确定数据规模

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、测试算法性能

public class ArrayGenerator {

    public static Integer[] generateOrderedArray(int n)
    {
        Integer[] arr = new Integer[n];
        for(int i = 0;i < n;i++)
        {
            arr[i] = i;
        }

        return arr;
    }
}

public class Main {
    public static void main(String[] args)
    {
        int[] dataSize = {100000, 1000000};


        for(int n:dataSize)
        {
            Integer[] data = ArrayGenerator.generateOrderedArray(n);
            long startTime = System.nanoTime();
            for(int k = 0;k < 100;k++)
                LinearSearch.search(data, n);
            long endTime = System.nanoTime();
            double time = (endTime - startTime) / 1000000000.0;

            System.out.println("n = " + n + ",100 runs," + time + "s");
        }



    }
}

在这里插入图片描述


总结

算法复杂度需要结合数据规模进行分析,要看懂一个算法需要找到循环不变量和数据规模。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/138610.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新能源汽车三电系统上的VDA接口在操作空间有限时如何快速密封与连接

针对新能源汽车三电系统上的VDA接口的快速密封与连接&#xff0c;格雷希尔GripSeal快速接头有其对应的G90系列&#xff0c;但随着现在有些新能源汽车体型越来越小&#xff0c;其三电系统的体积也越来越小&#xff0c;相对应的它们各个接口之间的距离也就越来越近&#xff0c;其…

【MySQL】对表结构进行增删查改的操作

表的操作 前言正式开始建表查看表show tables;desc xxx;show create table xxx; 修改表修改表名 rename to对表结构进行修改新增一个列 add 对指定列的属性做修改 modify修改列名 change 删除某列 drop 删除表 drop 前言 前一篇讲了库相关的操作&#xff0c;如果你不太懂&…

数字双向码、密勒码、传号反转(CMI)码、AMI、HDB3的编码规则和功率谱解析+眼图

数字双向码、密勒码、传号反转&#xff08;CMI&#xff09;码、AMI、HDB3的编码规则和功率谱解析眼图 本文主要涉及数字双向码、密勒码、传号反转&#xff08;CMI&#xff09;码、AMI、HDB3的编码规则,优缺点和功率谱解析以及眼图的分析。关于简单二元码大家可以参考简单二元码…

机带RAM:16G(可用2G)

文章目录 机带RAM 16G&#xff08;可用2G&#xff09;一 、问题描述二、解决办法2.1 最大内存设置 2.2 系统激活重启 机带RAM 16G&#xff08;可用2G&#xff09; 一 、问题描述 戴尔商务计算机 Windows11系统 16GB内存 之前一直是正常使用的&#xff0c;突然有一天内存占用率…

150. 逆波兰表达式求值

150. 逆波兰表达式求值 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a;错误经验吸取 原题链接&#xff1a; 150. 逆波兰表达式求值 https://leetcode.cn/problems/evaluate-reverse-polish-notation/description/ 完成情况&#xff1a…

Mac笔记本打开Outlook提示:您需要最新的版本的Outlook才能使用此数据库

Mac笔记本打开Outlook提示&#xff1a;您需要最新的版本的Outlook才能使用此数据库 故障现象&#xff1a; 卸载旧的office安装新版的office&#xff0c;打开outlook提示&#xff1a;您需要最新的版本的outlook才能使用此数据库。 故障截图&#xff1a; 故障原因&#xff1a;…

中小企业数字化转型进程加速,CRM系统前景如何?

自疫情不断反复之后&#xff0c;中小企业数字化转型进程开始加速。作为当下最热门的企业级应用&#xff0c;CRM客户管理系统的前景还是被看好的。相比于美国企业CRM系统7成的使用率&#xff0c;中国的CRM市场还有很大的发展空间。下面来详细说说&#xff0c;CRM系统的前景如何&…

在R中通过正则化表达式提取向量中的正负数

目录 一、实现代码&#xff1a; 二、运行结果&#xff1a; 三、str_extract()函数介绍材料 一、实现代码&#xff1a; install.packages("stringr") library(stringr) # 创建一个包含正负小数的向量 vec <- c("1.5", "-2.7", "3.8&qu…

Linux系统中的静态库和共享库,以及一些计算机的基础知识

目录 1.库文件 2.静态库 3.共享库 4.静态库与共享库的区别 5.计算机基础知识 6.进程的基础知识 7.主函数的三个参数 1.库文件 1).库文件库是一组预先编译好的方法的集合;Linux系统存储库的位置一般在/lib 和 /usr/lib (64位系统/usr/lib64)库的头文件放在/usr/include 2…

纯CSS实现魔法渐变边框卡片

如图所示&#xff0c;这是一个很炫酷的卡片效果&#xff0c;关键效果在于卡片的边框呈渐变色变化着&#xff0c;在网页中有这样一个卡片相信可以极大的增强用户体验交互。本次文章将解读如何使用纯CSS实现这个炫酷的卡片效果。 基于上面的动图可以分析出以下是本次实现的主要几…

【java零基础入门到就业】第五天:java语言的发展和java语言的具体现实应用场景

文章目录 1、java 语言的发展2、java能干什么2.1 java的三大分类2.2 java能做什么1、java 语言的发展 Java 是一种广泛使用的编程语言,经历了多个阶段的发展。以下是 Java 语言的主要发展阶段: 诞生(1995 年): Java 由 Sun Microsystems(后来被 Oracle 收购)的 James …

YOLO的bounding boxes

YOLO使用了 77 网格 (SS)、2 个bounding boxes (B2) 和 20 个类别 ©。 1.YOLO将输入的图片resize成448 x 448&#xff0c;并且为 S x S&#xff08;S 7&#xff09;个grid&#xff0c;如果物体的中心落入该grid中&#xff0c;那么该grid就需要负责检测该物体。 2.对于每…

关于ASJ系列剩余电流动作继电器的功能介绍-安科瑞 蒋静

1.概述 在工业应用中&#xff0c;剩余电流继电器与外部剩余电流互感器结合使用以检测和评估接地故障电流。它们也可以与保护装置结合使用&#xff0c;以实现电路的断开&#xff0c;从而实现对线路和人员的保护。 2.剩余电流的定义以及危害 剩余电流&#xff0c;是指低压配电线…

制造业工厂MES系统中的设备管理模块

随时工厂数字化建设的大力推进&#xff0c;设备管理的效率得到了很大的提升&#xff0c;特别是作为机加工企业&#xff0c;设备是整个企业非常重要的核心资产。下面是万界星空科技MES系统中的设备管理模块介绍&#xff1a; 1、MES设备管理任务模型 制造企业总是期望设备能够在…

龙芯loongarch64安装grpcio失败解决办法

什么是gRPC gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统用protocol buffers IDL定义一个服务,指定能够被远程调用的方法及其参数和返回值类型 使用protocol buffers 编译器插件,将服务定义的.proto文件,编译成客户端和服务端的代码 …

[EFI]技嘉 Z490 VISION G i5-10500 电脑 Hackintosh 黑苹果引导文件

硬件配置 硬件型号驱动情况主板技嘉 Z490 VISION G CLPC controller Z490芯片组&#xff09;处理器英特尔 Core i5-10500 3.10GHz 六核已驱动内存16GB&#xff08; 威到DDR42655MHz8GBx 2〕已驱动硬盘SSDSC2BB150G7R (150 GB/ 国态硬盘&#xff09;已驱动显卡AMD Radeon RX 58…

2024 AIGC 规划:探索交互体验变革及 智能硬件基础设施篇

TL;DR Run LLM/Embedding on Android: https://github.com/unit-mesh/android-semantic-search-kitInference SDK&#xff1a;https://github.com/unit-mesh/inference 正文&#xff1a; 在过去的一年时间里&#xff0c;国内外大中型公司都在探索、引入了 GenAI / AIGC&#xf…

记一次FastJson报错

文章目录 报错内容原因探寻原因及解决方案 报错内容 起因是一段很普通的字符串转Java对象的代码&#xff0c;在本地和内网测试都没有问题&#xff0c;偏偏外网一跑就报错&#xff0c;错误如下: 报错的代码特别简单&#xff0c;涉及到公司代码这里用测试代码演示&#xff0c;就…

Java简介

一、Java简介 Java是一门面向对象的编程语言&#xff0c;不仅吸收了C语言的各种优点&#xff0c;还摒弃了C里难以理解的多继承、指针等概念&#xff0c;因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表&#xff0c;极好地实现了面向对象…

国内外四款强大的远控使用体验:ToDesk、向日葵、AnyDesk、Microsoft 远程桌面横向比较

目录 一、引言 二、横测体验 1、ToDesk 2、向日葵 3、AnyDesk安力桌 4、Microsoft 远程桌面 三、评测总结与建议 一、引言 随着科技快速发展和数字化进程的驱动&#xff0c;远程控制软件在日常生活和工作中变得愈加广泛。无论是在家办公、技术支持还是远程教育&#xff…