【算法】一、顺序查找(附 Python 代码)

活动地址:CSDN21天学习挑战赛

学而不思则罔,思而不学则殆。
本人自学算法有一小段时间了,但一直没做什么笔记和总结,学习内容也不成体系。借这个活动的机会,和大家一起学习、梳理一下经典算法。

1. 算法基本概念

1.1 算法的定义

英语:algorithm,在数学(算学)和计算机科学之中,指一个被定义好的、计算机可施行其指示的有限步骤或次序,常用于计算、数据处理和自动推理。算法是有效方法,包含一系列定义清晰的指令,并可于有限的时间及空间内清楚的表述出来。
– 维基百科

Informally, an algorithm is any well-defined computational procedure that takes some value, or set of values, as input and produces some value, or set of values, as output. An algorithm is thus a sequence of computational steps that transform the input into the output.
– Introduction to Algorithms

1.2 算法的效率

算法的效率主要由以下两个复杂度来评估:
时间复杂度:评估执行程序所需的时间。可以估算出程序对处理器的使用程度。
常见的时间复杂度有(由低到高): O ( 1 ) , O ( log ⁡ 2 n ) , O ( n ) , O ( n log ⁡ 2 n ) , O ( n 2 ) , O ( n 3 ) ,  O ( 2 n ) ,  O ( n ! ) \mathrm{O}(1), \mathrm{O}\left(\log _{2} n\right), \mathrm{O}(\mathrm{n}), \mathrm{O}\left(n \log _{2} n\right), \mathrm{O}\left(n^{2}\right), \mathrm{O}\left(n^{3}\right) \text {, }\mathrm{O}\left(2^{n})\text {, }\right.O(n !) O(1),O(log2n),O(n),O(nlog2n),O(n2),O(n3)O(2n)O(n!)

空间复杂度:评估执行程序所需的存储空间。可以估算出程序对计算机内存的使用程度。

设计算法时,一般是要先考虑系统环境,然后权衡时间复杂度和空间复杂度,选取一个平衡点。不过,时间复杂度要比空间复杂度更容易产生问题,因此算法研究的主要也是时间复杂度,不特别说明的情况下,复杂度就是指时间复杂度。

2. 顺序查找

2.1 元素查找介绍

查找也被称为检索,算法的主要目的是在某种数据结构中找出满足给定条件的元素(以等值匹配为例)。如果找到满足条件的元素则代表查找成功,否则查找失败。
在进行查找时,对于不同的数据结构以及元素集合状态,会有相对匹配的算法,在使用时也需要注意算法的前置条件。在元素查找相关文章中只讨论数据元素只有一个数据项的情况,即关键字(key)就是对应数据元素的值,对应到具体的数据结构,可以理解为一维数组。

常见的查找算法:

  • 顺序查找
  • 二分查找
  • 索引查找

2.2 顺序查找

顺序查找理论介绍
时间复杂度:O(n)
空间复杂度:O(1)

Python 代码实现

from typing import List


def search(nums: List[int], key: int) -> int:
    n = len(nums)
    for i in range(n):
        if nums[i] == key:
            return i
    return -1


if __name__ == '__main__':
    A = [11, 34, 20, 10, 12, 35, 41, 32, 43, 14]
    key = 41
    ans = search(A, key)
    print(ans)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值