美文网首页
基础的基础:线性查找

基础的基础:线性查找

作者: WeberLisper | 来源:发表于2021-01-08 22:27 被阅读0次

线性查找

从一个数组里面找出指定的元素的位置。

int实现

对于一个int数组的实现如下:

public static int search(int[] data, int target) {
    for (int i = 0; i < data.length; i++) {
        if (data[i] == target) {
            return i;
        }
    }
    return -1;
}

基于范型

对于Java语言来讲,基于范型可以适配各种类型

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;
}

循环不变量

找到循环不变量是实现算法的关键,一个算法很大程度就是在维护一个循环不变量。对于线性查找来说,其循环不变量为:
data[0...i)区间内的元素都不为target

算法复杂度

时间复杂度

算法复杂度是用来评价一个算法的性能,对于线性查找来讲其时间复杂度为O(n)

空间复杂度

对于现代计算机设备来讲,空间相对来讲不那么重要,通常会用空间来换时间。

算法测试

对于四个不同量级大小的数据,进行如下测试:

public static void main(String[] args) {
    int[] dataSize = {100000, 1000000, 10000000, 100000000};
    for (int len : dataSize) {
        Integer[] data = ArrayGenerator.generateOrderIntArray(len);
        long startTime = System.currentTimeMillis();
        LinearSearch.search(data, len - 1);
        long costTime = System.currentTimeMillis() - startTime;
        System.out.println(String.format("n = %d, costTime: %fS", len, costTime / 1000.0f));
    }
}

测试结果如下:

n = 100000, costTime: 0.005000S
n = 1000000, costTime: 0.014000S
n = 10000000, costTime: 2.284000S
n = 100000000, costTime: 28.025999S

可以看到,当数据量越大的时候,算法本身的性能对时间的影响就越精确,数据量从10000000增加到100000000,时间增加大概10倍,和算法复杂度O(n)一致。
对于数据的生成,由如下方法生成:

public static Integer[] generateOrderIntArray(int len) {
    Integer[] data = new Integer[len];
    for (int i = 0; i < len; i++) {
        data[i] = i;
    }
    return data;
}

相关文章

  • 基础的基础:线性查找

    线性查找 从一个数组里面找出指定的元素的位置。 int实现 对于一个int数组的实现如下: 基于范型 对于Java...

  • 目录

    目录 绪论 数学基础微积分基础线性代数线性代数基础扩展阅读:如何生动有趣的入门线性代数概率论概率基础贝叶斯原理贝叶...

  • 二分查找

    [TOC] 二分查找的基础模板 二分查找靠左的Index基础模板 二分查找靠右的Index基础模板 二分查找插入t...

  • ML01-线性回归

    本主题主要说明线性回归的理论基础与应用:线性回归的数学基础;线性回归的数学推导;线性回归的numpy,scipy,...

  • 重温数据结构_散列表/哈希表的查找

    基本概念 基于线性表、树表结构的查找方法,这类查找方法都是以关键字的比较为基础的。在查找过程中只考虑各元素关键字之...

  • 数据结构基础梳理

    数据结构基础 线性表 顺序线性表取第N个元素复杂度 O(1); 查找某个元素复杂度O(n);插入元素复杂度O(n)...

  • 数据结构与算法基础十一:查找

    一:概论 查找,或搜索(Search),是最频繁的操作,基础中的基础. 查找表(search table):也就是...

  • 算法

    一.算法基础--算法的特性 二.算法基础--算法的复杂度 三.顺序查找和二分查找 顺序查找 二分查找(前提是有序的...

  • [回归] 线性回归 Linear Regression

    线性回归是统计/机器学习中最基础的一个模型,在线性回归的基础上可以拓展出之后相当多的模型,例如逻辑回归。 线性回归...

  • 【深度学习实践】01. 线性回归

    线性模型既是机器学习中最基础的学习模型,也是深度神经网络中的神经元基础。而线性回归是借助线性模型解决一个或者多个自...

网友评论

      本文标题:基础的基础:线性查找

      本文链接:https://www.haomeiwen.com/subject/srbfaktx.html