随笔分类 - 数据结构与算法
摘要:讲述了定时器模块的简要设计思路,尤其是构建了相关的数据结构。依据此思路,有助于快速实现相关模块的开发。
阅读全文
摘要:一、求所有点对间最短路径 弗洛伊德算法: 假设以加权有向图G=(V, E)为对象,则该算法不需要G的所有边均非负,只要G不包含负环即可(所有边的权值之和为负的环)。同时可判断G中是否有负环(若算法执行完后,存在某顶点到其自身最短距离为负时,则表示有负环)。 二、拓扑排序 有向无环图DAG可用于表示各
阅读全文
摘要:Disjoint Sets是一种用互质集合(一个元素不同时包含于多个集合的集合)对数据进行分类管理的数据结构。互质动态集合中的各个集合都是一个树结构,且每个树的根节点用于区分集合的代表元素,因此又可称该数据结构为森林结构。 三种操作: makeSet(x):创建仅包含元素x的新集合 findSet(
阅读全文
摘要:一、图的类型 二、图的表示:G = (V, E) 1、邻接表 对V的每个顶点都用一个表来表示,每个表中包含所有与该顶点相邻的顶点组成,所有的表构成图的邻接表。 具体实现形式:每个表中的数据格式可为:顶点编号、顶点的度、依次列出与该顶点相邻的顶点编号。可用vector类型的数组来表示: vector<
阅读全文
摘要:数据结构既包括各数据存储的方式和彼此间的关系结构,又含有“添加”、“取出”等对数据的操作,同时也带有取出和添加数据时的规则。如队列和栈就是以数据抵达的先后顺序来形成这一规则的,但优先级队列则是以数据内的键值作为基准来判断谁先被取出。 二叉搜索树(按照左子节点、父节点、右子节点的顺序将键值由小到大排序
阅读全文
摘要:由计算机来处理数学或现实中的问题,本质在于如何对问题进行数学建模,也就是怎样将问题中含有的要素与相应数据结构中的项形成对应关系,以及将对问题求解的过程转化为对数据的操作组合。 而在计算机中,对现实问题数学建模,常用的方法是递推或递归的分析思路。将一个大的问题分割成小的局部问题,通过获得最小问题的解、
阅读全文
摘要:相比链表结构,使用动态树结构能够更有效的添加、删除和搜索数据。搜索树可用作字典或优先级队列,而二叉搜索树是最基本的搜索树。 二叉搜索树满足如下排序性质:若其执行中序遍历,则会得到一个按升序排列的键值序列。通过指针将节点连接成一棵树,各节点内包含键值以及指向父节点、左子节点、右子节点指针。 1、插入
阅读全文
摘要:一种用于表达层级结构的数据结构,常用来表达文档、组织结构图、图形图像等。在此主要介绍树的表达方式以及相关基本算法。 1. 有根树 要求获得有根树中各节点的信息,如:节点编号、节点种类(根、内部节点、叶)、父节点编号、子节点编号、节点深度等。 采用“左子右兄弟表示法”来表示有根树(父节点、最左侧子节点
阅读全文
摘要:1. 归并排序 基本思想:利用分治法,将局部数组分割成两个局部数组,再对两局部数组执行归并排序,最后通过归并方法将两个已排序的局部数组整合成一个数组。 伪代码如下: 2. 快速排序 基本思想:先可任意一个元素作为分割点,将数组中大于该分割点的元素放置在其右边,小于该分割点的元素置于其左边。然后再对分
阅读全文
摘要:1. 线性搜索 简单线性查找伪代码: 含有标记的线性查找 2. 二分搜索 要求数据集合先进行排序。 伪代码: 3. 散列法 散列法可根据各元素的值来确定元素的存储位置,再将位置保管在散列表中,从而实现高速搜索。其由容纳m个元素的数组T, 以及根据数据关键字决定数组下标的函数共同组成。 简单实现: 散
阅读全文
摘要:C++标准库以提供“模板”为主,即不必预先指定类型的函数或类。 STL提供了多种名为容器的类,用于管理数据集合。如stack、queue、vector、list等。 stack<int> S; queue<string> Q; queue<pair<string, int> > Qp; vector
阅读全文
摘要:数据结构顾名思义就是一堆数据的组织方式,以方便后续的存取和操作,且好的算法离不开高效管理数据的方法。 数据结构的三要素: 1. 数据集合。通过数据对象的本体(如数组和结构体)保存数据 2. 操作。对数据集合的操作,如插入、存取、查找、以及修改等 3. 规则。保证数据集合按照一定规矩来操作、管理和存取
阅读全文
摘要:1. 插入排序 思想: 其思路与打扑克时排列手牌的方法类似,即需要将牌一张张抽出来,分别插入到前面已排序好的手牌中的适当位置。 算法伪代码: 2. 冒泡排序 思想:让数组元素逐个地像水中气泡一样上浮。 伪代码1: 伪代码2: 3. 选择排序 思想:在每个计算步骤中选出一个最小值,进而完成排序。 伪代
阅读全文

浙公网安备 33010602011771号