data structure and algorithm
Alpha205
非计算机专业,学过的东西,做一点记录
展开
-
数据结构与算法笔记(一) 程序性能分析
程序性能:一个程序对内存和时间的需要。要对数据结构和算法给予评价,就必须能够计算程序性能1. 用操作数和执行步数估计程序的运行时间2. 用符号法描述程序在最好,最坏,平均情况下的运行时间。确定程序性能: 分析方法, 实验方法知道两个概念:空间复杂度:程序运行时所需的内存空间的大小时间复杂度:运行程序所需要的时间空间复杂度的组成:1.指令空间:编译之后的程序指令所...原创 2018-12-28 20:06:19 · 1419 阅读 · 0 评论 -
C++数据结构与算法 队列的应用之图元识别
图元识别:数字化图像可以看作m*m的矩阵,单色如图中,像素点的值为0,1.值为0的点表示背景,为1的点表示图元上的一个点。两个相邻的图元像素是同一个图元的像素,图元识别就是给同一个图元的像素做标记。原理如上图所示。算法思路:通过扫描像素来识别图元,采用逐行扫描的方式,当扫描到一个未标记图元像素的时候,给他一个图元标记,将其作为一个新图元种子,通过识别标记所有与该种子相邻的元素,...原创 2019-03-09 13:45:15 · 748 阅读 · 0 评论 -
C++数据结构与算法(九) 树,优先级队列,最大堆的实现
树:用来表示具有结构层次的数据,应用:软件工程技术:模块化技术根:子树:在树中,每个元素都代表一个节点。树的级: 根是一级,根的孩子是二级,一次往下,有三级,四级。。。树的高度(深度): 树中级的个数树中元素的度:一个元素的度指其孩子的个数,一棵树的度是其元素的度的最大值二叉树:定义:一棵二叉树t是有限个元素的集合,当二叉树非空时,其中有一个元素是根,余...原创 2019-03-13 15:48:04 · 546 阅读 · 0 评论 -
刷题笔记(1) 一个序列是否为二叉搜索树的遍历结果
1.输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。二叉搜索树:具体定义:https://blog.csdn.net/zj1131190425/article/details/88654541是一棵二叉树,可能为空,非空的二叉搜索树满足以下特征:1.每个元素都有唯一的关键字2.根节点的左子树中...原创 2019-03-26 08:39:17 · 232 阅读 · 0 评论 -
C++数据结构与算法 竞赛树, 二叉搜索树
竞赛树:tournament tree, 也是以可完全二叉树,所以使用数组描述效率最好,竞赛树的基本操作是替换最大(小)元素赢者树和输者树:为了便于实现,需要将赢者树限制为完全二叉树。n个参与者的赢者树,具有n个外部节点,n-1个内部节点。每个内部节点记录的是在该节点比赛的赢者。最大赢者树和最小赢者树:为了确定输赢者,给每个选手一个分数,分数最大挥着最小的获胜,称为最大...原创 2019-03-22 17:37:42 · 1015 阅读 · 0 评论 -
c++数据结构与算法 图
图的定义:图:用线或者边连接在一起的节点集合。G=(V,E)当且仅当(i,j)是图的边,则称节点i,j是邻接的。有向图和无向图;加权图;一条路径,如果除第一个和最后一个节点之外,其他节点各不相同,则这条路径称为简单路径;生成树:设G是一个无向图,G是联通的,当且仅当G的每一对顶点之间都有一条路径。假设G是联通的,但G的有些边对联通来说是不必要的,去掉这些边依然联通子...原创 2019-03-27 13:25:20 · 541 阅读 · 0 评论 -
刷题笔记(2) 将数组中的数字组合成一个最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。解题思路:将数组中的数字拿出来,先转换为字符串。对于数组中相邻的两个字符串,例如: 32,321,因为stringA = 32+321 = 32321stringB = 321+32 = 3213...原创 2019-04-01 20:47:43 · 971 阅读 · 0 评论 -
算法设计方法之 贪婪算法
贪婪算法是一种非常直观的求解方法,虽然未必能产生最优解,但是能够近似最优解,用贪婪算法可以求解货箱装载问题,背包问题,拓扑排序问题,最短路径问题等最优化问题:明确:1. 约束条件2. 可行解3. 目标函数4. 最优解举个例子:一个口渴的人想要解渴,他可以得到n种不同的饮料,但是他对每种饮料的满意度值不同,但是单一的一种饮料不足以满足他需要的量,他需要饮用不同种类的...原创 2019-04-09 20:42:43 · 1961 阅读 · 0 评论 -
算法设计 分治, 归并排序, 快速排序
算法思想:分治方法与软件设计的模块化方法非常的相似。要解决一个大实例问题,可以(1)将它分解成多个更小的实例,(2)分别解决每个小实例,(3)将小实例的解组合成大实例的解。例子:寻找假硬币。一个袋子有16枚硬币,其中可能有一个假币,并且假币比真币要轻,现在要找出这个假币。现在要找出假硬币,我们把两个或者三个硬币视为不可再分的小实例,只有一个硬币时,不能确定它的真假。2. 金块问...原创 2019-05-20 10:41:21 · 1555 阅读 · 0 评论 -
数据结构与算法 迷宫问题
迷宫问题问题描述:栈的实现在这篇博客中:https://blog.csdn.net/zj1131190425/article/details/87991662迷宫是一个矩形区域,有一个出口和入口,迷宫内部包含不能穿越的墙壁和障碍物。1.用矩阵来描述迷宫。入口是(0, 0), 出口是(m,n),现在需要在迷宫中选找一条路径,穿过迷宫。位置(i,j)=1表示有障碍。0表示无障碍。思路:...原创 2019-03-08 22:09:59 · 5846 阅读 · 1 评论 -
数据结构与算法 汉诺塔问题和列车车厢重排问题
1. 汉诺塔问题:(a)通过递归的方式解决:https://blog.csdn.net/zj1131190425/article/details/85156570// 汉诺塔问题: 递归解决方案void movedisk(int n, char fromTower, char toTower, char auxTower){ if(n==1) { cout << ...原创 2019-03-03 11:48:18 · 1344 阅读 · 1 评论 -
数据结构与算法笔记(二) 线性表(数组描述)
c++常用的数据描述方法是数组描述和链式描述,线性表可以用来说明这两方法,先介绍数组描述的线性表。后面再介绍链式描述的线性表。C++ STL容器vector和list相当于线性表的数组描述和链式描述。数组描述方法将元素存储在一个数组中,所有元素依次存储在一片连续的存储空间,这就是所谓的顺序表数据对象和数据结构:数据对象是一组实例或值。 // 数据实例 理解:数据对象int...原创 2019-01-11 17:01:20 · 482 阅读 · 0 评论 -
数据结构与算法笔记(三) 线性表(链式描述) 链表
在链式描述中,线性表元素的位置在内存中是随机的,每个元素都有一个明确的指针指向线性表的下一个元素的位置。1.单向链表:数据对象的每一个元素都用一个单元或者节点来描述,每个节点都明确包含另一个相关节点的位置信息。线性表的链式描述图如下所示: 每个节点只有一个链,这种结构称为单向链表重点: 链表的插入与删除结构chainNode,数据成员element是节点的数据域,存储...原创 2019-01-13 10:46:16 · 416 阅读 · 0 评论 -
数据结构与算法笔记(四) 循环链表和双向链表
可以将线性表描述成一个单项循环链表,使链表的应用代码更加简洁和高效循环链表的结构如下图所示。1,无头节点的循环链表: 2.有头节点的循环链表: 3.空列表: 将单向链表的头节点和尾节点连接起来,就成为了循环链表;有头节点的循环链表和没有头节点的循环链表:头节点是链表的一个附加节点,有了这个节点,空表就不用作为特殊情况来先处理了,使程序简化,有了头节点,...原创 2019-01-18 15:54:47 · 304 阅读 · 0 评论 -
数据结构与算法笔记(五) 链表的应用
1.箱子排序:假设:用链表保存一个班级学生的清单,节点的数据域包括:姓名,社会保险号码,作业和考试的分数,所有作业和加权的总分。假设分数介于(0-100)之间,按照总分对学生进行排序,一种较快的排序方法是箱子排序(bin sort):把相同分数的节点放到一个箱子里,然后把箱子连接起来就得到有序的链表箱子排序要做的是:(1)逐个删除输入链表的节点,把删除的节点分配到相应的箱子中9,每个箱...原创 2019-01-22 11:39:53 · 235 阅读 · 0 评论 -
C++数据结构与算法(八) 队列及队列的应用
队列和栈一样,是一种特殊的线性表,队列的删除和插入操作在队列两端进行,所以队列是一个FIFO的结构。实现用数组描述的双端队列数据结构定义:队列是一种特殊的线性表,队列的删除和插入操作在队列两端进行,插入端为队尾,删除元素的那一端称为队首。队列的ADT如下:#ifndef QUEUE_ABC_H#define QUEUE_ABC_H// 定义抽象类template<t...原创 2019-03-05 16:31:55 · 794 阅读 · 0 评论 -
数据结构预算法(六) 数组和矩阵(1)
数组:抽象数据类型:数组的操作:1.存值 get(index)2.取值 set(index, value)这两个操作定义了抽象数据类型arrayc++数组的索引,且数组时c++的标准数据结构行主映射和列主映射 :数组的应用需要将数组的元素序列化,按照一维排列,因为数组元素一次只能输出或者输入一个。因此必须确定一个输入输出的顺序(即映射关系)。不规则的...原创 2019-02-26 15:08:16 · 439 阅读 · 0 评论 -
c++中大矩阵乘法计算的效率问题
假设两个大小相同的方阵需要计算乘法:按照矩阵乘法的规则:先写一段矩阵初始化代码:#include <iostream>#include <cstdlib> #include <ctime>using namespace std;void matrix_print(int **a, int n);int main(int argc, c...原创 2019-02-26 20:41:18 · 5284 阅读 · 2 评论 -
数据结构与算法(七) 栈以及栈的应用
栈的应用非常的广泛,在C++的STL中,提供了用数组实现的栈。把线性表的插入和删除操作都限制在同一端,就得到栈的数据结构。是一个后进先出的数据结构。因为栈是一种特殊的线性表,所以可以从线性表类派生出stack类。通过派生的方法可以降低栈的开发难度,但是代码的执行效率也会降低。定义和应用:栈:一种特殊的线性表,插入和删除操作都限制在表的同一端进行,这端称为栈顶,另一端称为栈底。应用:...原创 2019-03-03 11:30:23 · 714 阅读 · 0 评论 -
C++数据结构与算法 动态规划
动态规划: 和贪婪算法一样,动态规划对一个问题的解是一系列的决策过程,贪婪算法依据贪婪准则,做出的每一个抉择都是不可撤回的,在动态规划中,需要考察一系列抉择,已确定一个最优抉择序列是否包含一个最优抉择子序列。例如,在上图中,要从节点1到达节点5,选择一条最短的路径,第一步可以选择的顶点为2,3,4。假设选择顶点3, 然后决定如何从顶点3到达顶点5。如果选择了一条从顶点3到顶...原创 2019-06-17 10:58:50 · 341 阅读 · 0 评论