0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

算法和数据结构基础知识分享(上)

jf_78858299 来源:阿里开发者 作者: 复醉 2023-04-06 16:48 次阅读

有哪些常见的数据结构?基本操作是什么?常见的排序算法是如何实现的?各有什么优缺点?本文简要分享算法基础、常见的数据结构以及排序算法。

一 前言

1 为什么要学习算法和数据结构?

  • 解决特定问题。
  • 深度优化程序性能的基础。
  • 学习一种思想:如何把现实问题转化为计算机语言表示。

2 业务开发要掌握到程度?

  • 了解常见数据结构和算法,沟通没有障碍。
  • 活学活用:遇到问题时知道要用什么数据结构和算法去优化。

二 数据结构基础

1 什么是数据结构?

数据结构是数据的组织、管理和存储格式,其使用目的是为了高效的访问和修改数据。

数据结构是算法的基石。如果把算法比喻成美丽灵动的舞者,那么数据结构就是舞者脚下广阔而坚实的舞台。

2 物理结构和逻辑结构的区别?

物理结构就像人的血肉和骨骼,看得见,摸得着,实实在在,如数组、链表。

逻辑结构就像人的思想和精神,它们看不见、摸不着,如队列、栈、树、图。

3 线性存储结构和非线性存储结构的区别?

  • 线性:元素之间的关系是一对一的,如栈、队列。
  • 非线性:每个元素可能连接0或多个元素,如树、图。

三 算法基础

1 什么是算法?

  • 数学:算法是用于解决某一类问题的公式和思想。
  • 计算机:一系列程序指令,用于解决特定的运算和逻辑问题。

2 如何衡量算法好坏?

  • 时间复杂度:运行时间长短。
  • 空间复杂度:占用内存大小。

3 怎么计算时间复杂度?

大O表示法(渐进时间复杂度):把程序的相对执行时间函数T(n)简化为一个数量级,这个数量级可以是n、n^2、logN等。

推导时间复杂度的几个原则:

  • 如果运行时间是常数量级,则用常数1表示。
  • 只保留时间函数中的最高阶项。
  • 如果最高阶项存在,则省去最高项前面的系数。

时间复杂度对比:O(1) > O(logn) > O(n) > O(nlogn) > O(n^2)。

不同时间复杂度算法运行次数对比:

图片

4 怎么计算空间复杂度?

常量空间 O(1):存储空间大小固定,和输入规模没有直接的关系。

线性空间 O(n):分配的空间是一个线性的集合,并且集合大小和输入规模n成正比。

二维空间 O(n^2):分配的空间是一个二维数组集合,并且集合的长度和宽度都与输入规模n成正比。

递归空间 O(logn):递归是一个比较特殊的场景。虽然递归代码中并没有显式的声明变量或集合,但是计算机在执行程序时,会专门分配一块内存空间,用来存储“方法调用栈”。执行递归操作所需要的内存空间和递归的深度成正比。

5 如何定义算法稳定性?

稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。

不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。

6 有哪些常见算法?

首先要明确:特定算法解决特定问题。

  • 字符串:暴力匹配、BM、KMP、Trie等。
  • 查找:二分查找、遍历查找等。
  • 排序:冒泡排序、快排、计数排序、堆排序等。
  • 搜索:TFIDF、PageRank等。
  • 聚类分析:期望最大化、k-meanings、k-数位等。
  • 深度学习:深度信念网络、深度卷积神经网络、生成式对抗等。
  • 异常检测:k最近邻、局部异常因子等。
  • ......

其中,字符串、查找、排序算法是最基础的算法。

四 常见数据结构

1 数组

1)什么是数组?

数据是有限个相同类型的变量所组成的有序集合。数组中的每一个变量被称为元素。

图片

2)数组的基本操作?

读取O(1)、更新O(1)、插入O(n)、删除O(n)、扩容O(n)。

2 链表

1)什么是链表?

链表是一种在物理上非连续、非顺序的数据结构,由若干个节点组成。

单向链表的每一个节点又包含两部分,一部分是存放数据的变量data,另一部分是指向下一个节点的指针next。

图片

2)链表的基本操作?

读取O(n)、更新O(1)、插入O(1)、删除O(1)。

3)链表 VS 数组

数组:适合多读、插入删除少的场景。

链表:适用于插入删除多、读少的场景。

图片

3 栈

1)什么是栈?

栈是一种线性逻辑数据结构,栈的元素只能后进先出。最早进入的元素存放的位置叫做栈底,最后进入的元素存放的位置叫栈顶。

一个比喻,栈是一个一端封闭一端的开放的中空管子,队列是两端开放的中空管子。

图片

2)如何实现栈?

数组实现:

图片

链表实现:

图片

3)栈的基本操作

入栈O(1)、出栈O(1)。

4)栈的应用?

  • 回溯历史,比如方法调用栈。
  • 页面面包屑导航。

4 队列

1)什么是队列?

一种线性逻辑数据结构,队列的元素只能后进后出。队列的出口端叫做队头,队列的入口端叫做队尾。

图片

2)如何实现队列?

数组实现:

图片

链表实现:

图片

3)队列的基本操作?

入队 O(1)、出队 O(1)。

4)队列的应用

  • 消息队列
  • 多线程的等待队列
  • 网络爬虫的待爬URL队列

5 哈希表

1)什么是哈希表?

一种逻辑数据结构,提供了键(key)和值(value)的映射关系。

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据结构
    +关注

    关注

    3

    文章

    564

    浏览量

    39900
  • 排序算法
    +关注

    关注

    0

    文章

    50

    浏览量

    10021
  • 存储结构
    +关注

    关注

    0

    文章

    21

    浏览量

    9678
收藏 人收藏

    评论

    相关推荐

    数据结构算法分析(Java版)(pdf)

    数据结构算法分析(Java版)(pdf)http://www.ibeifeng.com/read.php?tid=4812&u=73481【中文】Java数据结构算法中文第
    发表于 12-20 21:22

    数据结构算法分析

    数据结构算法分析
    发表于 06-05 10:46

    请问学习stm32以及ucos ii ucgui需要学习数据结构算法之类的知识吗?

    学习stm32以及ucos ii ucgui是否需要学习数据结构算法之类的知识
    发表于 06-09 23:22

    数据结构的几个重要知识

    ,也就掌握好了数据处理的算法,良好的数据结构对于软件系统的执行效率、数据存储效率都非常重要。栈的模型以上简单了解了什么是数据结构
    发表于 02-27 15:01

    C语言与数据结构

    目录个人介绍笔试单选题C语言数据结构计算机与操作系统网络通信填空题C语言与数据结构网络通信问答题嵌入式基础知识C语言与数据结构C编程一面二面功能快捷键合理的创建标题,有助于目录的生成如
    发表于 08-06 07:10

    数据结构算法核心知识点总结概述

    数据结构算法核心知识点总结概述最近有看一些大佬的专栏,受益匪浅。深刻的觉察到我们要想成为一个伟大的程序员,或者说小一点,成为一个厉害的程序员,基础知识是核心竞争力也是我们不断向上提升
    发表于 12-21 08:00

    C#数据结构算法分析_ 魏宝刚

    数据结构算法分析》描述了各种类型的数据结构,包括线性表、树、堆、图,以及查找、排序等算法。自始至终将数据结构的基本原理与
    发表于 12-15 16:46 0次下载
    C#<b class='flag-5'>数据结构</b>和<b class='flag-5'>算法</b>分析_ 魏宝刚

    数据结构算法

    全国C语言考试公共基础知识点——数据结构算法,该资料包含了有关数据结构算法的全部知识点。
    发表于 03-30 14:27 0次下载

    算法数据结构——接口

    第三章为算法数据结构,本文为3.2.3 接口。
    的头像 发表于 09-19 17:41 8171次阅读
    <b class='flag-5'>算法</b>与<b class='flag-5'>数据结构</b>——接口

    大牛分享平时如何学习数据结构算法

    数据结构算法的地位对于一个程序员来说不言而喻。今天这篇文章不是来劝你们学习数据结构算法的,也不是来和你们说数据结构
    的头像 发表于 11-02 11:25 2778次阅读

    数据结构算法知识点有哪些?

    数据结构算法知识点有哪些?
    的头像 发表于 01-10 15:22 7931次阅读

    JavaScrit数据结构算法(第2版)

    JavaScrit数据结构算法(第2版)教材下载。
    发表于 06-01 15:35 0次下载

    程序设计和数据结构(嵌入式)

    编程的基础-算法和数据结构入门资料免费下载。
    发表于 04-18 09:35 1次下载

    算法和数据结构基础知识分享(中)

    有哪些常见的数据结构?基本操作是什么?常见的排序算法是如何实现的?各有什么优缺点?本文简要分享算法基础、常见的数据结构以及排序算法
    的头像 发表于 04-06 16:48 390次阅读
    <b class='flag-5'>算法</b><b class='flag-5'>和数据结构</b><b class='flag-5'>基础知识</b>分享(中)

    算法和数据结构基础知识分享(下)

    有哪些常见的数据结构?基本操作是什么?常见的排序算法是如何实现的?各有什么优缺点?本文简要分享算法基础、常见的数据结构以及排序算法
    的头像 发表于 04-06 16:48 553次阅读
    <b class='flag-5'>算法</b><b class='flag-5'>和数据结构</b><b class='flag-5'>基础知识</b>分享(下)