美文网首页互联网科技编程笔记程序员
1-玩转数据结构-欢迎学习数据结构

1-玩转数据结构-欢迎学习数据结构

作者: 天涯明月笙 | 来源:发表于2018-08-10 13:35 被阅读123次

欢迎大家学习新课程: 玩转数据结构

  • 为什么要学习数据结构?

数据结构是所有计算机专业的同学必学的课程

  • 数据结构研究的是数据如何在计算机中进行组织和存储,使得我们可以高效的获取数据或者修改数据。

为了在不同场景下高效获取或修改。我们就发明了不同的数据结构。

整体而言,数据结构可以分为三种:

线性结构; 树结构; 图结构;

markmark

本节课带领大家从零开始深入数据结构。学完课程对于大多数的名词都有认识,以及从底层实现出来。

对于数据的存储这个任务,解决方案是很多的。我们需要根据应用的不同,灵活选择最合适的数据结构

在计算机的世界中,数据结构无处不在。

markmark

通常我们使用数据库,数据库是一个封装好的软件,我们只需要通过sql语句进行访问。

markmark

我们创建一个数据库,底层需要数据结构。

markmark

没有这些树和哈希表的知识,我们是无法创建出数据库软件的。

操作系统: 快速在多任务间切换

markmark

递归调用使用系统栈来实现。优先队列进行任务切换。

文件压缩:

各种各样的格式,png mp3等都是进行了一定程度的压缩,形成了格式。

markmark

最简单常用的压缩方式就是哈夫曼树。现代的压缩算法需要更先进的数据结构

通讯录: 设置通讯录软件,存储不同的联系人,使用链表进行实现。

当联系人变多之后,查找一个联系人变成了一个很慢的操作。手持设备本身就效率低下。被一个实习生解决,使用了一种叫做Trie - 前缀树的数据结构

markmark

不管通讯录中有多少人,这个查找联系人操作都变成了毫秒级别的。

大量的算法,以数据结构为基石。

游戏设置大量的算法,寻路算法,最短路径。

图论算法: DFS(深度优先遍历) 使用栈, BFS(广度优先遍历) 使用队列; 几乎所有的算法都要以数据结构为基石。

数据结构 + 算法 = 程序

几乎任何一本算法教材,都包含大量的篇幅讲解数据结构

课程设置

针对数据结构零基础的同学,需要掌握java语言基础(课程使用)

数据结构不应该局限于特定的语言。

java: 推广度高,大多数同学都会。 java是一门完全面向对象的语言。

这种面向对象的特性,非常适合我们进行数据结构的研究。

对于数据结构中我们要实现的大多数内容都是一个名词,链表,队列,栈,二叉树,哈希表都是一个名词,在这个名词上赋予不同的操作,这样的设计思路非常符合面向对象的设计原则。

不仅仅会收获数据结构知识,对于面向对象的设计,java语言中对于面向对象设计相应的语言支持特性理解深入。

鼓励同学们使用其他语言实现这个课程的代码。 只要你所选择的语言,支持面向对象的范式的语言,C++ PHP swift python等

这样做的同学会有双份的收获。数据结构+语言

课程中主要涉及到12种数据结构

markmark

课程对于每种数据结构不仅仅是简单实现而已,很多时候一种数据结构是有多种实现的,会对多种不同的实现进行比较。

链表: 单链表,双链表; 哈希表: 两种不同实现; 并查集: 一步一步的优化,完成好几个版本

递归与非递归的算法实现

本课程不包含图结构,图论领域以算法为主

对于图结构而言,本身存储一个图是非常简单的,简单线性表就可以。

图论领域庞大,算法为主。如 计算最小生成树,计算最短路径,计算最大联通分量等都是要有算法支撑的。

起步的时候讲解的都是非常基础的数据结构。

markmark

面向基础: 什么是递归;调试; 简单的复杂度分析(包含均摊复杂度分析), 所有数据结构,手把手的底层实现,创建属于自己的小型数据结构库。

数据结构 + 编程水平 + 自己拓展; 数据结构背后思考: 强调比较和优化

  • 面向面试的数据结构:
markmark

前六个都是非常基础的数据结构, 同时也是笔试面试中的常客,这六个里面的操作,算法逻辑,要能达到白板编程(手写代码)。

  • 面向竞赛的数据结构: 线段树,Trie,并查集

数据结构领域的灵活性,只是处理对象发生了变化,就可以设计出新的更优秀的数据结构。

面试和竞赛,不止会讲底层实现,会讲面试和竞赛真正的使用这些数据结构来解决的问题(LeetCode获取的问题)。

markmark

最后三章: AVL 红黑树 哈希表

前两个都是平衡二叉树的实现,哈希表也是一种非常常用的数据存储的结构,相对而言复杂,代码量大。

一般这三个面试时会提问一些概念性的或者性能分析上的问题。红黑树虽然是个平衡二叉树,但不是完全平衡二叉树,哈希表的冲突检测相关,性能分析。

课程从零开始搭建三种数据结构,并且分析蕴含在这三种数据结构中的问题。(大多时候调用标准库)

希望同学们通过这门课真正玩转数据结构

学习数据结构(和算法) 到底有没有用?

这门课(玩转数据结构) 和 那门算法与数据结构的区别下节谈。

大多数同学疑惑: 为什么我觉得数据结构没有用?

  • 学习数据结构有什么用?

为什么我在工作中,用不到数据结构(和算法)?在工作中用不到数据机构 (和算法), 所以它们没用?数据结构(和算法) 主要是为了应付面试或者考试用?

答案:也对,也不对。

软件开发过程越来越简单。

markmark

这些操作系统,软件包等里面包含大量的数据结构的应用,但是我作为一个ios开发者可以对这些一无所知,只需要使用工具以及提供的api开发出一个app。

app开发的门槛越来越低了。

markmark

以为开发者提供便利为荣,年龄最小开发者,最年长的开发者。

只是使用工具来开发,技术上是越来越简单的。

markmark

开发越来越简单以后,计算机专业的同学们关注的应该是这些底层的东西。

markmark markmark

搭建在底层基础上的框架环境等,开发这些工具时就需要使用大量的数据结构和算法。越大的公司,越需要同学们拥有扎实的数据结构(和算法)功底

大公司也有业务逻辑组装成产品的工具,更重要是做出更先进更底层的开发。

当产品庞大,用户量大,数据结构和算法就派上用场了,算法与数据结构可以提高你的上限,走的更远。

计算机技术增长,成为技术专家必须学习数据结构。

本课程和《算法与数据结构》 的区别

玩转数据结构: 以数据结构为主线,大多数都是另一门课里不涉及的。

markmark

只有二分搜索树,并查集,堆 这三个在算法和数据结构中讲过,内容重叠低。

markmark

算法与数据结构课程涉及排序算法,图算法。语言的选择上有很大区别,上一门课使用了C++语言,提供了java代码。

这门课: 选择java 完全面向对象,但更鼓励同学们使用自己熟悉的语言完成课程内容

脚本语言的特殊性: 如js Python等

个人认为: 脚本语言可以用来学习数据结构的原理,但是不适用于考察数据结构(和算法)的性能; 性能怎样,取决于解析器对于不同写法的解析。

Pythonic的写法可能比逻辑本身更重要

arr = []
for i in range(10):
    arr.append(i)

arr = [i for i in range(10)] // 列表生成式写法

两种写法性能的差异,下面写法性能大大优于上面的写法; 脚本语言不仅仅需要关注实现的具体逻辑,还要关注完成这个逻辑使用的语法。

C++,java等也有类似问题,但不明显,近乎可以忽略; LeetCode: C++ java可以通过,python会可能遭到超时。

课程官方github

https://github.com/liuyubobobo/Play-with-Data-Structures

逐渐添加多语言支持,以及更多习题。

关于答疑:

问答区老师进行了详细的回答。

  • 请不要直接贴代码,问: 这个代码为什么输出结果不对?

建议: 仔细的debug。debug是软件工程师的必备技能。(小数据用例)和课程源码进行对比。逐个模块进行对比,替换。

  • 好的问题: 详细说明,具体在哪个地方出了问题?你的思考是怎样的?认为会得到怎样的结果?可实际得到了怎样的输出?(问题包含了思考)

课程面向面试,但数据结构只是面试的一部分,甚至只是算法面试的一部分。算法面试不仅有数据结构,还有很多和基础算法相关的内容,排序算法,二分搜索算法,算法设计方面:回溯,动态规划,贪心算法等等。

玩转算法面试偏向于使用具体的数据结构解决算法问题,算法面试会直接使用Hashmap类来解决具体问题; 玩转数据结构注重于数据结构的底层实现。

关于竞赛

竞赛涵盖的内容更广泛,深度也更高; 图论; 计算几何; 组合数学; 概率; 更复杂的算法和数据结构

相信这个课程,是你真正掌握数据结构的开始

课程编程环境搭建简介

Java语言(Java8)

其实课程代码本身对java语言版本并没有太多要求,Java10也是可以的。

官方下载:

oracle官网可以下载,下载JDK。直接下滑到尾页。

markmark

点进去默认显示的java10, 一直往下拖,下面就是历史版本。

markmark

点击JDK Download,会进入下载页面。包含java的两个版本。

点击同意条款,相应的下载完,安装就是下一步下一步。

IDE: IntelliJ IDEA(官网下载) 社区版就够用。

此处推荐慕课网免费课: IntelliJ IDEA神器使用技巧,下一节我们会先介绍IDEA技巧学习。

相关文章

  • 1-玩转数据结构-欢迎学习数据结构

    欢迎大家学习新课程: 玩转数据结构 为什么要学习数据结构? 数据结构是所有计算机专业的同学必学的课程 数据结构研究...

  • 数据结构之数组

    数据结构之数组 这个系列是在学习慕课网玩转数据结构课程的学习笔记,用JAVA语言来重新系统的整理一下数据结构的知识...

  • 数据结构与算法学习笔记1

    第一章 绪论 1-教学安排 略 2-数据结构基本概念,术语与主要学习内容 1-数据结构主要内容     在计算机学...

  • 数据结构与算法-目录

    数据结构与算法-目录 C语言篇 数据结构和算法-C语言篇1-绪论数据结构和算法-C语言篇2-初识算法数据结构与算法...

  • 数据结构与算法-线段树

    数据结构与算法-线段树 图片来自慕课网,liuyubobobo讲师的课程“玩转数据结构 从入门到进阶” 线段树介绍...

  • Python实现链表

    用Python玩转数据结构 链表 节点类 根据在前学过的数据结构,那么必须有节点,Python里面没有指针的说法,...

  • 1-3 课程的注意事项

    1.《玩转数据结构》和《算法与数据结构》的区别  后者的主要内容包括三个数据结构(二分搜索树、堆、并查集)、排序算...

  • 玩转数据结构1-数组

    1. Java中的数组 Java中的数组是静态数组,使用场景主要是“索引有语意”的情况,比如按学号查找分数,索引为...

  • 极客时间算法40讲笔记之一——如何学习

    如何有效学习数据结构 Chunk it up (切碎知识点)比如要学习算法与数据结构,我们可以把想要学习的数据结构...

  • 数据结构回顾学习-基础知识

    数据结构回顾学习笔记 这次数据结构回顾笔记,是我对数据结构回顾学习的笔记。回顾过程是参考易百教程网站上数据结构教程...

网友评论

  • 胡骄立:你这文章不就是慕课网BoBo老师的视频的内容吗?有经过授权吗?你就这样搬过来!

本文标题:1-玩转数据结构-欢迎学习数据结构

本文链接:https://www.haomeiwen.com/subject/ntrfbftx.html