数据结构和算法
文章平均质量分 68
Curtain-Stu
路漫漫其修远兮,吾将上下而求索。
展开
-
24.常见递归,DFS,回溯题目总结
123原创 2020-05-12 13:35:49 · 451 阅读 · 0 评论 -
23.01背包之递归回溯&动态规划
public class HuiSuBag { // 回溯算法实现 private static int maxW = Integer.MIN_VALUE; // 结果放到 maxW 中 private int[] weight = {2, 2, 4, 6, 3}; // 物品重量 private int w = 9; // 背包承受的最大重量 publ...原创 2020-04-09 00:50:30 · 291 阅读 · 0 评论 -
0.算法与数据结构
原创 2019-12-28 15:38:34 · 105 阅读 · 0 评论 -
1.哈希表,Hash算法
Hash表(又叫散列表)支持我们输入一个key,可以在O(1)的时间复杂度内从Hash表中找到对应的值。运用的是数组支持按照下标随机访问的时候,时间复杂度是 O(1)的特性。我们通过散列函数把元素的key值映射为下标,然后将数据存储在数组中对应下标的位置。当我们按照键值查询元素时,我们用同样的散列函数,将键值转化数组下标,从对应的数组下标的位置取数据。一般一个散列函数满足于以下三点:...原创 2019-12-15 22:58:05 · 483 阅读 · 0 评论 -
2.二叉树-基本概念
高度:根节点的高度最高(从0开始算起)深度:根节点的深度最浅(从0开始算起)层:根节点的层数最小(从1开始算起)二叉树中有两种比较特殊的二叉树:完全二叉树:叶子节点都在最底下两层,最后一层的叶子节点都靠左排列,并且除了最后一层,其他层的节点个数都要达到最大满二叉树:叶子节点全都在最底层,除了叶子节点之外,每个节点都有左右两 个子节点二叉树的存储最直观的是链式存储法:class N...原创 2019-12-08 22:39:02 · 2165 阅读 · 0 评论 -
3.二叉查找树
二叉查找树要求,在树中的任意一个节点,其左子树中的每个节点的值,都要小于这个节点的值,而右子树节点的值都大于这个节点的值。public class TreeNode { private int data; private TreeNode leftNode; private TreeNode rightNode;}public class BinarySearc...原创 2019-12-28 21:28:08 · 152 阅读 · 0 评论 -
4.平衡二叉树之红黑树
平衡树的概念:任何一个节点的左右子树相差不能超过1红黑树的概念:红黑树并不是严格的平衡二叉树,只是保证了相对平衡,没有绝对平衡。是为了解决普通二叉树在更新过程中导致的退化问题产生的 根节点是黑色的每个叶子节点都是黑色的空节点(NIL),叶子节点不存储数据任何相邻的节点都不能同时为红色,也就是说,红色节点是被黑色节点隔开的从任何一个节点到达其所有可达叶子节点的路径,都包含相同...原创 2020-02-01 13:20:30 · 233 阅读 · 0 评论 -
5.平衡多叉树-B树
产生 当数据量过大的时候,数据如果用平衡二叉树存储,就会导致树的深度过深,节点比对次数过多。查找不方便。而且当数据量过大的时候,也不能把所有数据全部放在内存中,只能放在外部存储器中,每次查找节点都是一次I/O操作,需要去外部存储器查找,而去外部存储器查找需要找到存储这个数据所对应的磁盘页面,这个过程是机械化的过程,需要依靠磁臂的转动,找到对应磁道,耗时长。所以说平衡二叉树不够用。 于是出现...原创 2020-02-04 12:08:32 · 733 阅读 · 1 评论 -
6.平衡多叉树-B+树
规则(1)B+跟B树不同B+树的非叶子节点不保存关键字记录的指针,只进行数据索引,这样使得B+树每个非叶子节点所能保存的关键字大大增加;(2)B+树叶子节点保存了父节点的所有关键字记录的指针,所有数据地址必须要到叶子节点才能获取到。所以每次数据查询的次数都一样;(3)B+树叶子节点的关键字从小到大有序排列,左边结尾数据都会保存右边节点开始数据的指针。(4)非叶子节点的子节点数=关键字数(...原创 2020-02-04 12:44:20 · 1604 阅读 · 0 评论 -
7.跳表Skip List
B树与B+树 对B+树,B树,红黑树的理解 https://blog.csdn.net/lm2009200/article/details/70038182 漫画算法:什么是红黑树? 史上最清晰的红黑树讲解原创 2018-08-12 16:21:16 · 240 阅读 · 0 评论 -
11.堆和堆排序&TopK
堆是一种特殊的完全二叉树完全二叉树即除了最后一层其它层都是满的,且最后一层的数据全部靠左排列。特殊在,他的每个节点的值都大于等于(或者小于等于)其子树节点,因此堆又分为大顶堆和小顶堆。因为是完全二叉树,我们存储堆的时候一般使用数据来存储,第一个0号元素留空,这样的话节点是a[n],左节点就是a[2n],右节点就是a[2n+1],父节点就是a[n/2]。当然不留空也可以,推算父节点的时候总...原创 2020-03-02 22:56:33 · 162 阅读 · 0 评论 -
12.快速排序
public class QuickSort { public static void main(String[] args) { int[] a = new int[]{9, 8, 7, 6, 1, 11, 23, 0, 100, 101, 99, 87, -1, -2, 10}; new QuickSort().quickSort(a, 0, a.l...原创 2020-03-04 00:17:49 · 177 阅读 · 0 评论 -
13.归并排序
public static int[] sort(int[] nums, int low, int high) { int mid = (low + high) / 2; if (low < high) { // 左边 sort(nums, low, mid);原创 2016-09-15 21:41:45 · 906 阅读 · 0 评论 -
20.解闷算法-单链表的翻转
public class A { public static void main(String[] args) { ListNode root = new ListNode(1); ListNode node1 = new ListNode(2); ListNode node2 = new ListNode(3); ListN...原创 2020-04-08 23:06:31 · 227 阅读 · 0 评论 -
21.解闷算法-双蛋问题(dp)
双蛋问题:public class Egg { public static void main(String[] args) { int[][] a = new int[1][2]; System.out.println(a.length);//1 new Egg().dp(100); } //t层楼,2个蛋 ...原创 2020-04-08 23:42:34 · 607 阅读 · 0 评论 -
22.八皇后问题-递归回溯
public class EightQueue { List<int[][]> datas = new ArrayList<>(); static int count = 0; public static void main(String[] args) { int[][] queue = new int[8][8]; ...原创 2020-04-08 23:47:37 · 254 阅读 · 0 评论 -
动态规划-最短路径
动态规划作为一个非常成熟的算法思想,适合用动态规划来解决的问题需要满足一个模型三个特征。模型是:多阶段决策最优解模型特征是:1. 最优子结构最优子结构指的是,问题的最优解包含子问题的最优解。反过来说就是,我们可以通过子问题的最优解,推导出问题的最优解。如果我们把最优子结构,对应到我们前面定义的动态规划问题模型上,那我们也可以理解为,后面阶段的状态可以通过前面阶段的状态推导出来。2. 无...原创 2019-12-08 21:53:10 · 2700 阅读 · 0 评论 -
关于排序算法的优劣性比较
算法思路,排序优劣原创 2016-09-15 22:01:55 · 455 阅读 · 0 评论 -
线性表的选择排序
选择排序;直接选择排序和堆排序原创 2016-09-14 23:11:43 · 1892 阅读 · 0 评论 -
线性表的交换排序
交换排序算法原创 2016-09-14 16:49:01 · 1122 阅读 · 0 评论 -
线性表的插入排序
插入排序算法原创 2016-09-14 14:46:29 · 3279 阅读 · 0 评论 -
匹配字符串的KMP算法
KMP算法,next数组原创 2016-09-13 17:27:39 · 376 阅读 · 0 评论