文章目录

  • 为什么要学习数据结构与算法
  • Java 数据结构是什么?
  • 大O表示法表示算法性能

为什么要学习数据结构与算法

使用合适的数据结构和算法进行优化程序,可以使得你的程序运行的更快,
并且占用更少的资源,有益于开发大型程序

也就是说它会从时间复杂度和空间复杂度两方面进行分析,时间复杂度关注的是效率,空间复杂度关注的是资源利用率。在特定的场景下用特定的数据结构和算法进行优质的开发,这样可以从时间上和资源占用量上都达到一个非常好的效果。“有益于大型程序的开发”,这句话什么意思呢?以为我们在进行比较复杂的程序中,我们会涉及到一个大的数据量比较复杂的处理逻辑,几个例子:现在有1万条数据,每处理一条数据需要经过10个链式函数(a掉b,b调c,c又可能调d)的调用,A同学开发出来一个程序,它每处理一条数据用时1毫秒,这是相当快了,在这种大频度的调用下,只需要1毫秒,B同学开发了一套程序,需要两毫秒去处理一条数据,那么对比A和B两个同学所研发的这套程序呢,其实没有什么太大的区别,1毫秒和2毫秒对我们来说都是眨眼之间转瞬即逝的,但是我们来计算下数据量,我有1万条数据,每处理一条B就比A慢了1毫秒,那么1千条,那么B就比A慢1秒中,1万条就慢10秒钟,1秒钟对我们程序员来讲都是相当少,但是我们可以看到每一条数据少1毫秒就会出现1万条数据慢10秒的差距,对于一个用户来讲5秒以内是我们用户等待的一个极限,超过5秒之后会给用户一个好慢的印象,所以说可以有益于开发大型程序,它可以优化我们。每一个节点进行优化,每一个节点少一点点时间,在大数据的情况下,它就会少很多时间。

高级工程师和普通工程师区别就在于高级工程师他所开发的代码,质量和效率都是要优于普通工程师的。普通工程师每天都用foreach for循环,高级工程师他会在合适的地方选择合适的数据结构,而不是盲目的去选择一个hashMap或者一个ArrayList。

Java 数据结构是什么?

 数据结构是对在计算机内存中的数据的一种安排。包括数组,链表,栈内存,二叉树,红黑树,哈希表等

了解数据结构和算法,可以秒杀水代码,冲击高薪职位。

(初级)数据结构 优点 缺点
数组 插入快,如果知道下标,可以快速的存取 查找慢,删除慢,大小固定
有序数组 比无序的数组查找快 删除和插入慢,大小固定
提供后进先出方式的存取 存取其它项很慢
链表 插入快,删除快 查找慢
二叉树 查找,插入,删除快(前提是树保持平衡) 删除算法复杂
(高级)数据结构 优点 缺点
红-黑树 查找,插入,删除快(树总是平衡的) 算法复杂
2-3-4树 查找,插入,删除快(树总是平衡的) 算法复杂
哈希表 如果关键字已知则存取极快。插入快 删除慢,如果不知道关键字则存取很慢,对存储空间使用不充分
插入删除快,对大数据项的存取很快 对其它数据项存取慢
对现实世界模拟 有些算法慢且复杂

大O表示法表示算法性能

概念:
大O表示法的实质并不是对运行时间给出实际的值,而是为了表达运行时间是如何受数据项个数所影响的。
O的含义:
大写字符O,可以认为其含义是“order of ”(大约是)。
那为什么没有精确的值呢?我们看下面这张图

  1. 我们倒着看,先看O[n!] (n的阶乘,123…n),这是最慢最慢的一个时间复杂度,看横轴elements(数据量)随着增加,它的运行时间几乎成直线向上攀升,也就是说会数据量增加会越来越慢,处理一个数据要1秒,处理5个数据就要1234*5=120秒,这种算法对我们来说极为不可取。
  2. 再看倒数第二的O[2^n] (2的n次方),其实比n的阶乘好不了多少,比如说处理一条数据用2秒,处理5条数据就是2^5 =32秒,这时间上升速度也是相当快的。
  3. 我们看看O[n^2] (n的平方),就是图中第三条数据,它就相对平缓的增长,也就是说处理一条数据需要1秒的话,处理10条数据我需要100秒,这就是它的大概的计算方式,当然是order of 大约的
  4. 我们看看O[nlogn],第四条线,它的增长相对更加平稳一些,如果我们处理一条数据的话,是n的log1,如果处理100条数据是100log100,这样的话在数学的函数表示上,它的增长会稍慢些,也就说是我们大O表示法其实是随着这个个数所影响的这个时间。
  5. 我们来看下更好些的O(n),也就是说100条数据用100秒,1000条数据用1000秒,10000条数据用10000秒,这个是比N倍的logn更好一级别的,是成横轴纵轴是1对1的比例上升
  6. O[logn]它比nlogn少一个n,这更好一些,更加平缓。
  7. O[1],我们说大O表示法是时间被数据项个数所影响的,那么O[1]是什么意思?也就是说不管是1千条,1万条,甚至是1亿条都不会影响我们的处理效率,它的时间复杂度一直是维持在1这一块,也就是非常的快,你有多少条数据,我都没有问题,都不会影响我的处理速度。目前来说,O[1]是最快的时间复杂度算法。栈和队列都可以达到O[1],不管有多少数据,只要它存的下,我就可以用O[1]的速度把它取出来,以最快的速度把它取出来。

Java数据结构与算法概述相关推荐

  1. java算法概述,Java数据结构与算法基础(一)概述与线性结构

    Java数据结构与算法基础(二)递归算法 Java数据结构与算法基础(一)概述与线性结构 学习目的:为了能更顺畅的读很多底层API代码和拓宽解决问题的思路 一.数据结构概述 1.数据结构是什么?数据与 ...

  2. java数据结构与算法之顺序表与链表深入分析

    转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结 ...

  3. Java数据结构和算法(第二版)

    Java数据结构和算法(第二版) 下载地址 https://pan.baidu.com/s/112D5houIgu0eMs_i5o0Ujw 扫码下面二维码关注公众号回复 100066获取分享码 本书目 ...

  4. 数据结构和算法概述及算法分析

    一.数据结构和算法概述 B站学习视频 1.1首先我们为什么要学习数据结构? 数据结构和算法这门课程无论在哪个学校的计算机专业,都是一门必修课,因为这门课程非常重要的,是编程必备的基础,但是这门课程是一 ...

  5. Java 数据结构与算法系列之冒泡排序

    一.前言 相信大部分同学都已经学过数据结构与算法这门课了,并且我们可能都会发现一个现象就是我们所学过的数据结构与算法类的书籍基本都是使用 C 语言来写的,好像没见过使用 Java 写的数据结构与算法. ...

  6. Java数据结构与算法——树(基本概念,很重要)

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 有网友私信我,期待我的下一篇数据结构.非常荣幸文章被认可,也非常感谢你们的监督. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督 ...

  7. Java数据结构与算法——插入排序

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本篇文章介绍排序算法中插入排序算法,包括插入排序的思路,适用场景,性能分析,ja ...

  8. Java数据结构和算法(六)——前缀、中缀、后缀表达式

    前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...

  9. Java数据结构和算法(一)——简介

    本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子. 编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱.一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数 ...

  10. JAVA数据结构与算法【简单介绍】

    前几天去面一个大厂,面试官特别好,面试官说到,我们的学习不能本末倒置,数据结构和算法是程序的基础,如果数据结构你没有学好,你真正意义上不算会写代码.你的代码是各处粘贴,杂乱无章的. 由于现在大多用JA ...

最新文章

  1. oracle学习-存储过程返回一个值,和返回一个结果集
  2. wxpython 日志显示框_wxpython与logging模块结合显示实时日志
  3. 微软的Surface平板电脑RT版,RT是什么缩写?|转|
  4. Z-Stack Home Developer's Guide—2. Overview中文翻译【Z-Stack Home 1.2.0开发文档】
  5. 流行的某导航网站系统源码 收录系统源码
  6. mysql5.7.18压缩包下载_MySQL 5.7.18 解压版安装
  7. 点线面的意义_如何运用设计中的点线面?
  8. 计算机怎么算对数的反函数,Excel 计算对数分布函数反函数:LOGINV函数
  9. 自学mysql还是sql好_如何自学SQL?
  10. t-SNE原理及代码
  11. 论文阅读笔记(IRCNN):Learning Deep CNN Denoiser Prior for Image Restoration
  12. 微型计算机与巨型计算机相比,微型计算机的特点及应用
  13. 东大成贤c语言试卷,香气四溢的东大成贤
  14. 李云龙二次元风格化!
  15. 怎么把视频转成文字?分享视频转换成文字的3款应用
  16. html中图像标记的属性,HTML中的图象标签属性
  17. wolfpack是什么_Steam
  18. 算法---逆向旋转矩阵法求解矩阵绕圈走
  19. 信而泰OLT使用介绍-网络测试仪实操
  20. localhost解释

热门文章

  1. 【Spring-AOP】自动代理类AnnotationAwareAspectJAutoProxyCreator
  2. HTML iframe标签下 子页面调用父页面js 容易产生的跨域调用问题 Uncaught DOMException
  3. Java面试题视频讲解汇总,持续更新中...
  4. Spring Cloud Alibaba Sentinel之入门篇
  5. 设计模式 ( 十九) 中介者模式
  6. dubbo服务调用为何先进入到mockClusterInvoker执行
  7. DelayedWorkQueue踩坑笔记
  8. springmvc应用-自定义参数解析器
  9. 结对-结对编项目作业名称-测试过程
  10. C语言 · 字符删除