Java数据结构与算法概述

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

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

也就是说它会从时间复杂度和空间复杂度两方面进行分析,时间复杂度关注的是效率,空间复杂度关注的是资源利用率。在特定的场景下用特定的数据结构和算法进行优质的开发,这样可以从时间上和资源占用量上都达到一个非常好的效果。“有益于大型程序的开发”,这句话什么意思呢?以为我们在进行比较复杂的程序中,我们会涉及到一个大的数据量比较复杂的处理逻辑,几个例子:现在有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]的速度把它取出来,以最快的速度把它取出来。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值