![](https://img-blog.csdnimg.cn/20191113215458301.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法学习笔记
文章平均质量分 76
无忧河边孤独的浪荡汉子
时不我待 只争朝夕
展开
-
算术表达式的计算:中序表达式转后序表达式
算术表达式的计算:中序表达式转后序表达式中序表达式转后序表达式的目的中序表达式转后序表达式后序表达式的计算中序表达式转后序表达式的目的在我们的日常数学表达中使用的诸如2*(5-1) 这样的表达式是中序表达式,我们使用数学计算规则对表达式进行计算,但是计算机要计算算术表达式,如果直接使用计算规则(括号-乘除-加减)这样的顺序计算的话就要去使用if-else语句判断括号、加减乘除然后计算,如果一个...原创 2019-01-20 12:39:25 · 5397 阅读 · 1 评论 -
算法笔记10:二叉查找树
二叉查找树这里基于二叉查找树建立BST类,类使用二叉树的顺序存储键值key和键值对应的数据value。键值作为结点排序的依据,查找时依据结点的键值查找。/** * 基于二叉查找树的符号表 * @author XY * * @param <Key> 存储的键值 * @param <Value> 存储的键值对应的数据 */public class BST<...原创 2019-04-14 19:00:19 · 125 阅读 · 0 评论 -
算法笔记11:平衡查找树——红黑树
平衡查找树——红黑树二叉查找树的缺点和2-3树的引入从2-3树到红黑树红黑树的实现在学习红黑树的内容时应该先学习算法笔记10中二叉查找树,两者属于递进关系。二叉查找树的缺点和2-3树的引入二叉查找树的插入和查找都需要比较,比较的次数和树的层数有关,结点的深度决定了查找的路径的长度,查找的路径的长度就是比较的次数,所以查找的次数和树的形状有关,在普通的二叉树中,二叉树的形状是插入的顺序决定的,...原创 2019-04-14 20:24:22 · 248 阅读 · 1 评论 -
算法笔记12:散列表
散列表散列表和散列函数hashcode()拉链法开发地址法散列表和散列函数hashcode()拉链法当hash冲突的时候对散列值相等的部分采用链表:首先根据散列值找到链表,然后在链表中顺序查找,拉链法的实现主要有两种:1 数组中存储链表的结点类型Node,根据散列值找到相应的Node,这个Node就是链表的首节点,然后根据键值key判断首节点键值是否就是目标值,如果是则返回首节点的valu...原创 2019-04-28 20:28:12 · 182 阅读 · 0 评论 -
顺序查找和二分查找表
顺序查找表和二分查找表顺序查找表二分查找表顺序查找表/** * 基于链表的顺序查询的符号表,支持put/get/delete操作 * * @author XY * @param <Key> * @param <Value> */public class LinkedListST<Key, Value> { class Node { pr...原创 2019-04-28 22:22:29 · 645 阅读 · 0 评论 -
算法笔记13:无向图
算法笔记13:图无向图的表示和实现符号图深度优先搜索可达性路径广度优先搜索最短路径环和二色图环二色图连通性图的性质:离心率、半径、直径本文讲解无向图,讲解有向图。无向图的表示和实现如下图Graph所示,有一些定点和边组成图,边连接的两个定点相邻,边是对称的,0-1表示可以从0到1,也可以从1到0。从图中可以看到,对于任意一个顶点,都可以有任意多的相邻顶点,我们使用List数组(因为相邻顶点的...原创 2019-05-19 17:12:23 · 853 阅读 · 0 评论 -
算法笔记14:有向图
算法笔记13:有向图有向图有向图和无向图的区别有向图的实现有向图的深度优先搜索和广度优先搜索深度优先搜索可达性路径广度优先搜索最短路径环和有向无环图有向环的检测顶点的深度优先次序拓扑排序强连通性Kosaraju算法实现强连通性有向图有向图和无向图的区别在无向图中,连接是没有方向的,连接v-w意味着可以从顶点v到顶点w,但是有向图的连接是有方向的,连接v→w意味着只能从v到达w,而不能从w到v...原创 2019-05-19 17:12:36 · 1158 阅读 · 0 评论 -
算法笔记15:最小生成树(Prim算法和Kruskal算法)
最小生成树最小生成树和其算法原理Prim算法延迟Prim算法即时Prim算法Kruskal算法最小生成树和其算法原理加权图是指一种每条边都有权重的图。图的生成树是它的一棵含有其所有顶点的无环连通子图。最小生成树是指所有边的权重最小的树。如下图所示,该图的最小生成树在图中蓝色标出,本文的目的就是设计算法得到加权图的最小生成树。切分定理:在一副加权图中,给定一种切分,它的横切边中的权重最小边必...原创 2019-05-26 11:30:40 · 801 阅读 · 0 评论 -
算法笔记16:单源最短路径(Dijkstra算法)
最短路径加权有向图的实现最短路径的普适算法Dijkstra算法无环加权有向图的最短路径算法Bellman-ford算法的实现数学建模大赛中很多问题都能归约到下面的问题:从一副航线图中找到从一个城市到另外一个城市中代价最少的路线,这个代价可能是距离最近、花费最少或者时间最短,表示这些问题的数据结构是加权有向图。如下图所示,蓝色是从0到6的最短路径,是加权图和有向图的结合。加权有向图的实现和加...原创 2019-06-05 21:10:22 · 472 阅读 · 0 评论 -
算法笔记17:基于队列改进的Bellman-ford算法
改进的Bellman-ford算法本文承接自算法笔记16:单源最短路径基于队列的Bellman-ford算法的改进:根据前面讲到,对于边e:v→w,只有distTo[v]改变,distTo[w]才会改变,那么我们不需要放松所有边重复V轮,我们只需要放松可能改变的点,例如在下图中,从起点0开始,只有顶点1 2 3才会改变,那么将1 2 3加入队列去放松,其他顶点的不会改变就不会放松。放松1时将4...原创 2019-06-05 21:11:08 · 355 阅读 · 0 评论 -
约瑟夫环
约瑟夫环/** * 约瑟夫环,使用数组实现 * @author XY */import java.util.Scanner;public class Joseph { public static void main(String[] args) {// Scanner scanner=new Scanner(System.in);// int cut=scanner.next...原创 2019-04-20 22:24:22 · 145 阅读 · 0 评论 -
Kendall tau距离——逆序对的数量
Kendall tau距离——逆序对的数量** * kendall tau distance,求逆序对的数量,求相对于一个 * 数组另一个数组的逆序对的数量, 在基因测序中有大量使用 * @author XY * */public class Kendalltao { public static int Kendalltaodist_merge(int[] a, int[] b...原创 2019-04-01 11:30:47 · 1376 阅读 · 0 评论 -
算法笔记9:堆排序
堆排序/** * 堆排序,堆排序不对第一位进行排序 * @author XY * */@SuppressWarnings("rawtypes")public class HeapSort { public static void sort(Comparable[] v){ int size=v.length-1; for (int i = size/2; i >= ...原创 2019-04-01 11:27:05 · 126 阅读 · 0 评论 -
节点和网络:动态连通性(union-find)问题
节点和网络:动态连通性(union-find)问题quick-find算法实现quick-union算法实现加权quick-union算法新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特...原创 2019-03-01 20:52:55 · 1087 阅读 · 0 评论 -
求两个大数的乘积
题目要求程序如下:import java.util.Scanner;/** * 求两个大数的成绩,不能使用系统自带大数功能,基本思路是用乘法的顺序取值进行乘法然后安排在 * 数组中,求得的结果应该注意大于9的要向前进位。 * @author XY * */public class Main { public static void main(String[] args) {...原创 2019-03-18 21:21:07 · 427 阅读 · 0 评论 -
算法笔记1:初级排序:选择排序
选择排序选择排序的实现代码选择排序的实现代码/** * 选择排序 * @author XY * */@SuppressWarnings("rawtypes")public class SelectSort { public static void sort(Comparable[] v) { int size = v.length; for (int i = 0;...原创 2019-04-01 09:27:08 · 117 阅读 · 0 评论 -
算法笔记2:初级排序:插入排序和希尔排序
插入排序和希尔排序插入排序希尔排序插入排序/** * 插入排序 * @author XY * */@SuppressWarnings("rawtypes")public class InsertSort { public static void sort(Comparable[] v) {//插入排序 int size = v.length; for (int i ...原创 2019-04-01 09:44:42 · 381 阅读 · 0 评论 -
算法笔记3:归并排序
归并排序自顶向下的归并排序(使用递归)自底向上的归并排序(使用循环)自顶向下的归并排序(使用递归)/** * 自顶向下的归并排序 * @author XY * */@SuppressWarnings("rawtypes")public class MergeSort { private static Comparable[] temp; public static void s...原创 2019-04-01 10:12:31 · 147 阅读 · 0 评论 -
算法笔记4:快速排序
快速排序标准快速排序三取样切分和小段插入排序的快速排序标准快速排序import edu.princeton.cs.algs4.StdRandom;/** * 标准快速排序 * @author XY * */@SuppressWarnings("rawtypes")public class QuickSort { public static void sort(Compara...原创 2019-04-01 10:29:02 · 394 阅读 · 0 评论 -
算法笔记5:三向切分的快速排序
三向切分的快速排序初始三向切分快速排序改进的三向切分快速排序初始三向切分快速排序在 标准快速排序 中,对于有大量重复元素的数组会多次使用重复元素进行切分和交换,针对有大量重复元素的数组,提出了三向切分,使用指针 lt 和 ht,v[lo+1,lt)小于v[lo],v(ht,hi]大于v[lo],v[lt,ht]等于v[lo],这样的话一次将所有等于v[lo]的元素全部排定。import ed...原创 2019-04-01 11:14:06 · 367 阅读 · 0 评论 -
算法笔记6:TopK问题——优先序列(基于数组、链表)
优先序列:基于数组基于有序数组的优先序列基于无序数组的优先序列基于有序链表的优先序列基于有序数组的优先序列/** * 基于有序数组的优先序列 * @author XY * */@SuppressWarnings("unchecked")public class PriorityB<Key extends Comparable<Key>> {private ...原创 2019-04-01 11:20:56 · 396 阅读 · 0 评论 -
算法笔记7:TopK问题——优先序列(基于二叉堆)
基于二叉堆的优先序列/** * 基于二叉堆的优先序列 * @author XY * */@SuppressWarnings("unchecked")public class Priorityheap<Key extends Comparable<Key>> { private final int len_default=8; private Key[] p...原创 2019-04-01 11:22:56 · 361 阅读 · 0 评论 -
算法笔记8:多向归并——索引优先序列
多向归并——索引优先序列/** * 索引优先序列,为二叉堆实现的优先序列加上索引,其典型应用是在k个有序数组的多项归并中,维护 * 长度为k的优先序列,每个数组的编号为优先序列的索引,每次取掉的最小值的索引就将编号为该序列的 * 数组的下一位读入,依次进行。之所以使用索引优先序列,是因为没有索引就无法确定下一次读入哪个数组 * @author XY * */@SuppressWar...原创 2019-04-01 11:25:05 · 307 阅读 · 0 评论 -
二分查找的变形
本文转载自链接:https://blog.csdn.net/zxzxzx0119/arti...转载 2019-09-07 22:00:57 · 100 阅读 · 0 评论