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
后续会在公众号发布数据结构和算法的面试题,请读者持续关注(小小李童鞋)
java ----数据结构和算法相关推荐
- Java 数据结构与算法系列之冒泡排序
一.前言 相信大部分同学都已经学过数据结构与算法这门课了,并且我们可能都会发现一个现象就是我们所学过的数据结构与算法类的书籍基本都是使用 C 语言来写的,好像没见过使用 Java 写的数据结构与算法. ...
- Java数据结构与算法——树(基本概念,很重要)
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 有网友私信我,期待我的下一篇数据结构.非常荣幸文章被认可,也非常感谢你们的监督. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督 ...
- Java数据结构与算法——插入排序
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本篇文章介绍排序算法中插入排序算法,包括插入排序的思路,适用场景,性能分析,ja ...
- Java数据结构和算法(六)——前缀、中缀、后缀表达式
前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...
- Java数据结构和算法(一)——简介
本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子. 编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱.一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数 ...
- JAVA数据结构与算法【简单介绍】
前几天去面一个大厂,面试官特别好,面试官说到,我们的学习不能本末倒置,数据结构和算法是程序的基础,如果数据结构你没有学好,你真正意义上不算会写代码.你的代码是各处粘贴,杂乱无章的. 由于现在大多用JA ...
- java算法概述,Java数据结构与算法基础(一)概述与线性结构
Java数据结构与算法基础(二)递归算法 Java数据结构与算法基础(一)概述与线性结构 学习目的:为了能更顺畅的读很多底层API代码和拓宽解决问题的思路 一.数据结构概述 1.数据结构是什么?数据与 ...
- 【笔记】Java数据结构与算法
[笔记]Java数据结构与算法 文章目录 [笔记]Java数据结构与算法 1.八大排序应用场景 2.未完待续-- 1.八大排序应用场景 冒泡排序:优化后的冒泡排序可用于当数据已经基本有序,且数据量较小 ...
- 二叉树 BinaryTree (先序、中序、后序遍历 节点查找、插入、删除 完整类) Java数据结构与算法
二叉树 BinaryTree (先序.中序.后序遍历 节点查找.插入.删除 完整类) Java数据结构与算法 源代码: view plain /** * * @author sunnyykn */ i ...
- Java数据结构和算法(四)--链表
日常开发中,数组和集合使用的很多,而数组的无序插入和删除效率都是偏低的,这点在学习ArrayList源码的时候就知道了,因为需要把要 插入索引后面的所以元素全部后移一位. 而本文会详细讲解链表,可以解 ...
最新文章
- DELPHI 中 Window 消息大全使用详解
- linux安装8168网卡,Fedora 配置 RTL8168/8111 网卡 Linux下 RTL8168/8111 网卡配置
- Ubuntu安装VMware Tools的方法
- dos窗口ping命令测试实战
- python 3.5 格式化字符串输出
- centos6.5卸载和安装mysql_Linux CentOS 6.5 卸载、tar安装MySQL的教程
- linux句柄过大导致无法登陆
- python作业atm_python完成ATM(分目录)
- 杭电1232(图—并查集)
- ASP/COM+组件开发辅助软件之补充
- java基础 内部类详解
- Microsoft Productivity Hub 2010 安装部署配置(三)
- 214. Shortest Palindrome
- 网络工程项目标书模板
- QQ揭秘:如何实现托盘闪动消息提醒?【低调赠送:QQ高仿版GG 4.1 最新源码】...
- 【引文74 引文114】基于区块链的联邦学习的激励机制设计
- torch学习 (41):torch中的tensor初始化操作
- linux安装project lemon测评机
- [目标检测]论文翻译代码理解-SCRDet: Towards More Robust Detection for Small, Cluttered and Rotated Objects
- pixhawk RC信号传输流程 代码版本pixhawk1.5.5