前言:数据结构与算法是计算机科学与工程的基础,它们的相互关系和作用是程序的本质。凭借一句话获得图灵奖的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、不打蓝桥杯、不打种种编程竞赛,可以。但不刷题,不动手,不可以。而刷题平台中,力扣是最适合学习数据结构与算法的。 网上有很多人说,力扣很难——不用理会。力扣恰恰是最基础的,不要等到大三大四再刷力扣,那会很急。


编程导航
传送门

是鱼皮老师做的网站,大大方便了学习资源的查找,上面的资源让我爽了好久。

数据结构与算法——绪论相关推荐

  1. 【王道】数据结构与算法绪论(一)

    ✍.目录总览 绪论的重点为时间复杂度的计算. 1.绪论 数据:数据是信息的载体,是描述客观事物属性的数.字符及所有能输入到计算机最终并被计算机程序识别和处理的符号的集合.数据是计算机程序加工的原料. ...

  2. 数据结构与算法--绪论

    本图文涉及的概念: 数据结构(Data Structure).数据(Data).数据元素(Data Element).数据项(Data Item).数据逻辑结构(Logical Structure). ...

  3. 数据结构和算法 —— 绪论

    什么是数据结构? 数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科. 程序设计 = 数据结构 + 算法 再简单的来说数据结构就是关系,没错,就是数据元素 ...

  4. 1、数据结构及算法绪论

    1.建立数学模型--构造求解方法--选择存储结构--编写程序--测试 2.数据结构+算法=程序 3.主要用于非数值型数据处理 4.数据结构的相关概念: 数据:数值型(整数+实数等).非数值型(声音.图 ...

  5. 数据结构和算法 绪论

    第一部分:数据结构介绍 数据: 数据是信息的载体,是描述客观事物属性的数.字符.以及所有能输入到计算机并被计算机程序识别和处理的符号集合. 数据 -> 元素 -> 数据项 数据结构三要素 ...

  6. 01_数据结构和算法绪论

    在许多问题中,一个重要的观念是:写出一个程序并不够. 如果这个程序在巨大的数据集上运行,那么运行时间就变成了很重要的问题. 对于大量的输入如何估计程序的运行时间,尤其是如何在尚未编码的情况下比较两个程 ...

  7. 自学数据结构与算法——绪论

    参考资料:<大话数据结构>,作者程杰,清华大学出版社 什么是数据结构   数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科.这里不得不提一个 ...

  8. 数据结构(二)算法绪论

    一,算法定义 算是是对于特定问题的求解步骤的描述,在计算机中表现为有限的指令序列.每条指令序列包含一个或者多个操作 二,算法的特征 1,输入.算法有零个或者多个输入 2,输出.算法至少要有一个输出 3 ...

  9. java算法 例 百度云_Java版数据结构与算法(20集版)视频教程百度云下载

    课程目录: 1 Y) C+ M. ~9 S' r7 i  J# _数据结构-Java版(20集)7 {2 h5 w' i9 C' }& }$ J |____第20讲 - 图的最小生成树.avi ...

最新文章

  1. web release (bat tool)
  2. 概率模型分子动力学模拟五元环吡咯C4H5N
  3. 2021年北京高校数学建模校际联赛题目_B
  4. Linux .bin安装文件制作
  5. python print格式化输出类型_第一讲:Python print() 格式化输出
  6. 压缩版styleGAN(Mobile StyleGAN)参数更少、计算复杂度更低
  7. 电表的改装与校准大学物理实验报告_电学实验 一 : 电表的改装、使用与读数...
  8. 二分图——匈牙利算法——的学习
  9. 水晶球 crystal ball
  10. 《圆明园的毁灭》教学设计方案
  11. ms17-010 php版本,Windows系统SMB漏洞ms17-010补丁下载!
  12. 商城类小程序,拼团、砍价、秒杀、预售,一套源码全搞定
  13. matlab 求obb,obb包围盒代码
  14. word文档,中文输入模式下打出英文标点原因(微软拼音输入法为例)
  15. 电机或编码器相关的 CW 与 CCW
  16. CSS常用背景属性(背景颜色、背景图片、背景平铺、背景位置、背景附着、背景色半透明、背景属性复合写法)
  17. mmdetection3d debug 关键文件和断点
  18. 牛客小白月赛21 J.Jelly
  19. 竞猜世界杯,0元免费送 Proscenic 聚划算底价狂欢
  20. (二)国内云计算行业 技术与发展概述

热门文章

  1. CSS3日食示意图动画
  2. 可视门铃、wifi连体衣:苹果的智能家居野心
  3. android 沉浸式 华为,华为沉浸式智真
  4. 2019【有道】考研政治全程班视频
  5. Github Page+Hexo搭建炫酷个人博客(主题优化基础篇)
  6. 【2020-08-05】.out文件的DSP程序烧写
  7. Linux中如何优雅的关闭Socket通信
  8. VR全景图片,探究VR全景图片为何如此受欢迎?
  9. es同步mysql方案_ES数据同步方案
  10. Windows下好用的工具集合