数据结构 算法
数据结构
bits/stdc++.h
不断充实自己
展开
-
递归与分治策略
1.递归基本概念直接或间接地调用自身的算法成为递归算法。用函数自身给出定义的函数称为递归函数。有些数据结构,如二叉树,由于其本身固定的递归特性,特别适用递归的形式来描述。另外,还有一些问题,虽然其本身没有明显的递归结构,但用递归技术来求解,可使设计出来的算法简洁易懂且易于分析。最常见的递归算法的例子比如说:阶乘函数,Fibonacci数列等。2.分治法的基本思想分治法的基本思想...原创 2020-05-06 22:08:07 · 130 阅读 · 0 评论 -
区间模型
例题给定一个长度为n(n <= 1000)的字符串A,求插入最少多少个字符使得它变成一个回文串。典型的区间模型,回文串拥有很明显的子结构特征,即当字符串X是一个回文串时,在X两边各添加一个字符'a'后,aXa仍然是一个回文串,我们用d[i][j]来表示A[i...j]这个子串变成回文串所需要添加的最少的字符数,那么对于A[i] == A[j]的情况,很明显有 d[i][j] = d[...原创 2019-03-30 23:30:07 · 545 阅读 · 2 评论 -
4.17博客(广度优先搜索和深度优先搜素)
这周讲了搜索算法。相比于单纯的枚举算法有了一定的方向性和目标性。算法是在解的空间里,从一个状态转移(按照要求拓展)到其他状态,这样进行下去,将解的空间中的状态遍历,找到答案(目标的状态)。搜索算法分为广度优先搜索(BFS)和深度优先搜索(DFS)。广度优先搜索基本思想:从初始状态S 开始,利用规则,生成所有可能的状态。一层层的寻找所要的结果,如果没找到所需要的答案,就继续将这层寻找完,...原创 2019-04-17 22:40:30 · 167 阅读 · 0 评论 -
分组背包
清明假期到了,然而我并没有回家,于是就和同学出去转了转,发现节假日最好还是不要出来玩了,都是人啊。还有清明这三天都有训练的比赛,我第一天的时候看看了比赛的题,里面题的难度还都是很高的,所以我就找了几个自己能看懂的,自己做了做。感觉自己的 能力还是太低了。继续努力吧!继续上一篇的博客再写一下分组背包的问题。我觉得分组背包同样是01背包的一种变形。分组背包中物品被分成几组,每组中只能挑选出...原创 2019-04-06 20:41:47 · 194 阅读 · 0 评论 -
动态规划
动态规划已经学完有两周了,在这两周的学习过程中,给我最大的感受就是,在上课时,可以听懂老师的讲解,一些思路也可以听懂,但是到自己做题的时候,就是做不出来,像背包问题,自己话可以根据模板套进去,可以AC,但是有的题是自己做不出来。后来知道,自己必须多做题才可以真正理解动态规划的思想。所以还是要多加训练。背包问题背包问题分为有:01背包,完全背包,多重背包,分组背包。我觉得01背包和多...原创 2019-04-03 23:40:56 · 98 阅读 · 0 评论 -
动态规划之背包问题
最近学习动态规划,自己觉得很难理解。然后我就找了一本书,叫做《算法图解》。我觉得这本书讲的内容非常的通俗易懂。所以写一下对我现在看的内容。背包问题假设你是个小偷,背着一个可装4磅东西的背包。你可盗窃的商品有如下3件。为了让盗窃的商品价值最高,你该选择哪些商品?最简单的算法如下:尝试各种可能的商品组合,并找出价值最高的组合。这样可行,但速度非常慢。在有3件商品的情况下,你...原创 2019-03-27 22:28:33 · 175 阅读 · 0 评论 -
动态规划预习
这几天除了做贪心的练习题外,看了看动态规划的问题。这些都是一些书面的东西,先是对动态规划有一个最初的理解。动态规划是解决多阶段决策问题的一种方法。多阶段决策问题就是在求解一类问题的过程中可以分出若干互相联系的阶段,在每一个阶段都需要做出决策,并影响到下一个的决策。在每一个阶段都要选择一个最优策略,来达到效果。动态规划的基本题1、问题具有多阶段决策的特征。2、每一阶段都...原创 2019-03-23 23:31:08 · 104 阅读 · 0 评论 -
数据结构——栈的实现
栈的定义是限定在表的一端进行插入和删除操作的线性表,允许插入和删除的一段称为栈顶,另一端称为栈底,不含任何元素的栈称为空栈。总之栈具有的特点是后进先出(LIFO)。栈和链表一样又分为顺序栈和链栈。链栈的实现#include <iostream>using namespace std;template<typename DataType>struct N...原创 2019-10-16 19:51:29 · 180 阅读 · 0 评论 -
数据结构线性表——单链表实现
单链表是用一组任意的存储单元存放线性表的元素,这组存储单元可以连续也可以不连续,甚至可以零散的分布在内存的任意位置。(这里就是和顺序表的一个区别)。这里需要注意的是在构造一个单链表时,就是向里面插入元素时,存在两种方法:头插法和尾插法。在下面的代码实现中特意指出。#include <iostream> using namespace ...原创 2019-10-16 19:37:01 · 266 阅读 · 0 评论 -
《数据结构》线性表-顺序表
线性表的顺序存储结构称为顺序表,其基本思想就是用一段地址连续的存储单元依次存储线性表的数据元素。如何来实现通常用一维数组来实现顺序表,也就是把线性表中相邻的元素储存在数组中相邻的位置,从而形成一一对应的关系。需要注意的一点是:C++语言中数组下标是从0开始的,而线性表中元素的序号是从1开始的,也就是说线性表中的第i个元素存储在数组下标为i-1的位置上。代码实现#include...原创 2019-09-15 16:04:08 · 275 阅读 · 0 评论 -
5.8学习日志 有关数据结构的一点点知识
关于数据结构目前学习的不是深入学习的,只是稍微了解了一下一些基本的概念。栈栈是只能在某一端插入和删除的特殊线性表。 进行删除和插入的一端称栈顶,另一堆称栈底。插入一般称为进栈(PUSH),删除则称为退栈(POP)。 栈也称为后进先出表(LIFO表)。 一个栈可以用定长为N的数组S来表示,用一个栈指针TOP指向栈顶。若TOP=0,表示栈空,TOP=N时栈满。进栈时TOP加1。退栈时TOP减1...原创 2019-05-08 23:37:39 · 98 阅读 · 0 评论 -
最短路径之Dijkstra算法
给定有向网图G=(V,E)和源点v∈V,求从v到G中其余各项点的最短路径。基本思想:将顶点集合V分成两个集合,一类是生长点的集合S,包括源点和已经确定的最短路径的顶点,另一类是非生长点的集合V-S,包括所有尚未确定最短路径的顶点,并使用一个待定路径表,存储从当前源点v到每个非生长点v的最短路径。初始时,S只包含源点v,对vi∈V-S,待定路径表为从源点v到vi的有向边。然后在待定路径表中找到...原创 2019-12-02 20:01:47 · 234 阅读 · 0 评论 -
5.22学习日志最短路径算法
最近上课的内容非常多,有些内容有点跟不上了,只能课后自己看了一下。边带有权值的图称为带权图 ,边的权值可以理解为两点之间的距离。一张图中任意两点间会有不同的路径相连。其中最短路径就是连接两点的这些路径中最短的一条。算法Floyed-Warshall算法O(N3)是最简单的最短路径算法,可以计算图中任意两点的最短路径,适用于出现负边权的情况。Dijkstra算法O(N2)用来...原创 2019-05-22 23:31:58 · 133 阅读 · 0 评论 -
利用广度优先搜索来解决最短路径问题
今天写的内容是在CSDN看到一些有关于优先搜索讲解的文章,然后有一些理解。广度优先搜索和深度优先搜索就是图的遍历,那什么叫做图的遍历呢,从图的某个顶点出发,沿图中的路径依次访问图中所有顶点,并且使得图中所有顶点都恰好被访问一次,这一过程即为图的遍历。需要注意的是,接下来讨论图的遍历时,都是特指在一个连通图上进行遍历。图有最两种常见的遍历方法,就是广度优先搜索和深度优先搜索。简单来说广度...原创 2019-04-20 21:27:17 · 1682 阅读 · 0 评论