数据结构 第二章 算法和算法的评价

本文介绍了算法的基本概念,包括其官方定义、五个重要特性(有穷性、确定性、可行性、输入和输出),并着重阐述了时间复杂度和空间复杂度作为衡量算法效率的关键指标,以及大O表示法的应用。
摘要由CSDN通过智能技术生成

前言

🚀 写在最前:瑞士计算机科学家尼古拉斯·沃斯在1984年获得图灵奖说“Algorithm+Data Structures=Programs”,也就是我们常说的程序=数据结构+算法。在前一篇文章我们大概了解了一下数据结构到底在学什么,这篇文章将了解一下什么是算法;以及如何评价算法的好坏?

🚀  :求一个关注😀,让我们一起探索计算机的奥秘!

什么是算法?

算法的官方定义:

算法是解决特定问题求解决步骤的描述,再计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。 其简单理解就是对于一个问题,给出该问题的解法,而这个解法用自然语言描述或者使用编程语言描述出来,这就是算法。

算法拥有五个重要特性:

  • 有穷性:也就是说给出的问题解决方法必须在有限时间内可以解决该问题,且解决问题的每一个步骤必须也得可有在有限时间内完成。
  • 确定性:给出的解决方案,对于同一问题,得到的答案必须唯一。
  • 可行性:算法在给定问题上是否可以有效地解决、实现。
  • 输入:对于一个算法,有零个或者多个输入。
  • 输出:对于一个算法,有一个或者多个输出。

算法效率的度量 

😀为什么要学算法效率的度量:对于一个问题的提出,可能就会有多种解决方案,即就是会有多种算法来解决这个问题,那么我们该如何选择算法呢?我们的期望肯定选择的算法是高效的,速度快的,对计算机硬件资源消耗小的;所以就需要一个评价指标来度量算法的好坏。

😀算法效率的度量的两个指标:时间复杂度+空间复杂度。

①:时间复杂度

对于算法是高效的,速度快的,选择时间复杂度来衡量,时间复杂度就是衡量这个算法快或者不快的,所以说我们是不是就可以把算法放机器上去跑一下,看下运行时长,就可以得到哪个算法的时间复杂度低呢?显示是不行的,机器硬件不同,跑出来的时间肯定不同,显然这种方法是不可行,所以对于时间复杂度我们只要大概统计一下要运行多少行代码即可,接下去一起看看时间复杂度是如何进行评价的。直接举例讲解!!

🍬例1:

def sum_of_array(arr):
    total = 0
    for num in arr:
        total += num
    return total

# 示例用法
arr = [1, 2, 3, 4, 5]
print(sum_of_array(arr))  # 输出: 15

现在arr的大小是变为了n,即未知,时间复杂度又会是多少?

🍬例2: 

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]

所以可以看出来,对于时间复杂度来说就是算每一行代码运行了多少次,然后把所有次数相加,就是该算法的时间复杂度。到这里为止已经就是掌握了时间复杂度的求法了。接下去我们再来看一个数学上的小问题。

 可以看出,对于一个函数来说,其n的值越大,其最后的结果,大部分来自于次数最高的那个,所以对于算法时间复杂度表达式子可以简化表大,使用最高阶的来代替即可,即接下去要说的大O表示法。

大O表示法:

对于上述求出来的算法复杂度分别是

  1. 5+1=6 
  2. n+1
  3. 1+ n+ [(n-1)+1]/2

使用大O表示法表示后其复杂度分别就表示为O(1)、O(n) 、O(n^2),只保留最高项,对于常数次的算法,就用O(1)表示其算法复杂度。

②:空间复杂度

运行一个算法所需要的空间数量就是空间复杂度,当然也可以使用大O表示法。仍然举例说明。

🍬例:

def sum_array(arr):
    total = 0
    for num in arr:
        total += num
    return total

算法复杂度考研计算题 

一层循环

二重循环

递归

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值