文档章节

程序员的进阶课-架构师之路(1)-数据结构与算法简介

 沧海5
发布于 09/05 23:12
字数 1838
阅读 9
收藏 0
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

现在市面上的数据结构与算法的教程也都不少,但有两个问题,第一是泛泛而谈,第二是基本都是c语言实现,而java作为第一主流语言,理应有它自己的独到之处。这也是我写这些博客的初衷,我会讲解java实现的数据结构和算法。

至于说为什么要学习数据结构和算法,我相信大家都应该清楚。大家平时的工作,敲的业务代码,都属于外功,可以帮你轻松地完成老板交待的工作,每个月能挣到属于自己的那份钱。但我不知道小伙伴们有没有这样的困境,工作三到五年,项目做了很多,但自己的能力始终处于二流水平,写业务代码,没点问题;想跳槽面试,发现面试官问的问题都很底层,跟自己平时的工作风马牛不相及。为什么会出现这样的情况呢?

是因为我们的底子薄了,平时积累的也不够。很多人都这样举例:编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱。一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数据结构和算法的人也能编程。但是如果一个开车的人懂变速箱的原理,比如降低速度来获得更大的牵引力,或者通过降低牵引力来获得更快的行驶速度。那么爬坡时使用1档,便可以获得更大的牵引力;下坡时便使用低档限制车的行驶速度。回到编程而言,比如将一个班级的学生名字要临时存储在内存中,你会选择什么数据结构来存储,数组还是ArrayList,或者HashSet,或者别的数据结构。如果不懂数据结构的,可能随便选择一个容器来存储,也能完成所有的功能,但是后期如果随着学生数据量的增多,随便选择的数据结构肯定会存在性能问题,而一个懂数据结构和算法的人,在实际编程中会选择适当的数据结构来解决相应的问题,会极大的提高程序的性能。

我想,如果你懂数据结构和算法,那你的薪资必然是要比不懂的朋友或同行要高的,因为当他还在面向百度编程的时候,你已经直指了问题的核心,你会用更底层更优雅的方式去解决你所面对的问题。这就是数据结构和算法的魅力,也是我接下来要跟大家聊的内容。

曾经一位哲人说过:程序=数据结构+算法。

数据结构是程序的骨架,算法是程序的灵魂。那我们就从骨架和灵魂来开始我们的程序之旅吧。

一、数据结构

百度百科:数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法索引技术有关。

1.数据结构的基本功能

  ①如何插入一条新的数据项

  ②如何寻找某一特定的数据项

  ③如何删除某一特定的数据项

  ④如何迭代的访问各个数据项,以便进行显示或其他操作

2.数据结构的分类

3.关于几种数据结构的优缺点,来个网络图

这些数据结构我们在后面都会讲到,请朋友们不要着急。

 

二、算法

百度百科:算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。

在我们的java中,算法通常都是由类来实现的,前面给大家列举的数据结构,除了数组(注意,数组很特殊,后面会单独讲),都是由类来实现的,算法解决了什么问题呢?

算法解决的就是如何更快速、更有效地对数据结构进行操作的问题。为什么我们有些数据结构查找快,而有些数据结构新增删除快,这都是由实现这些数据结构的算法决定的。

1.算法的特征

    ①有穷性(Finiteness)
        算法的有穷性是指算法必须能在执行有限个步骤之后终止;
    ②确切性(Definiteness)
        算法的每一步骤必须有确切的定义;
    ③输入项(Input)
        一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;
    ④输出项(Output)
        一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
    ⑤可行性(Effectiveness)
        算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)。

2.算法的设计原则

其实没那么多废话,就一条:最短时长,最短路径。

具体而言,我们设计的算法,应该是要么满足高效率,要么满足低存储。二者不可得兼。

有些时候,我们会拿时间换空间,有时又是以空间换时间。

具体应该怎么设计,要具体情况具体分析,哲人说过,没有最好的算法,只有最合适的算法。至于这个哲人是谁,还是请各位看官自己去想吧。

以上,就是我对数据结构和算法的概述,我会用大概30篇的章节给大家进行讲解,争取讲到讲透,也谢谢看官老爷们的支持。我们一起努力。


我的微信公众号:架构真经(id:gentoo666),分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。每日更新哦!

参考文章:

  1. https://www.cnblogs.com/ysocean/p/7889153.html
  2. https://blog.csdn.net/weixin_43802541/article/details/89204221

参考书籍:参考书籍:《Java数据结构和算法》(请支持正版)

© 著作权归作者所有

粉丝 2
博文 39
码字总数 76641
作品 0
私信 提问
Android 网络编程 目录

Android 网络编程 目录 Android 网络编程1 Http协议 Android 网络编程2 Okhttp缓存机制 Android 网络编程3 Java NIO to be continued... Android 架构师之路 目录 Android 架构师之路1 UML图...

香沙小熊
2018/06/21
0
0
滴滴裁员2000,赔偿方案已出!程序员:我很开心!

上周,滴滴CEO程维宣布:正式做好过冬准备!整体裁员比例占到全员的15%,涉及2000人左右。 据了解20日补偿方案如下:补偿一般为N+1个月,如果本周能确认,再额外给一个月补偿——有滴滴员工证...

程序员小灰
02/28
0
0
12月初值得一读的10本技术新书(分布式架构、自然语言、程序员成长等)!文末有福利!

12月1日,阿里云云栖社区机构号 联合IT图书专业出版社 博文视点 为大家带来十本技术新书(分布式架构、自然语言、程序员成长等)。以下为书籍详情,文末还有福利哦! 书籍名称:《OpenCV算法...

阿里云云栖社区
2017/12/01
0
0
原来这样做,才能向架构师靠近

说在前面:达人课是GitChat的一款轻阅读产品,由特约讲师独家发布。每一个课程你都可获得6-12篇的深度文章,同时可在读者圈与讲师互动交流。GitChat达人课,让技术分享更简单。进入我的GitCh...

gitchat
2017/11/14
0
0
OSGI for C++ - 通往架构师之路

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011012932/article/details/79960050 课程介绍 OSGI 技术是面向 Java 的动态模型系统。Java 圈子里有非常著名...

一去丶二三里
2018/04/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

小知识:讲述Linux命令别名与资源文件的区别

别名 别名是命令的快捷方式。为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用。语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令。重要的是,你将它...

老孟的Linux私房菜
45分钟前
3
0
《JAVA核心知识》学习笔记(6. Spring 原理)-5

它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。 6.1.1. Spring 特点 6.1.1.1. 轻量级 6.1.1.2. 控制反转 6.1.1....

Shingfi
46分钟前
5
0
Excel导入数据库数据+Excel导入网页数据【实时追踪】

1.Excel导入数据库数据:数据选项卡------>导入数据 2.Excel导入网页数据【实时追踪】:

东方墨天
54分钟前
5
1
正则表达式如何匹配一个单词存在一次或零次并且不占捕获组位置

正则表达式如何匹配一个单词存在一次或零次并且不占捕获组位置 今天要用正则表达式实现匹配一个词出现一次或者不出现的情况,但是又不仅仅是这么简单的需求。先详细说下我这种情况吧,也许有...

Airship
今天
6
0
第八讲:asp.net C# web 读取文件

本讲主要讲解如何在asp.net页面上传文件。 首先,前台页面: 其次,后台页面: 结果: 1、前台效果: 2、后台结果:

刘日辉
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部