数据结构与算法——绪论

article/2025/9/10 3:24:13

前言:数据结构与算法是计算机科学与工程的基础,它们的相互关系和作用是程序的本质。凭借一句话获得图灵奖的Pascal之父Nicklaus Wirth把它们表示为 算法+数据结构=程序

目录:

    • 1、算法与数据结构的重要性
        • ①相关定义
        • ②为什么要学习算法
        • ③数据结构和算法的关系
    • 2、算法发展史
    • 3、算法举例:并行算法Goolge的优势
    • 4、如何学习算法和数据结构
    • 5、相关资源推荐

1、算法与数据结构的重要性

①相关定义

算法(algorithm),非形式地说,就是任何良定义的计算过程,该过程取某个值或值的集合并产生某个值或值的集合作为输出。
——《算法导论》


数据结构(data structure),是一种存储和组织数据的方式,旨在便于访问和修改。
——《算法导论》

直白来讲:
算法,就是问题的解法。广义来讲,我们所写的程序,乃至每个函数都是算法。
数据结构就是数据在计算机存储、组织的方式,指数据的组织形式 |

在这里插入图片描述

②为什么要学习算法

假设计算机是无限快的并且计算机的存储空间是无穷大且免费的,我们还需要学算法吗?
问题是:计算机的处理速度不是无限快的,存储空间也是有限且不便宜的。
——》所以,如何明智地使用计算机的资源就是个问题?
——》
而,我们这里所说的算法便是用来解决这个问题,它能帮你合理利用计算机的硬件资源,对问题作出更优、更快的解答。

③数据结构和算法的关系

一个卓越算法的实现,往往离不开精心设计的数据结构
例如:

  • binary search tree(二叉搜索树)和RB-tree(红黑树)就是为了解决查找问题而发展来的特殊数据结构。
  • max-heap(或min-heap)就可以用来协助所谓的heap sort(堆排序)
  • 最基础的链表(Lintnode)就可以很快解决数据的插入、删除问题

可以说,特定的数据结构是为了实现某种特定的算法,两者难以分割。

2、算法发展史

早在1946第一台计算机ENIAC被发明以前,人们对于算法就已经研究了很长的时间。而算法历史上的每一个“第一次”,都为计算机的发展带来了重大影响,“算法是程序之魂,程序是算法之衣”,这句话从算法的发展史中略窥一二。

1️⃣算法概念的第一次被提出
“算法”,中文名称最早出自公元前一世纪的《周髀算经》;英文名称Algorithm 来自于9世纪波斯数学家al-Khwarizmi,因为al-Khwarizmi在数学上提出了算法这个概念。

2️⃣历史上的第一个算法:欧几里得算法
公元前330年,被人们称为“几何之父”的欧几里得出生。他的成就之一就是给出
【欧几里得算法(或称辗转相除法)】,为求解最大公约数提供了快捷方法,直到今天的计算机学科,欧几里得算法仍然是最经典的几大算法之一。在这里插入图片描述

3️⃣:历史上的第一个算法程序
“数字女王”阿达·洛芙莱斯(Ada Lovelace),世界上第一位程序员,为其朋友制作的巴贝奇分析机编写了求解【伯努利方程(详见高等数学教材)】的程序。这是人类史上的第一个算法程序。

巴贝奇分析机在这里插入图片描述
》阿达·洛芙莱斯(Ada Lovelace)
在这里插入图片描述

4️⃣:第一次解决【算法定义】的难题
进入20世纪,算法得到了进一步的巨大发展。这个世纪,英国数学家图灵提出了著名的图灵论题,并提出一种假想的计算机的抽象模型,这个模型被称为图灵机。
构造图:
在这里插入图片描述
机器头有一组内部状态,还有一些固定的程序。每个时刻,机器头都要从纸带上读入一个方格信息,然后结合内部状态查找程序表,再根据程序输出信息到纸带方格上,并转换自己的内部状态进行移动。
虽然图灵机十分地简单,但它可以用来模拟任何算法。图灵机对人们使用纸笔进行数学计算的过程进行了抽象,实现了用机器代替人类进行数学计算。
【图灵的思想对算法的发展起到了重要的作用。】

5️⃣ 现代 相关前沿算法举例

  1. AI领域:神经网络算法
    神经网络是一个具有相互连接的节点的计算系统,其节点的工作方式更像是人脑中的神经元。这些神经元在它们之间进行处理并传递信息。每个神经网络都是一系列的算法,这些算法试图通过一个模拟人类大脑运作的过程来识别一组数据中的潜在关系。
    在这里插入图片描述
  2. 信息安全领域:DES加密算法:
    在这里插入图片描述

3、算法举例:并行算法Goolge的优势

每天Google的网站要处理十亿个以上的搜索,GMail要储存几千万用户的2G邮箱, Google Earth要让数十万用户同时在整个地球上遨游,并将合适的图片经过互联网提交给每个用户。如果没有好的算法,这些应用都无法成为现实。

在这些的应用中,哪怕是最基本的问题都会给传统的计算带来很大的挑战。例如,每天都有十亿以上的用户访问Google的网站,使用Google的服务,也产生很多很多的日志(Log)。因为Log每份每秒都在飞速增加,我们必须有聪明的办法来进行处理。我曾经在面试中问过关于如何对Log进行一些分析处理的问题,有很多面试者的回答虽然在逻辑上正确,但是实际应用中是几乎不可行的。按照它们的算法,即便用上几万台机器,我们的处理速度都根不上数据产生的速度。

那么Google是如何解决这些问题的?

首先,在网络时代,就算有最好的算法,也要能在并行计算的环境下执行。在Google的数据中心,我们使用的是超大的并行计算机。但传统的并行算法 运行时,效率会在增加机器数量后迅速降低,也就是说,十台机器如果有五倍的效果,增加到一千台时也许就只有几十倍的效果。这种事半功倍的代价是没有哪家公 司可以负担得起的。而且,在许多并行算法中,只要一个结点犯错误,所有计算都会前功尽弃。

那么Google是如何开发出既有效率又能容错的并行计算的呢?

Google最资深的计算机科学家Jeff Dean认识到,Google所需的绝大部分数据处理都可以归结为一个简单的并行算法:MapReduce。 这个算法能够在很多种计算中达到相当高的效率,而且是可扩展的(也就是说,一千台机器就算不能达到一千倍的效果,至少也可以达到几百倍的效果)。 MapReduce的另外一大特色是它可以利用大批廉价的机器组成功能强大的server farm。最后,它的容错性能异常出色,就算一个server farm宕掉一半,整个fram依然能够运行。正是因为这个天才的认识,才有了MapReduce算法。借助该算法, Google几乎能无限地增加计算量,与日新月异的互联网应用一同成长。
——摘自《算法的力量》李开复 作

4、如何学习算法和数据结构

  • 1、多应用计算机学科是工具学科,工具学科最重要的一个特点是:越用越熟练。在平时写代码时,把数据结构、算法应用到自己的程序中,帮自己解决问题。不光是这一门课程,要学好计算机技术,就要多用、会用。最简单的方式就是刷题,力扣、牛客、CF……,永远不缺题目。
  • 2、主动自学搞计算机技术,最重要的一点之一就是自学。学校的数据结构与算法课程,没有动态规划、没有回溯算法……而学校没讲的很多东西,在面试要用,在以后工作要用。这意味着,自己必须要自学很多东西。**好在计算机学科在网上学习资源丰富,github上有不少数据结构与算法项目。遇到BUG不会做,可以去stackoverflow、CSDN……咨询。**当然,前提是:自己主动去学,去取。
  • 3、理解不了就多作图、多看图数据结构与算法课程,会比以前的编程语言课抽象一点。算法的具体过程、各大数据结构的相关特点,有时候只凭借简单的敲敲代码就理解透彻。多画图,看看数据结构长什么样,多推导算法的具体流程,像归并排序、二叉搜索树等等,代码上难以理解的东西,通过作图就可以轻松理解。 当然,觉得自己用笔画画不好的,也可以用作图软件,C++/Python还有专门的作图库(我暂时只会这两个)。

5、相关资源推荐

课程资源——
中国大学MOOC
北京大学张铭老师主讲的《数据结构和算法》
在这里插入图片描述
B站
数据结构与算法基础(青岛大学-王卓)
在这里插入图片描述

辅助网站:
VisuAlgo.net/en
传送门
可以把算法和数据结构直观表示为动画
在这里插入图片描述
力扣
传送门
在这里插入图片描述
学计算机不打ACM、不打蓝桥杯、不打种种编程竞赛,可以。但不刷题,不动手,不可以。而刷题平台中,力扣是最适合学习数据结构与算法的。 网上有很多人说,力扣很难——不用理会。力扣恰恰是最基础的,不要等到大三大四再刷力扣,那会很急。


编程导航
传送门
在这里插入图片描述
是鱼皮老师做的网站,大大方便了学习资源的查找,上面的资源让我爽了好久。


http://chatgpt.dhexx.cn/article/26p3gLVc.shtml

相关文章

【建议收藏】数据结构和算法面试题

数据结构 数据结构分为两大类,线性结构和非线性结构。 线性结构:数组、队列、链表、栈非线性结构:多维数组、树结构、图结构 1.数组 数组是最常用的数据结构,用于存储相同类型的数据,数组的长度也是固定的。 数组…

数据结构和算法:什么是数据结构,什么是算法

文章目录 前言数据结构和算法1.数据结构1.1数据结构的类型2.算法2.1推导大O阶方法常数阶O(1)和线性阶O(n)为什么算法1时间复杂度为O(n)而不是O(1)呢?对数阶O( logn):平方阶O( n2): 前言 这几天复习数据结构,在看《大话数据结构》&…

python数据结构和算法

前面系统地学习了python相关的基础知识,接下来,我们将继续学习python的数据结构和算法。 我们知道,程序数据结构算法,那么,什么是数据结构,有什么是算法呢?如何系统的学习数据结构和算法呢&am…

【数据结构和算法】入门初识篇

目录 一、前言 二、数据结构的理解 物理结构和逻辑结构 1.逻辑结构 2. 物理结构 一、前言 我们前面我学了Java的内部类,现在来学习一下数据结构和算法,多科齐下不仅可以 学科交插学习互相帮助,还可以锻炼跳跃性思维。 二、数据结构的…

什么是数据结构和算法

从远古的汇编语言到现代编程语言,计算机编程已经变得更加强大、高效和先进。然而,计算机编程中的数据结构和算法的核心概念和使用并没有改变。从一开始,DSA就一直是计算机编程的核心。 备注: 下文统一使用DSA表示数据结构和算法。 你可能听说…

数据结构与算法——算法

😊数据结构与算法——算法 🚀什么是算法?🚢算法的特征(特性) 🚀算法的设计(要点)🚀算法效率的度量🚢事后统计法🚢事前分析估算法&…

数据结构与算法

数据结构与算法 1.数据结构的概念 数据结构指的是一组数据的存储结构。 2.算法的概念 算法是指操作数据的一组方法 3.二者的关系 数据结构是为算法服务的,而算法要作用在特定的数据结构上。 4.最常用的数据结构预算法 数据结构:数组、链表、栈、队列、散…

数据结构与算法学习笔记

本文是王争老师的《算法与数据结构之美》的学习笔记,详细内容请看王争的专栏 。有不懂的地方指出来,我做修改。 数据结构与算法思维导图 数据结构指的是“一组数据的存储结构”,算法指的是“操作数据的一组方法”。 数据结构是为算法服务的&a…

数据结构与算法(总结)

总结: 一、数据结构(Data Structure) 是数据的组织结构,用来组织、存储数据。算法(Algorithm) 就是解决问题的方法或者过程。 二、数据结构分为逻辑结构和物理结构。逻辑结构分为集合结构、线性结构、树形结…

Minio 分布式集群部署

文章目录 一、分布式存储可靠性常用方法1. 概述2. 冗余3. 校验 二、分布式Minio优势2.1. 数据保护2.2. 高可用2.3.一致性 三、运行分布式Minio3.1. 启动方案简述3.2. 案例说明3.3. 制作分布式启动脚本3.4. 制作伪分布式启动脚本3.5. 登录minio 四、分布式Minio负载均衡4.1. ngi…

【集群分布式问题】分布式集群时钟同步问题及解决方案

文章目录 一、 时钟不同步导致的问题二、集群时钟同步配置1. 分布式集群中各个服务器节点都可以连接互联⽹2. 分布式集群中一个节点或每个节点都不能访问互联网 一、 时钟不同步导致的问题 时钟此处指服务器时间,如果集群中各个服务器时钟不⼀致势必导致⼀系列问题&…

hadoop-spark完全分布式集群搭建

hadoop-spark完全分布式集群搭建 一、解压spark文件二、修改spark-env.sh文件四、分发给各节点五、主节点配置环境六、启动 本次采用的系统为centos7 hadoop版本为2.7.7 spark版本为2.1.1 链接:https://pan.baidu.com/s/1j4M21s6rURvl2uvZC_wxtQ 提取码:…

minio分布式集群部署

minio分布式集群部署 分布式 Minio 可以让你将多块硬盘或者多台服务器组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式 Minio 避免了单点故障。MinioMinio分布式模式可以帮助你搭建一个高可用的对象存储服务,你可以使用这些存储设备&#xff…

Ubuntu20.04下搭建Hadoop伪分布式集群

Ubuntu虚拟机的安装 VW ware安装Ubuntu虚拟机及环境配置 关闭防火墙 为了减少搭建集群的复杂性,关闭防火墙如果对防火墙很了解可以可以不用关闭开放相应端口即可。借助ufw软件包使操作更方便。 # 安装防火墙工具 sudo apt-get install ufw# 开启 sudo ufw enabl…

Hadoop伪分布式集群的搭建

一、准备虚拟机 1.从网上将VMware下载下来 https://www.vmware.com/content/dam/digitalmarketing/vmware/en/images/gallery/banners/content/hero-generic-1400x350.jpg 2.下载centos https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/isos/x86_64/ 二、配置网络&…

Hadoop完全分布式集群环境搭建

一、实验环境 主机操作系统:Windows7 以上(64 位)虚拟机软件:Oracle VM VirtualBox客户机操作系统:CentOS-6.8(64 位)JDK:1.8(Linux 版)SSH 连接客户端&…

基于ubuntu的hadoop完全分布式集群搭建

借鉴网址1 借鉴网址2 hadoop官方配置教程 搭建虚拟机,克隆(或者先配置JAVA和Hadoop环境再克隆,之后要改主机名和映射以及SSH免密) 可以利用xsync集群分发脚本一台机器配置其他机器分发 修改主机名和ip映射 检查 配置ssh免密登录…

Linux 部署Hadoop伪分布式集群教程

首先:我们需要下载一些关于Hadoop伪分布式集群需要的工具与tar包 链接: https://pan.baidu.com/s/1oUw1jDCxfghWsnaWauSHKg 提取码:6s5a 接下来打开虚拟机终端,先创建一个文件夹用来解压Hadoop的tar包 接着使用xshell远程连接到…

Jmeter分布式集群

一、背景 JMeter是一款非常不错的开源压力测试工具,但在使用过程中也会遇到比较多问题排查,例如:起压机(客户端)请求并发数无法达到既定目标量、报内存溢出错误、错误事务数过高; JMeter有两种运行模式&a…

hadoop分布式集群搭建

Hadoop入门 1. 了解Hadoop 1.1 Hadoop 的优势(4高) 高可靠性:存在多个数据副本,即使某个元素或存储出现故障,也不会导致数据的丢失 高拓展性:在集群见分配任务数据,可方便的拓展数以千计的节…