![](https://img-blog.csdnimg.cn/a9f5dae4b7494a6abd2a8b60446e6104.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 81
关于数据结构和算法的专栏
儒rs
小小的天有大大的梦想,我有属于我的天。
展开
-
记忆化搜索题目
洛谷P1216 数字三角形 Number Triangles题目描述观察下面的数字金字塔。写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在上面的样例中,从 7 \to 3 \to 8 \to 7 \to 57→3→8→7→5 的路径产生了最大输入格式第一个行一个正整数 rr原创 2021-04-14 07:29:58 · 253 阅读 · 0 评论 -
求最长公共子序列长度和输出
最长公共子序列子序列概念: 一个给定序列的子序列是在该序列中删去若干元素后得到的序列。例如X=(A,B,C,B,D,A,B),X的子序列有(A,B,C,B,A),(A,B,D),(B,C,D,B)。子序列与子串的不同在于子串的元素在原序列中是连续的。最长公共子序列问题: 给定两个序列X和Y,找出X和Y的一个最长公共子序列。解决方法最长公共子序列采用动态规划解决。动态规划关键在于找出状态和状态转移方程。例如,序列X=(a,b,c,f,b,c)、Y=(a,b,f,c,a,b)。状态:用L[i][j]原创 2021-02-25 16:53:44 · 1082 阅读 · 0 评论 -
滚动数组(简单说明)
前提概要首先呢,滚动数组是一种能够在动态规划中降低空间复杂度的方法,有时某些二维dp方程可以直接降阶到一维,在某些题目中甚至可以降低时间复杂度,是一种极为巧妙的思想,简要来说就是通过观察dp方程来判断需要使用哪些数据,可以抛弃哪些数据,一旦找到关系,就可以用新的数据不断覆盖旧的数据量来减少空间的使用,接下来我会介绍一些简单例题来具体解释一下滚动数组的作用。先以斐波那契数列为例我们先以斐波那契数列来简单感受一下滚动数组的魅力,先上一段经典的代码(使用滚动数组)#include<bits/转载 2021-02-24 14:49:35 · 14133 阅读 · 20 评论 -
特殊二叉树和二叉树的性质
特殊二叉树一:斜树所有的结点都只有左子树的二叉树叫左斜树。所有结点都是只有右子树的二叉树叫右斜树。这两者统称为斜树。左斜树:右斜树:二:满二叉树在一棵二叉树中。如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树。满二叉树的特点有:1)叶子只能出现在最下一层。出现在其它层就不可能达成平衡。2)非叶子结点的度一定是2。3)在同样深度的二叉树中,满二叉树的结点个数最多,叶子数最多。满二叉树:三: 完全二叉树完全二叉树:对一颗具有n个结点的二叉树原创 2020-08-01 10:16:07 · 276 阅读 · 0 评论 -
c++优先队列用法详解
既然是队列那么先要包含头文件#include < queue >, 他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的和队列基本操作相同:top 访问队头元素empty 队列是否为空size 返回队列内元素个数push 插入元素到队尾 (并排序)emplace 原地构造一个元素并插入队列pop 弹出队头元素swap 交换内容定义:p转载 2021-01-26 15:02:57 · 160 阅读 · 0 评论 -
c++ vector用法
在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。1 基本操作(1)头文件#include.(2)创建vector对象,vector vec;(3)尾部插入数字:vec.push_back(a);(4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。(5)使用迭代器访问元素.vector<int>::iterator it;for(it=vec.begin();it!=vec.end();it++)转载 2020-12-29 21:55:38 · 668 阅读 · 0 评论 -
二分查找和黄金分割查找效率比较
问题引入:在二分查找中,我们是取mid等于left和right的中间值,即用等分的方法进行查找。那为什么一定要等分呐?能不能进行“黄金分割”?也就是mid=left+0.618(right-left),当然mid要取整数。如果这样查找,时间复杂性是多少?也许你还可以编程做个试验,比较一下二分法和“黄金分割”法的执行效率。分析:由上面的分析,我们可以知道,二分查找和黄金分割查找,它们的时间复杂度量级是一样的,都是O(logN),比顺序查找要高效得多,但是从最坏时间复杂度上看,二分查找为log2N,黄原创 2020-07-29 14:28:47 · 2378 阅读 · 0 评论 -
中缀转前缀和后缀表达式
前言我们把平时所用的标准四则运算表达式,即1 + (( 2 + 3)* 4 ) – 5这样的表达式叫做中缀表达式。因为所有运算符号都在两数字的中间。但是这样的表达式对于计算机来说是不好运算的,因为优先级的原因,在遍历这个式子时,不能将两个相邻的数字直接进行操作。20世纪50年代,波兰逻辑学家卢卡西维奇(Lukasiewicz)发明了一种不需要括号的表达式,我们把波兰式称为前缀表达式,把逆波兰式称为后缀表达式。接下来就介绍如何将中缀表达式转化为前缀、后缀表达式,这里介绍的方法是利用辅助栈。中缀表达式转为原创 2020-07-18 14:50:21 · 768 阅读 · 1 评论 -
时间复杂度和空间复杂度(两个例子讲解)
算法时间复杂度和空间复杂度算法时间复杂度推导大O阶方法常见的时间复杂度大小次序最坏情况与平均情况算法空间复杂度两个例子最大子列问题算法一算法二 分而治之1 算法的时间复杂度2 由于递归而产生的空间复杂度是多少?3 算法的整体空间复杂度一共是多少?算法三分析“二分法”算法时间复杂度在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(f(n)).它表示随问题规模n的增大,算法执原创 2020-07-13 10:10:36 · 1159 阅读 · 0 评论 -
递归算法的空间复杂度
转载来源 一般算法的空间复杂度相信大家已经都掌握了那么大家想一想递归算法的空间复杂度应该怎么分析呢。我这里用一个到简单的题目来举例题目:求第n的斐波那契数转载 2020-07-13 10:01:51 · 15429 阅读 · 4 评论 -
拓扑排序的练习
洛谷P4017 最大食物链计数题目背景你知道食物链吗?Delia 生物考试的时候,数食物链条数的题目全都错了,因为她总是重复数了几条或漏掉了几条。于是她来就来求助你,然而你也不会啊!写一个程序来帮帮她吧。题目描述给你一个食物网,你要求出这个食物网中最大食物链的数量。(这里的“最大食物链”,指的是生物学意义上的食物链,即最左端是不会捕食其他生物的生产者,最右端是不会被其他生物捕食的消费者。)Delia 非常急,所以你只有 11 秒的时间。由于这个结果可能过大,你只需要输出总数模上 8011200原创 2021-04-10 15:36:29 · 214 阅读 · 0 评论