IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构第一课 —— 时间和空间复杂度 -> 正文阅读

[数据结构与算法]数据结构第一课 —— 时间和空间复杂度

一、什么是数据结构?

Alt要想学好数据结构,我们首先要知道数据结构是什么?
在百度搜索中,我们可以找到这个问题的答案:数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。

二、关于算法的好坏

在了解什么是数据结构后,我们再来思考一个问题:我们如何来评断一个算法的好坏?
是通过算法运行的时间还是通过算法开辟的空间?究竟是时间更为重要还是空间更为重要呐?
下面,我们就来解答这个问题。

1、算法效率

算法的效率分为两种:一是时间效率,二是空间效率。其中,时间效率被称为时间复杂度;同样的,空间效率被称为空间复杂度

时间复杂度:主要用来衡量一个算法的运行速度
空间复杂度:主要用来衡量一个算法所需要的额外空间

虽然两种效率所衡量的对象不同,但是,两种效率对于算法来说都很重要,但在目前来说,对于一个算法评断它的好坏时:时间复杂度>>空间复杂度

三、时间复杂度

1、时间复杂度是什么?

首先,我们来了解一下什么是时间复杂度。

时间复杂度:在计算机科学中,时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数它定性描述该算法的运行时间

简单来说:算法中基本操作的执行次数,为该算法的时间复杂度。

2、关于大O表示法

(1)大O的渐进表示法

要想计算某算法的时间复杂度,首先要学会大O表示法。
首先举个例子:

public class Test {
    public static void main(String[] args) {
        int count=0;
        for (int i = 0; i < N; i++) {
            count++;
        }
    }
}

如果说要计算上面算法的时间复杂度。
我们知道,count=0; int i=0;这两部分是只进行一次的。所以对于这两部分来说,一共是2个时间单元
i<N部分一共是N+1个时间单元(在最后一次还要比较一下)。
i++和count++部分一共是2*N个时间单元
那么,这个算法一共需要3*N+3个时间单元。

N11000
3*N+3630003
3*N930000
N110000

由上表,我们可以看出,对于N很大的情况下,常数对我们的时间复杂度影响不大。然而,当N变大的情况下,N前的系数对于时间复杂度的影响也渐渐减小了。
所以,我们这时提出大O表示法

大O符号:是用于描述函数渐进行为的数学符号。

(2)大O阶方法的推导

1、用常数1取代运行时间中的所有加法常数
2、在修改后的运行次数函数中,只保留最高阶项
3、如果最高阶项存在且不是1,则去除与这个项目相乘的常数,得到的结果就是大O阶

当然,在某些算法的时间复杂度存在最好、平均和最坏的情况。
最好情况:任意输入规模的最小运行次数(下限)。
平均情况:任意输入规模的期望运行次数。
最坏情况:任意输入规模的最大运行次数(上限)。

在实际情况中,我们关注的一般是算法的最坏情况

四、空间复杂度

空间复杂度是什么?

空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。

所以,空间复杂度算的是变量的个数

当然,计算空间复杂度时,我们使用的也是大O渐进表示法

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 02:14:52  更:2022-09-15 02:15:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 17:02:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码