
数据结构与算法
文章平均质量分 84
数据结构与算法
zuodaoyong
这个作者很懒,什么都没留下…
展开
-
红黑树解析
红黑树解析翻译 2022-07-19 01:12:13 · 411 阅读 · 0 评论 -
贪心算法
贪心算法:在问题求解时,每一步选择中都采取最好或者最优的选择,从而希望能够导致结果是最好或者最优的算法 思路: 1、遍历所有电台,找到一个覆盖了最多未覆盖的地区的电台 2、将找到的电台加入到集合里,同时把该电台所覆盖的地区在全部地区集合中清除 3、重复第一步,直到覆盖所有地区 代码: public static void main(String[] args) { Map...翻译 2020-03-04 22:50:41 · 139 阅读 · 0 评论 -
牛顿迭代法解决对一个数开方
牛顿迭代法是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法,就是使用迭代的方法来求解函数方程的根。简单地说,牛顿法就是不断求取切线的过程。 ...翻译 2020-03-02 22:23:07 · 454 阅读 · 0 评论 -
布隆过滤器
1、原理 布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。 2、举例: 如果要映射一个值到布隆过滤器中,我们需要使用多个不同的哈希函数生成多个哈希值,并对每个生成的哈希值指向的 bit...翻译 2020-02-23 15:21:19 · 253 阅读 · 0 评论 -
查找指定连续日期的算法
先看下面的日期数据找出连续三天以上的日期: 2020-01-01 2020-01-02 2020-01-05 2020-01-06 2020-02-01 2020-02-02 2020-02-03 2020-02-04 2020-02-06 2020-02-08 2020-02-10 2020-02-11 2020-02-12 2020-02-13 2020-02-14 2020-02-16 ...原创 2020-02-05 19:17:10 · 853 阅读 · 1 评论 -
树结构之线索化二叉树
数列 {1, 3, 6, 8, 10, 14 } 构建成一颗二叉树 当对上面的二叉树进行中序遍历时,顺序为:8, 3, 10, 1, 6, 14 ,但是 6, 8, 10, 14 这几个节点的 左右指针,并没有完全的利用上. 如果希望充分的利用各个节点的左右指针, 让各个节点可以指向自己的前后节点,该怎么办? 解决方案:线索二叉树 中序线索化后: 1、n个结点的二叉链表中含有n...原创 2020-02-01 12:41:30 · 196 阅读 · 0 评论 -
树结构之顺序存储二叉树
从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组。 顺序存储二叉树特点 (1)顺序二叉树通常只考虑完全二叉树 (2)第n个元素的左子节点为 2 * n + 1 (3)第n个元素的右子节点为 2 * n + 2 (4)第n个元素的父节点为 (n-1) / 2 (5)n : 表示二叉树中的第几个元素(按0开始编号) 例子:给定数...原创 2020-01-31 17:17:25 · 294 阅读 · 0 评论 -
树结构之二叉树
二叉树 每个节点最多只能有两个子节点的树 1、满二叉树 二叉树的所有叶子节点都在最后一层,且节点总数=2^n-1,n为层数 2、完全二叉树 二叉树的所有叶子节点都在最后一层或者倒数第二层,而且最后一层的叶子节点是左边连续,倒数第二层是右边连续 3、二叉树遍历 (1)前序遍历 先输出父节点,再遍历左子树和右子树 (2)中序遍历 先遍历左子树,再输出父节点,再遍历右子树 ...原创 2019-12-29 23:54:05 · 266 阅读 · 0 评论 -
java内部排序之归并排序
归并排序(时间复杂度(nlogn)) 时间复杂度:最好O(nlogn),最坏O(nlogn) 空间复杂度:O(n) 稳定性:稳定 思想: 假设有n个数,可看成n个有序的子序列,每个子序列长度为1,然后两两再归并,得到长度为2或者1的有序子序列。重复两两子序列归并直到一个长度为n的有序序列为止。 代码: public static void sort(int []arr){...原创 2019-12-18 20:30:07 · 145 阅读 · 0 评论 -
java内部排序之基数排序
基数排序(桶排序) 思想: 将所有待比较数值统一为同样的数位长度,数位较短的数前面补0,然后从最低位开始,一次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。 将数组{53,3,542,748,14,214}使用基数升序排序步骤如下: 代码如下: private static void radixSort(Integer[] arr){ ...原创 2019-12-17 10:30:17 · 112 阅读 · 0 评论 -
java内部排序之快速排序
快速排序思想: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个过程递归进行,以此达到整个数据变成有序序列。 代码: public static void main(String[] args) throws Exception{ Integer[] arr=new I...原创 2019-10-02 10:47:28 · 114 阅读 · 0 评论 -
java内部排序之希尔排序
在讲述希尔排序前先回顾下直接插入排序 直接插入排序算法思想(时间复杂度O(n^2)): 时间复杂度:最好O(n),最坏O(n^2) 空间复杂度:O(1) 稳定性:稳定 将设由n个元素,整个排序过程是n-1趟插入,先将序列中的第一个记录看成是一个有序的子序列,然后从第二个记录起逐个进行插入,直至整个序列变成按关键字非递减有序序列为止。 代码: public static void m...原创 2019-09-28 22:27:07 · 195 阅读 · 0 评论 -
java内部排序之简单选择排序
简单选择排序的算法思想(时间复杂度0(n^2)): 时间复杂度:最好O(n^2),最坏O(n^2) 空间复杂度:O(1) 稳定性:不稳定 对于不稳定性给出一个例子: 序列5 8 5 2 9,第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。 每一趟在n-i+1(i=1,2,.....,n-1)个记录中选取关键字最小的记录作...原创 2019-09-28 09:35:58 · 90 阅读 · 0 评论 -
java内部排序之冒泡排序
冒泡排序基本思想(时间复杂度0(n^2)): 时间复杂度:最好O(n),最坏O(n^2) 空间复杂度:O(1) 稳定性:稳定 第一趟比较:首先将第一个记录的数和第二个数进行比较,如果出现arr[j]>arr[j+1],则交换,然后比较第二个数和第三个数。以此类推直至比较n-1和第n个数为止,最后在n位置上出现最大的数。 第二趟比较:对前n-1个数做第一趟重复操作,最后在n-1出现第...原创 2019-09-27 07:24:04 · 168 阅读 · 0 评论