随笔分类 - 数据结构与算法之路
底层基础决定上层建筑
学好数据结构与算法 才能成为一个合格的程序员
加油!!!
摘要:1.最短路径 1.1简介 负权边:边的权值是负数负权环:环里面的权值加起来总和为负数 1.2最短路径--无权图 1.3最短路径--负权边 1.4最短路径--负权环 1.5最短路径 2.单源最短路径算法 2.1DIjkstra(迪杰斯特拉算法) 2.2等价思考 2.3执行过程 2.4Bellman-F
阅读全文
摘要:1.AVO网 1.1基本概念 1.2拓扑排序 1.3拓扑排序思路 1.4拓扑排序思路 卡恩算法因为删掉原数据 所以需要对卡恩算法进行一定的优化 1.5作业 2.生成树 2.1基本概念 2.2最小生成树 2.3切分定理 2.4Prim算法--执行过程 2.5prim算法实现 private Set<E
阅读全文
摘要:1.图顶点和边删除 1.1删除边 @Override public void removeEdge(V from, V to) { Vertex<V, E> fromVertex = vertices.get(from); if (fromVertex == null) return; Vertex
阅读全文
摘要:1.图(Graph) 1.1数据结构回顾 1.2图基本概念 1.3应用举例 1.4有向图(Directed Graph) 1.5出度入度 1.6无向图(Undirected Graph) 1.7混合图(Mixed Graph) 1.8简单图、多重图 1.9无向完全图(Undirected Compl
阅读全文
摘要:1.并查集 1.1需求分析 1.2并查集(Union Find) 1.3如何存储数据 1.4接口定义 1.5初始化 2.实现方式 2.1Quick Find--Union 2.2Quick Find--Find 2.3Quick Union --Union 2.4quick union--Find
阅读全文
摘要:1.计数排序(Counting Sort) 1.1简介 1.2计数排序--最简单实现 protected void sort0() { // 找出最大值 int max = array[0]; for (int i = 1; i < array.length; i++) { if (array[i]
阅读全文
摘要:1.快速排序(Quick Sort) 1.1简介 1.2执行流程 1.3快速排序--轴点的构造 1.4快速排序--时间复杂度 1.5快速排序--实现 @Override protected void sort() { sort(0, array.length); } /** * 对 [begin,
阅读全文
摘要:1.归并排序(Merge Sort) 1.1简介 1.2归并排序--divide实现 1.3归并排序--merge 1.4 归并排序--merge细节 1.5归并排序--merge 1.6归并排序--merge--左边先结束 1.7归并排序右边先结束 1.8归并排序--merge实现 1.9归并排序
阅读全文
摘要:1.插入排序(Insertion Sort) 1.基本介绍 1.2baseline算法实现 @Override protected void sort() { for (int begin = 1; begin < array.length; begin++) { int cur = begin;
阅读全文
摘要:1.排序基本知识 1.1初始排序 1.2十大排序算法 2.冒泡排序(Bubble Sort) 2.1Baseline static void bubbleSort1(Integer[] array) { for (int end = array.length - 1; end > 0; end--)
阅读全文
摘要:1.队列 1.1队列简介 1.2队列的接口设计 import com.mj.list.LinkedList; import com.mj.list.List; public class Queue<E> { private List<E> list = new LinkedList<>(); pub
阅读全文
摘要:1.栈 2.栈的接口设计 java官方的stack实现是继承自 vector(类似数组) vector 是线程安全的 ArrayList是非线程安全的 3.栈的应用--浏览器的前进和后退 只要输入新的网址 右边的那个栈数据都会被清空 4.代码 java版本实现 public class Stack<
阅读全文
摘要:1.红黑树 1.1简介 1.2请问下面这棵树是红黑树吗? 1.3红黑树等价交换 1.4红黑树 vs 2-3-4树 1.5几个英文单词 1.6一些辅助函数 2.常用方法 2.1添加 2.2添加所有情况 2.3添加--修复性质4--LL\RR 2.4添加--修复性质4--LR\RL 2.5添加--修复性
阅读全文
摘要:1.B树 1.1B树基本概念 1.2m阶B树的性质(m>=2) 3阶B树 4阶B树 表示一个节点最多拥有3,4个子节点 1.3B树VS二叉搜索树 两代 三代合并指的是从根节点开始算 一个节点能存储多个值的叫做超级节点 2.B树常用方法 2.1搜索 2.2添加 B树变高 就是上溢操作一直传播到根节点
阅读全文
摘要:1哈希 1.1HashMap基本概念 1.2需求 1.3哈希表 1.4哈希冲突 1.5JDK解决哈希冲突方法 jdk8解决hash冲突的办法是通过 默认使用单向链表将元素串起来的 而且是从头到尾挨个比较key值然后在插入的 2.哈希函数 2.1基本概念 取模的计算 使值小于除数值 取模的计算 使值小
阅读全文
摘要:1.映射 1.1基本概念 1.2接口设计 1.3Map与Set区别 2.相关代码 Map public interface Map<K, V> { int size(); boolean isEmpty(); void clear(); V put(K key, V value); V get(K
阅读全文
摘要:1.集合 1.1基本概念 1.2相关知识 1.2.1集合与链表数组等数据结构区别 之前学习的链表和动态数组是不需要遍历这个接口的 因为他们有索引这一概念所以不需要 而集合这一数据结构 需要使用遍历这一接口的 1.2.2两种实现方式 集合有两种实现方式 第一种通过链表 另外一种通过红黑树实现 1.2.
阅读全文
摘要:1.AVL树基本介绍 1.1名字由来 1.2AVL树属性 1.3平衡对比 1.4简单的继承结构 1.5添加导致的失衡 2.AVL树的四种旋转 通过旋转来解决添加或删除导致AVL树失衡 2.1LL-右旋转(单旋) 2.2RR-左旋转(单旋) 2.3RL-LL右旋转,RR左旋转(双旋) 2.4LR-RR
阅读全文
摘要:1.重构二叉树 1.1前序遍历+中序遍历重构二叉树 1.2前驱节点 1.3后继节点 1.4根据元素获取节点 2.删除节点 2.1删除叶子节点 2.2删除度为1的节点 2.3删除度为3的节点 2.4相关代码 public void remove(E element) { remove(node(ele
阅读全文
摘要:1.二叉树的遍历 1.1前序遍历 递归遍历 前序非递归遍历 代码-递归版本 /** * 前序遍历 */ public void preorderTraversal() { preorderTraversal(root); } private void preorderTraversal(Node<E
阅读全文