前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【图解数据结构与算法 | 第一篇】简介数据结构与算法

【图解数据结构与算法 | 第一篇】简介数据结构与算法

作者头像
程序员牛肉
发布2024-09-26 13:08:48
930
发布2024-09-26 13:08:48
举报
文章被收录于专栏:小牛肉带你学Java

大家好,我是程序员牛肉。

自从计算机诞生以来,人们就在不断的探索如何高效的把现实世界的信息存储到计算机当中。为此我们创造出了各种数据结构来不断的满足我们的业务需求。例如:栈,队列,哈希表,树,图。

而学习数据结构与算法,就是让我们去深入的了解这些数据结构。并不断的尝试融会贯通,最终可以根据自己的业务需求从现实数据中抽离出合适的数据结构。

在正式学习数据结构与算法之前,我们要先来学习什么是“数据结构”以及什么是“算法”。

什么是数据结构

数据结构就是相互之间存在一种或多种特定关系的数据元素的集合。而我们学习数据结构,实际上就是在学习这些数据元素相互之间的关系。

通俗的来讲,学习数据结构,就是在学习这些数据是以何种形式存放到计算机中的。他们的逻辑形式是什么?他们在内存中的实际存储结构是什么?我们可以对这些数据进行哪些运算。

我们用一张表就可以轻易的表示数据有哪些逻辑结构:

集合结构:也就是说这些数据除了属于同一个集合之外,没有任何的关系。

线性结构:这些数据除了第一个元素之外,每一个元素都有自己的前驱元素,除了最后一个元素之外,每一个元素都有自己的后继元素。并且数据元素之间是一对一的关系。

树形结构:树形结构的元素之间存在一对多的关系。

图性结构:图形结构的数据元素是多对多的关系。

这四个逻辑结构离我们的生活很近,我来举个例子:

  • 当你想要存放你们的学生信息的时候,你可以使用集合结构。
  • 当你想要存放你们学校的考试排名的时候,你可以使用线性结构。
  • 当你想要存放你们学校的领导体系架构的时候,你可以使用树形结构。
  • 当你想要存放你们学校道路信息的时候,你可以使用图形结构

说完了数据的逻辑结构,我们来看看存储结构。存储结构是在探讨这些数据在计算机具体的存储单元中到底要怎么存放。

顺序存储:就是把数据元素存放在地址连续的存储单元中。但是这种存储结构有一个缺陷:如果我们要存储 3 个元素,就要找到 3 个连续的空位进行存放,但是如果没有连续的 3 个空位呢?

例如下图这种情况,我们明明是有三个空位的,但是由于这三个空位不是连续的,我们也就不能按照顺序存储的方式存储数据了。

为了改进这一缺陷,我们想到了链式存储:

通过这种形式,我们就把数据存储在了不连续的存储单元内。

这两种存储方式各有利弊,顺序存储方便查找和修改元素。链式存储方便删除和添加元素。我们需要根据自己的需要选择存储方式。

接下来我们来介绍算法。

summer

什么是算法

算法其实就是对问题求解的一个步骤。他是指令的有限序列。

通俗的来讲:算法就是你写的代码。你哪怕写一行代码,那也是算法

一个算法应该有以下五个重要的特征:

  • 有穷性:一个算法必须在执行有穷步骤后停止,不可以无限循环下去。
  • 确定性:算法中的每一条指令都必须具有明确的含义,对于相同的输入可以获得相同的数出
  • 可行性:算法的描述操作必须可以被用代码实现,不能只停留在概念层面
  • 输入:一个算法有0个或者1个输入,这些输入取自某个特定的集合。
  • 输出:一个算法有一个或者多个输出。

既然是算法,那就有好坏之分。我们用时间复杂度和空间复杂度来描述算法的好坏。

无论是时间复杂度还是空间复杂度,都是在尝试探讨一个数量级上关系。

时间复杂度(Time Complexity)

时间复杂度是衡量算法执行时间与输入数据规模之间的关系。通常用大O符号表示,例如O(n)、O(n^2)、O(log n)等。时间复杂度描述了算法在最坏情况下的性能。

  • O(1):常数时间复杂度,表示算法执行时间与输入规模无关。
  • O(log n):对数时间复杂度,通常与二分搜索等算法相关。
  • O(n):线性时间复杂度,表示算法执行时间与输入规模成正比。
  • O(n log n):线性对数时间复杂度,常见于快速排序和归并排序等算法。
  • O(n^2):平方时间复杂度,常见于简单排序算法如冒泡排序和选择排序。
  • O(2^n):指数时间复杂度,通常与递归算法相关,效率较低。

空间复杂度(Space Complexity)

空间复杂度是衡量算法在执行过程中所需的存储空间与输入数据规模之间的关系。它同样使用大O符号来表示。

  • O(1):常数空间复杂度,表示算法所需的存储空间与输入规模无关。
  • O(n):线性空间复杂度,表示算法所需的存储空间与输入规模成正比。
  • O(n^2):平方空间复杂度,通常在需要存储与输入规模平方成正比的数据结构时出现。
  • O(log n):对数空间复杂度,通常与递归算法相关,特别是那些使用二分搜索的算法。

而现代计算机由于存储空间的不断扩张,相比较于空间复杂度,我们更加关注一个程序的时间复杂度。有的时候甚至会为了时间复杂度牺牲空间复杂度。

我们学习数据结构,主要是在学习三个部分:逻辑结构,存储结构和运算。后面我的文章也会主要围绕这三部分去讲。除此之外,学习结构与算法需要你有C语言的相关知识储备,最起码你要能看懂相关的代码。

相信通过我的介绍,你已经大致了解什么是“数据结构”与“算法”。希望我的文章可以帮到你。

下一篇文章我们将学习什么是线性表。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员牛肉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档