问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

图解算法笔记1 - 二分查找 & 大O表示法(时间复杂度)

创作时间:
作者:
@小白创作中心

图解算法笔记1 - 二分查找 & 大O表示法(时间复杂度)

引用
CSDN
1.
https://blog.csdn.net/Elijah233/article/details/139430125

算法是计算机科学的核心,而二分查找和大O表示法则是理解算法效率的关键概念。本文将通过直观的图解和简洁的代码示例,帮助你快速掌握这两个重要的算法基础知识。

1、由二分查找引出时间概念

二分查找是一种算法,其输入是一个有序的元素列表(必须有序)。如果要查找的元素包含在列表中,二分查找返回其位置,否则返回NULL。

一般而言,对于包含n个元素的列表,用二分查找最多需要log ⁡ 2 n \log_2 nlog2 n步,而简单查找最多需要n步。

例如:如果列表包含8个元素,简单查找需要检查8个元素,二分查找只需要检查3个元素,因为2 3 2^323=8。

1.1 python实现二分查找

def binary_search(list_demo, item):
    low = 0
    high = len(list_demo) - 1
    
    while low <= high:
        mid = (low + high) // 2
        guess = list_demo[mid]
        if guess == item:
            return mid
        if guess > item:
            high = mid - 1 
        else:
            low = mid + 1
    return None
my_list = [1, 3, 5, 7, 9]
print(binary_search(my_list, 3))
print(binary_search(my_list,-1))

由此可见,二分查找的运行时间为对数时间(或log时间)。

2、大O表示法

大O表示法是一种特殊的表示法,指出了算法的速度有多快。

例如,假设列表包含n个元素。简单查找需要检查每个元素,因此需要执行n次操作。使用大O表示法,这个运行时间为O(n)。

大O表示法能够比较操作数,它指出了算法运算时间的增速。同时,大O表示法指出了算法在最糟情况下的运算时间。

2.1 一些常见的大O运行时间

下面按从快到慢的顺序列出了常见的5种大O运行时间:

O(l o g n log nlogn),也叫对数时间,这样的算法包括二分查找。
O(n nn),也叫线性时间,这样的算法包括简单查找。
O(n l o g n nlognnlogn),这样的算法包括快速排序,一种速度较快的排序算法。
O(n 2 n^2n2),这样的算法包括选择排序,一种速度较慢的排序算法。
O(n ! n!n!),这样的算法包括下面要介绍的旅行商问题的解决方案,一种非常慢的算法。

假设你要绘制一个包含16格的网格,且有5种不同的算法可供选择,这些算法的运行时间如图所示:

2.2 旅行商问题

有一个旅行商:

他需要前往5个城市。

这位旅行商要前往5个城市,同时确保旅程最短,为此,可考虑的城市顺序如下:

对于每种顺序,都需计算总旅程,再挑选最短的路线。5个城市有5!个排列方式,6个城市有6!个排列方式,以此类推,涉及n nn个城市时,需要n ! n!n!次操作才能计算出结果。

2.3 小结:

1)算法的速度指的并非时间,而是操作数的增速。

2)谈论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度增加。

3)算法的运行时间用大O表示法表示。

4)O(l o g n lognlogn)比O(n nn)快,当需要搜索的元素越多时,前者比后者快得越多。

5)算法运行时间并不以秒为单位。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号