算法
文章平均质量分 79
水木今山
什么都没有
展开
-
浅谈对尾递归的理解
今天在做《剑指Offer》第十题时,发现了一个用尾递归的解法,由于之前对于尾递归并没有太多了解,于是查阅了一些资料,在此对其进行一个简单的总结。关于其它题目的题解与笔记,感兴趣的朋友可以到我的Github或个人博客上看看:剑指Offer笔记 Cenjie’s Blog ,以下是正文。递归本质递归的本质是自己调用自己,因为是嵌套调用,所以栈帧无法回收,在递归调用的层级太多时,往往会引发...原创 2018-08-22 11:41:57 · 639 阅读 · 0 评论 -
树的前中后层序遍历(递归与非递归方式)
Description此题与429、589题型类似,因此放在一起总结。![](590. N-ary Tree Postorder Traversal)()对于上图要求求出前序遍历、后序遍历和层级遍历的结果。Example前序遍历结果:[1,3,5,6,2,4]后序遍历结果:[5,6,3,2,4,1]层级遍历结果:[ [1], [3,2,4], [5,6...原创 2018-11-22 11:58:25 · 268 阅读 · 0 评论 -
最短路径问题—Dijkstra算法及相关例题
最近在做算法题的时候总是遇到Dijkstra相关的题目,之前虽然学过图论的一些算法,但第一次做这类题时完全不知从何入手。看了一些博客,并且在PAT上折腾了几题后,发现一些常用的模板与套路,因此在这里进行一个总结。关于Dijkstra的理论知识可以参考这篇博客:最短路径问题-Dijkstra算法详解Dijkstra算法Dijkstra算法往往和dfs结合在一起考,因此这里给出一个求解基础Dijk...原创 2018-12-05 20:21:51 · 23803 阅读 · 0 评论 -
常用查找算法之散列表
文章目录前言散列函数碰撞处理基于拉链法的散列表基于线性探测法的散列表查找插入删除调整数组大小参考资料前言散列表类似于数组,可以把散列表的散列值看成数组的索引值。访问散列表和访问数组元素一样快速,它可以在常数时间内实现查找和插入操作。使用散列的查找算法分为两步:用散列函数将被查找的键转化为数组的一个索引;处理碰撞冲突。散列函数要为一个数据类型实现优秀的散列方法需要满足三个条件:一致性:...原创 2018-11-23 14:43:34 · 363 阅读 · 0 评论 -
常用查找算法之二分查找
文章目录前言二分查找查找数字第一次出现的位置查找数字最后一次出现的位置二分查找实现有序符号表复杂度分析参考资料前言符号表是一种存储键值对的数据结构,可以支持高效地插入、查找等操作,因此在这里使用一个有序符号表接口来定义这些操作,这个符号表将保持键的有序性。public interface OrderedST<Key extends Comparable<Key>, Val...原创 2018-11-19 16:57:50 · 178 阅读 · 0 评论 -
常用查找算法之B/B+树
文章目录前言B- 树查找插入删除B+ 树查找范围查找总结参考资料前言从算法逻辑上讲二叉查找树的查找和插入操作效率都已经很高,但是在实际应用中由于我们不能将整个索引表加载到内存,只能逐一加载每个磁盘页,这里的磁盘页就对应着索引树的节点。因此我们要将原本“瘦高”的树结构变得“矮胖”,从而减少磁盘IO的次数。B- 树B-树是一种多路平衡查找树,是对2-3树的一个扩展。一个m阶的B树(m的大小取...原创 2018-11-21 21:07:25 · 2053 阅读 · 1 评论 -
常用查找算法之红黑树
文章目录前言2-3查找树查找插入构造轨迹红黑树基本实现旋转颜色转换插入删除最小键删除查找复杂度分析参考资料前言二叉查找树对于大多数情况下的查找和插入操作在效率上来说是没有问题的,但是在最差的情况下会达到线性级别,其效率取决于插入顺序。平衡查找树的数据结构能够保证在最差的情况下也能是对数级别,要实现这一目标我们需要保证树在插入完成之后始终保持平衡状态。2-3查找树在学习红黑树之前要先了解2...原创 2018-11-20 23:23:55 · 644 阅读 · 0 评论 -
常用查找算法之二叉查找树
文章目录@[toc]定义基本实现查找插入有序性相关的方法及删除操作范围查找删除最小节点删除指定节点查找最小键排名复杂度分析参考资料定义一棵二叉查找树(又称二叉排序树、二叉搜索树)是一棵二叉树,其中每个节点都含有一个Comparable的键以及相关联的值且每个节点的键都大于其左子树中的任意节点的键而小于右子树的任意节点的键。二叉查找树有一个重要性质,就是它的中序遍历结果递增排序。基本实现...原创 2018-11-20 14:45:50 · 928 阅读 · 0 评论 -
常见排序算法之堆排序
文章目录前言堆的定义上浮下沉堆排序堆的构造下沉排序复杂度分析参考资料前言排序算法的成本模型计算的是比较和交换的次数。less()方法对元素进行比较,exch()方法将元素交换位置。private static boolean less(Comparable v, Comparable w) { return (v.compareTo(w) &amp;lt; 0);}private st...原创 2018-11-06 21:58:59 · 357 阅读 · 0 评论 -
常见排序算法之快速排序
文章目录前言思路实现过程基本算法切分方法复杂度分析最优时间复杂度的数学证明算法改进切换到插入排序三取样切分三向切分法参考资料前言排序算法的成本模型计算的是比较和交换的次数。less()方法对元素进行比较,exch()方法将元素交换位置。private static boolean less(Comparable v, Comparable w) { return (v.compare...原创 2018-11-06 15:29:25 · 246 阅读 · 0 评论 -
初级排序算法
初级排序算法文章目录初级排序算法前言选择排序特点复杂度分析实现插入排序特点复杂度分析实现待更...参考资料前言排序算法的成本模型计算的是比较和交换的次数。less()方法对元素进行比较,exch()方法将元素交换位置。private static boolean less(Comparable v, Comparable w) { return (v.compareTo(w) &amp;amp;amp;amp;amp;amp;amp;amp;lt...原创 2018-10-30 16:39:01 · 174 阅读 · 0 评论 -
常见排序算法之归并排序
文章目录原地归并方法自顶向下的归并排序自底向上的归并排序特点复杂度分析参考资料原地归并方法该方法将两个不同的有序数组归并到第三个数组中。 private static void merge(Comparable[] a, Comparable[] aux, int lo, int mid, int hi) { // copy to aux[] for (...原创 2018-10-31 16:26:58 · 135 阅读 · 0 评论 -
《剑指Offer》题解与笔记(Java实现)
Coding Interviews3.1 找出数组中重复的数字3.2 不修改数组找出重复的数字4 二维数组中的查找5 替换空格6 从尾到头打印链表7 重建二叉树8 二叉树的下一个节点9 用两个栈实现队列10.1 斐波那契数列10.2 跳台阶10.3 变态跳台阶10.4 矩形覆盖14 剪绳子15 二进制中1的个数16 数值的整数次方17 打印从1到最大的n位数1...原创 2018-09-14 17:20:49 · 1098 阅读 · 0 评论 -
ATR-CKN算法的研究与实现
前言最近在学校做了无线传感器网络(WSN)睡眠调度算法方面的一些研究,本篇文章主要对其中的CKN、EC-CKN算法的学习做个总结,并给出基于这两种算法而改进后的ATR-CKN算法的核心实现以及在Nettopo上的运行结果。CKN与EC-CKN算法K-邻居节点连通算法(CKN)是一个有效的分布式睡眠/工作时序安排算法。该算法可以在有效的减少网络中处于工作状态的节点个数的同时保证整个网络处于连通...原创 2019-01-20 21:50:37 · 764 阅读 · 0 评论