一把头发一算法
文章平均质量分 83
一天一天学算法 大把大把掉头发
Night-Breeze晚风
落日沉溺于橘色的海
晚风沦陷于赤诚的爱
展开
-
求二叉树的最小深度(普通+Morris遍历进阶)
求一棵二叉树的最小高度(所有叶节点中距离头节点最短的)原创 2021-07-22 18:44:01 · 246 阅读 · 0 评论 -
神级遍历——Morris算法及其应用
Morris 二叉树(Binary tree)是树形结构的一个重要类型。提到二叉树,我们首先想到的就是其3种遍历方式–前序、中序和后序,对于这三种遍历方式,我们很容易通过使用递归或者迭代的方式实现,时间复杂度为O(N)。但是这两种实现方式都需要使用堆栈进行节点信息的存储,即空间复杂度也是O(N)。 但是还有一种更为巧妙的遍历方法–Morris算法,该算法的时间复杂度也是O(N),但是空间复杂度却能达到最优的O(1)Morris遍历的实现: 记当前节点 cur ,一开始 cur 指向整棵树的头节原创 2021-07-21 22:33:27 · 1107 阅读 · 1 评论 -
经典算法 BFPRT算法详解
经典算法 BFPRT算法详解问题描述:给定一个整型数组,返回其中第K小的数普通解法: 这道题可以利用荷兰国旗改进的 partition 和随机快排的思想:随机选出一个数,将数组以该数作比较划分为 <,=,> 三个部分,则 = 部分的数是数组中第几小的数不难得知,接着对 < (如果第K小的数在 < 部分)或 > (如果第K小的数在 > 部分)部分的数递归该过程,直到 = 部分的数正好是整个数组中第K小的数。这种做法不难求得时间复杂度的数学期望为 O(NlogN) (原创 2021-07-20 22:45:26 · 725 阅读 · 0 评论 -
常用的内部排序算法(C语言)
常用的内部排序算法目的要求:掌握常见的内部排序算法的思想及其适用条件。掌握常见的内部排序算法的程序实现。实验内容:任务:设计一个内部排序算法模拟系统,利用该系统实现常用的 7 种排序算法,并测试各种排序算法的性能。内容:通过一个简单的菜单,分别实现下列排序要求,采用几组不同数据测试各排序算法的性能(比较次数和移动次数)及稳定性。♦ 实现简单选择排序、直接插入排序和冒泡排序;♦ 实现折半插入排序;♦ 实现希尔排序算法;♦ 实现快速排序算法(递归和非递归);♦ 实现堆排序算法。原创 2021-07-19 16:25:20 · 1737 阅读 · 0 评论 -
常用排序算法详细讲解(Java篇)
排序选择排序二级目录三级目录常见排序列表选择排序最简单但是最没用的排序算法,也有优化空间最简单:算法思想简单最没用:时间复杂度高O(n²)、不稳定基本思想:第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并与第i个记录进行交换。共需进行i-1趟比较,直到所有记录排序完成为止。Java代码实现:public class SelectionSort { public static void main(String[] args) {原创 2021-07-19 15:16:13 · 259 阅读 · 0 评论 -
约瑟夫环——C语言循环链表实现
约瑟夫环问题据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一原创 2020-08-01 13:01:00 · 456 阅读 · 1 评论