随笔分类 - 数据结构
摘要:概念 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现。 优先队列的实现:优先队列通常用堆来实现
阅读全文
摘要:题目描述 求一个集合的所有结合,例如集合{A,B,C}的所有子集为:{},{A,B,C},{A,B},{A,C},{B,C},{A},{B},{C}。 思路 实际上求子集问题是一个经典的DFS,每一次选择某个元素时,都会面临两个选择,一个是不选一个是选: 第一步:选择A元素,有两种选择,一个是选A,
阅读全文
摘要:题目 题目:剪邮票 如【图1.jpg】, 有12张连在一起的12生肖的邮票。 现在你要从中剪下5张来,要求必须是连着的。 (仅仅连接一个角不算相连) 比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。 请你计算,一共有多少种不同的剪取方法。 请填写表示方案数目的整数。 注意:
阅读全文
摘要:基数排序(radix sort),相对于常见的比较排序,基数排序是一种分配式排序,即通过将所有数字分配到应在的位置最后再覆盖到原数组完成排序的过程。 基数排序思路 我们先给出一个待排序数组,和10个桶(桶从0开始编号): 我们需要依次将数组中取出来,分别放入10个桶中,入桶的规则:在第一回合中将数组
阅读全文
摘要:概述 上一篇我们学习了堆排序,今天我们来研究一下桶排序,桶排序的思想中也是将排序问题小型化,然后达到排序的目的。在我看来桶排序就是对插入排序的一种优化。 桶排序的思路 相比与生涩难懂的代码,图解的方式来描述问题是一个非常好的方法,直观的图片永远会比抽象的代码更容易理解。话不多说直接上图: 我们给出一
阅读全文
摘要:概述 堆排序是我们常说的十大排序算法中的一种,堆排序也是数据结构中比较重要的一个知识点,我们今天就来好好探究一下堆排序。在说堆排序之前,我们就必须先明白什么是二叉堆,因为堆排序就是在二叉堆的基础上完成的。 什么是二叉堆 话不多说直接上图: 仔细观察上图的特点: 1. 二叉堆是一颗完全二叉树。 2.
阅读全文
摘要:概述 全排列在很多竞赛题中会经常用到,因为只有枚举出数组中元素的所有可能的组合情况,才能进行题目的下一步操作,那么这篇文章就用递归的思想来实现全排列。 首先我们先举一个最简单的全排列的例子,给出数组{1,2,3},那么这个数组的全排列就有6种情况: {1,2,3} {1,3,2} {2,1,3} {
阅读全文
摘要:题目 给定一个方阵,定义连通性:上下左右相邻,并且值相同。可以想象一张地图,不同的区域被染成了不同的颜色。现在我们需要判断图中任意两点是否在同一个连通区间中。 输入: 整数N(N<50),代表矩阵的行列数 输入N行,每行N个字符,代表矩阵中的元素 输入一个整数M(M<1000)表示询问次数 输入M行
阅读全文
摘要:二叉树的前序、中序、后序遍历我想大家应该都很熟悉了,那我们今天就来讲一下二叉树的层次遍历。 二叉树的前序、中序、后序遍历需要用到栈(递归的过程也就是一个栈),层次遍历需要借助队列这个数据结构。 层次遍历的思路 我们给出一个二叉树: 这棵二叉树的层次遍历次序为:A、B、C、D、F、G 以人的思维来看层
阅读全文
摘要:到底什么是最小生成树 最小生成树算法应用范围比较广,例如在网络的铺设当中难免会出现环路,需要要生成树算法来取出网络中的环,防止网络风暴的发生。那到底什么是最小生成树呢?我这里就不给严谨的定义了,这种定义网上一搜一大堆,但是往往严谨的定义都不太容易理解。下面我就给出一个更容易理解的定义。 在理解“最小
阅读全文
摘要:了解拓扑排序 看到这篇文章的博友可能已经对拓扑排序有了一定的了解,但是在这里我们还是需要明确一下什么是拓扑排序。 拓扑排序的严谨定义网上一搜一大堆,我就不copy了,我总结几点拓扑排序的特点: 1. 拓扑排序是建立在有向无环图(DAG)的基础上的。 2.拓扑排序就是将DAG以线性方式进行排序。即对任
阅读全文
摘要:理解平衡二叉树 在解决平衡二叉树动平衡问题,我们先来明确什么是平衡二叉树: 平衡二叉树是二叉搜索树的一种特殊情况,所以在二叉搜索树的基础上加上了如下定义: 平衡因子:我们将二叉树中各个结点的左右子树的高度差称为该节点的平衡因子。 平衡二叉树:就是在二叉搜索树的基础上,所有结点的平衡因子都小于等于一。
阅读全文