汇智动力学院——Java 浅谈数据结构和算法
以前不管自己还是朋友在面试java工程师岗位的时候,都会被问到这样的问题:
“介绍下java中的数据结构和算法”,
很多朋友被问到的时候发现无从下口,甚至特别是一些初级java工程师更是一脸懵逼!那么本篇文章就针对数据结构和算法给大家简单介绍下。
首先要知道我们为什么要学习数据结构和算法?
这里举个简单的例子。编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱。一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数据结构和算法的人也能编程。但是如果一个开车的人懂变速箱的原理,比如降低速度来获得更大的牵引力,或者通过降低牵引力来获得更快的行驶速度。
那么爬坡时使用1档,便可以获得更大的牵引力;下坡时便使用低档限制车的行驶速度。回到编程而言,比如将一个班级的学生名字要临时存储在内存中,你会选择什么数据结构来存储,数组还是ArrayList,或者HashSet,或者别的数据结构。如果不懂数据结构的,可能随便选择一个容器来存储,也能完成所有的功能,但是后期如果随着学生数据量的增多,随便选择的数据结构肯定会存在性能问题,而一个懂数据结构和算法的人,在实际编程中会选择适当的数据结构来解决相应的问题,会极大的提高程序的性能。
1、数据结构
数据结构是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。
通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
一、数据结构的基本功能
①、如何插入一条新的数据项
②、如何寻找某一特定的数据项
③、如何删除某一特定的数据项
④、如何迭代的访问各个数据项,以便进行显示或其他操作
二、常用的数据结构
这几种结构优缺点如下:先有个大概印象,后面会详细讲解!!!
常用的数据结构优缺点
2、算法
算法简单来说就是解决问题的方案步骤。
在Java中,算法通常都是由类的方法来实现的。前面的数据结构,比如链表为啥插入、删除快,而查找慢,平衡的二叉树插入、删除、查找都快,这都是实现这些数据结构的算法所造成的。后面我们讲的各种排序实现也是算法范畴的重要领域。
一、算法的五个特征
①、有穷性(Finiteness)
算法的有穷性是指算法必须能在执行有限个步骤之后终止;
②、确切性(Definiteness)
算法的每一步骤必须有确切的定义;
③、输入项(Input)
一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;
④、输出项(Output)
一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
⑤、可行性(Effectiveness)
算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)。
二、算法的设计原则
①、正确性:首先,算法应当满足以特定的“规则说明”方式给出的需求。其次,对算法是否“正确”的理解可以有以下四个层次:
一、程序语法错误。
二、程序对于几组输入数据能够得出满足需要的结果。
三、程序对于精心选择的、典型、苛刻切带有刁难性的几组输入数据能够得出满足要求的结果。
四、程序对于一切合法的输入数据都能得到满足要求的结果。
PS:通常以第 三 层意义的正确性作为衡量一个算法是否合格的标准。
②、可读性:算法为了人的阅读与交流,其次才是计算机执行。因此算法应该易于人的理解;另一方面,晦涩难懂的程序易于隐藏较多的错误而难以调试。
③、健壮性:当输入的数据非法时,算法应当恰当的做出反应或进行相应处理,而不是产生莫名其妙的输出结果。并且,处理出错的方法不应是中断程序执行,而是应当返回一个表示错误或错误性质的值,以便在更高的抽象层次上进行处理。
④、高效率与低存储量需求:通常算法效率值得是算法执行时间;存储量是指算法执行过程中所需要的最大存储空间,两者都与问题的规模有关。
前面三点 正确性,可读性和健壮性相信都好理解。对于第四点算法的执行效率和存储量,我们知道比较算法的时候,可能会说“A算法比B算法快两倍”之类的话,但实际上这种说法没有任何意义。因为当数据项个数发生变化时,A算法和B算法的效率比例也会发生变化,比如数据项增加了50%,可能A算法比B算法快三倍,但是如果数据项减少了50%,可能A算法和B算法速度一样。所以描述算法的速度必须要和数据项的个数联系起来。也就是“大O”表示法,它是一种算法复杂度的相对表示方式,这里我简单介绍一下,后面会根据具体的算法来描述。
相对(relative):你只能比较相同的事物。你不能把一个做算数乘法的算法和排序整数列表的算法进行比较。但是,比较2个算法所做的算术操作(一个做乘法,一个做加法)将会告诉你一些有意义的东西;
表示(representation):大O(用它最简单的形式)把算法间的比较简化为了一个单一变量。这个变量的选择基于观察或假设。例如,排序算法之间的对比通常是基于比较操作(比较2个结点来决定这2个结点的相对顺序)。这里面就假设了比较操作的计算开销很大。但是,如果比较操作的计算开销不大,而交换操作的计算开销很大,又会怎么样呢?这就改变了先前的比较方式;
复杂度(complexity):如果排序10,000个元素花费了我1秒,那么排序1百万个元素会花多少时间?在这个例子里,复杂度就是相对其他东西的度量结果。
然后我们再说说算法的存储量,包括:
程序本身所占空间;
输入数据所占空间;
辅助变量所占空间;
一个算法的效率越高越好,而存储量是越低越好。
三、算法的分类
算法可以宏泛的分为三类:
一,有限的,确定性算法 这类算法在有限的一段时间内终止。他们可能要花很长时间来执行指定的任务,但仍将在一定的时间内终止。这类算法得出的结果常取决于输入值。
二,有限的,非确定算法 这类算法在有限的时间内终止。然而,对于一个(或一些)给定的数值,算法的结果并不是唯一的或确定的。
三,无限的算法 是那些由于没有定义终止定义条件,或定义的条件无法由输入的数据满足而不终止运行的算法。通常,无限算法的产生是由于未能确定的定义终止条件。
Java中常见的算法有:
①、排序
排序就是对一组数据按照一定的顺序(从大到小或者从小到大)进行排序;
常见排序如下:
简单排序:冒泡排序、选择排序、插入排序;
高级排序:快速排序、希尔排序、归并排序、基数排序、鸡尾酒排序等等;
②、递归
递归是一种直接或者间接调用自身的一种算法,递归的目的是简化程序设计使程序更加易读;
③、查找
在一些(有序的/无序的)数据元素中,通过一定的方法找出与给定关键字相同的数据元素就叫做查找;
④、统计
指对有关数据的搜集、整理、计算、分析、解释、表述等的活动。
3、总结
本章主要简单介绍了下数据结构和算法的概念,后面会继续带大家讲解下它们的一些实现过程,敬请期待吧骚年!
本文作者汇智动力学院资深开发讲师李章丰。
汇智动力学院——Java 浅谈数据结构和算法相关推荐
- java 算法_Java 浅谈数据结构和算法
以前不管自己还是朋友在面试java工程师岗位的时候,都会被问到这样的问题: "介绍下java中的数据结构和算法". 很多朋友被问到的时候发现无从下口,甚至特别是一些初级java工程 ...
- 2019汇智动力学院课程、服务体系震撼升级
汇智动力课程体系又又又又升级了!是的,我们遵守约定,为了保障学员接受的知识时刻和市场需求进行完美结合.匹配,汇智动力保证课程体系和服务体系每年至少进行一次重大升级! 众所周知,IT行业发展日新月异,技 ...
- 浅谈数据结构与算法分析学习及如何进行算法分析
一.前言 都说数据结构与算法分析是程序员的内功,想要理解计算机世界就不能不懂点数据结构与算法,然而这也备受争议,因为大多数的业务需求都用不上数据结构与算法,又或者说已经有封装好的库可以直接调用,例如J ...
- 95后离职汇智动力,现在月薪9k,哭着说出经历!
故事总是听不完的 但是给别人讲自己的故事 还是别有一番滋味的 话不多说先上酒 我叫张* 正值青春的24岁 目前薪资9k 是一位非常耿直的新疆boy 和很多年轻人一样 待在新疆的22年 使我更加向往外面 ...
- 最高薪14.5k!这个“寒冬”汇智动力火力全开!
随着2023年全国硕士研究生招生考试初试日期的临近,网络上与考研相关的话题也逐渐火热了起来.根据中国教育在线发布的2022年研招报告显示,2022年考研人数为457万,比去年增加了80万人.在此趋势下 ...
- java面试题成都_成都汇智动力-java面试——多线程面试题
原标题:成都汇智动力-java面试--多线程面试题 1.多线程有什么用?发挥多核CPU的优势 防止阻塞 便于建模 2.创建线程的方式继承Thread类 实现Runnable接口 至于哪个好,不用说肯定 ...
- java并发惊群_成都汇智动力-Java并发:其他(总结性的东西)
原标题:成都汇智动力-Java并发:其他(总结性的东西) Java并发:其他(总结性的东西). 并发中的主要问题 并发基础主要解决的是可见性,有序性和原子性的问题,让不可控的进程/线程变得可以预测,可 ...
- python web和java web区别_成都汇智动力-谈谈个人认为的JavaWeb开发与PythonWeb开发的区别...
原标题:成都汇智动力-谈谈个人认为的JavaWeb开发与PythonWeb开发的区别 今天这篇文章谈一谈Java Web开发和Python Web开发的区别.在这里我并不是鼓励大家从Java Web转 ...
- java singleton 数据清楚_成都汇智动力-java singleton
原标题:成都汇智动力-java singleton 1.什么是单例模式?单例模式的应用场景? 名称:单例模式 英文名:Singleton 定义:java中单例模式是一种常见的设计模式,单例就是&quo ...
最新文章
- Shovels Shop
- 皇室战争:第27赛季调整出炉,共涉及16张卡牌,暗巫要凉?
- (21)css3盒模型box-sizing属性
- 改变你一生命运的话语 不得不信
- 股票涨停之后该不该卖?
- unity3D【全版本】设置中文
- 阿里矢量图标库 - 如何修改和使用自定义字体名称
- Excel汇总的撤销整个工作表保护的2种操作方法!
- 硬件设计--阻抗匹配
- ubuntu16.04上阅读CAJ格式的文件
- 核爆rpg学院站计算机,给新人的一点收集建议
- uni-app nvue/vue 引入第三方字体教程,在线ttf转base64和在线识别字体网站分享
- arcgis_随机数vb脚本
- Cadence导入IBIS模型用于仿真
- OneDrive-5T免费云空间获取方法
- Kafka分区副本分配规则
- 开发购物商城app需要多少钱
- LAMMPS—fix命令超详细解析
- 【酒店管理系统】(一)需求分析
- WebSocket爬虫