java ----数据结构和算法

算法:

之前博主里转载了一篇非常详细的java十大排序的算法,里面包含了动图,代码和复杂度分析。
https://blog.csdn.net/delete_bug/article/details/106156040
冒泡
选择
插入
希尔
归并
快速
堆排序
计数排序
桶排序
基数排序

接下来是介绍几种高级算法

1 剪枝算法

在搜索算法中优化中,剪枝,就是通过某种判断,避免一些不必要的遍历过程,形象的说,就是剪去了搜索树中的某些“枝条”,故称剪枝。应用剪枝优化的核心问题是设计剪枝判断方法,即确定哪些枝条应当舍弃,哪些枝条应当保留的方法。
总之,剪枝策略,属于算法优化范畴;通常应用在DFS 和 BFS 搜索算法中;剪枝策略就是寻找过滤条件,提前减少不必要的搜索路径。

1.1剪枝的原则

1) 正确性
正如上文所述,枝条不是爱剪就能剪的. 如果随便剪枝,把带有最优解的那一分支也剪掉了的话,剪枝也就失去了意义. 所以,剪枝的前提是一定要保证不丢失正确的结果
2)准确性
在保证了正确性的基础上,我们应该根据具体问题具体分析,采用合适的判断手段,使不包含最优解的枝条尽可能多的被剪去,以达到程序“最优化”的目的. 可以说,剪枝的准确性,是衡量一个优化算法好坏的标准.
3)高效性
设计优化程序的根本目的,是要减少搜索的次数,使程序运行的时间减少. 但为了使搜索次数尽可能的减少,我们又必须花工夫设计出一个准确性较高的优化算法,而当算法的准确性升高,其判断的次数必定增多,从而又导致耗时的增多,这便引出了矛盾. 因此,如何在优化与效率之间寻找一个平衡点,使得程序的时间复杂度尽可能降低,同样是非常重要的. 倘若一个剪枝的判断效果非常好,但是它却需要耗费大量的时间来判断、比较,结果整个程序运行起来也跟没有优化过的没什么区别,这样就太得不偿失了.

对剪枝算法讲的非常透彻的一个视频,因为有些博客描述的不是很好,博主没有找到好一点的博客,所以推荐这个视频:
https://www.bilibili.com/video/BV1Bf4y11758?from=search&seid=14771482401397576676

2 回溯算法

回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。

其实回溯法在很多应用场景出现过,递归,图的遍历,动态规划等。
https://blog.csdn.net/weixin_43208423/article/details/101081544?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162829566416780271540917%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162829566416780271540917&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~hot_rank-5-101081544.first_rank_v2_pc_rank_v29&utm_term=%E5%9B%9E%E6%BA%AF%E7%AE%97%E6%B3%95&spm=1018.2226.3001.4187

3最短路径算法

从某顶点出发,沿图的边到达另一顶点所经过的路径中,各边上权值之和最小的一条路径叫做最短路径。解决最短路的问题有以下算法,Dijkstra 算法,Bellman-Ford 算法,Floyd 算法和 SPFA算法等。
这是单源路劲算法:它求出的是一条路径
Dijkstra 算法
单是有时候需要求图中任意两节点之间的距离 ------->Floyd(费罗伊德)算法
文章的话再上边那篇里有,第一次学还是先看一下视频,比较好理解,这个算法比较难一点,我也就看了一百遍
https://www.bilibili.com/video/BV1LE411R7CS?from=search&seid=14785761868390793110
最主要的思想就是找中间点,最后更新好两个矩阵以后也是以中间点的思想取遍历图的,如果还是不懂可以私信作者,我们一起交流

SPFA算法:这个算法写的还是比价简单的,容易理解
https://blog.csdn.net/qq_35644234/article/details/61614581

64最小生成树算法–(Kruskal 和prim)

https://www.bilibili.com/video/BV1Eb41177d1?from=search&seid=2252166645685418420

在这里插入图片描述
在组织图的过程中避免掉环
在这里插入图片描述
每次更新表,扫描表,比较替换。

数据结构

散列表(哈希表)

线性探测表和拉链法

红黑树

https://www.cnblogs.com/skywang12345/p/3245399.html
为什么不使用AVL树而使用红黑树?
红黑树和AVL树都是最常用的平衡二叉搜索树,它们的查找、删除、修改都是O(lgn) time
AVL树和红黑树有几点比较和区别:
(1)AVL树是更加严格的平衡,因此可以提供更快的查找速度,一般读取查找密集型任务,适用AVL树。
(2)红黑树更适合于插入修改密集型任务。
(3)通常,AVL树的旋转比红黑树的旋转更加难以平衡和调试。

B树

https://blog.csdn.net/c395565746c/article/details/6545106

https://blog.csdn.net/qq_30815237/article/details/99708124?ops_request_misc=&request_id=&biz_id=102&utm_term=%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%20%E5%9B%BE&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-5-.first_rank_v2_pc_rank_v29&spm=1018.2226.3001.4187

哈夫曼编码

https://blog.csdn.net/bjweimengshu/article/details/105630052?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162832539216780255213198%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162832539216780255213198&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-105630052.first_rank_v2_pc_rank_v29&utm_term=%E5%93%88%E5%A4%AB%E6%9B%BC%E7%BC%96%E7%A0%81&spm=1018.2226.3001.4187
后续会在公众号发布数据结构和算法的面试题,请读者持续关注(小小李童鞋)
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌晨里的无聊人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值