数据结构,算法
数据结构,算法
落辰哀
这个作者很懒,什么都没留下…
展开
-
HDOJ-1702 ACboy needs your help again!
ACboy needs your help again!Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 8993 Accepted Submission(s): 4489Problem Description原创 2017-11-14 22:29:45 · 161 阅读 · 0 评论 -
天梯赛 L2-004. 这是二叉搜索树吗?
L2-004. 这是二叉搜索树吗?时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点,其左子树中所有结点的键值小于该结点的键值;其右子树中所有结点的键值大于等于该结点的键值;其左右子树都是二叉搜索树。所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树。给定一个整数键值...原创 2018-02-24 02:58:37 · 218 阅读 · 0 评论 -
博弈论入门
博弈论是二人或多人在平等的对局中各自利用对方策略变换自己的对抗策略,达到取胜目标的理论。博弈论是研究互动决策的理论。博弈可以分析自己与对手的利弊关系,从而确定自己在博弈中的优势,因此有不少博弈理论,可以帮助对弈者分析局势,从而采取相应策略,最终达到取胜的目的。1.巴什博弈(Bash Game)只有一堆n个物品,两人轮流从这堆物品中取物,规定每次至少取一个,最多取m个,最后取光者得胜。显然,如果n=...原创 2018-02-15 11:02:55 · 853 阅读 · 0 评论 -
背包dp
1.01背包问题描述:有N件物品和一个容量为v的背包。第i件物品的重量是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。(这类问题用贪心写结果是错误的,可以试试)基本思路: 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰好放入一个容量为v的背包可以获得的最大价值。其状态转移方程便原创 2018-02-03 23:18:19 · 137 阅读 · 0 评论 -
天梯赛习题L2-005. 集合相似度(STL set)
L2-005. 集合相似度时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越给定两个整数集合,它们的相似度定义为:Nc/Nt*100%。其中Nc是两个集合都有的不相等整数的个数,Nt是两个集合一共有的不原创 2018-01-31 17:37:55 · 196 阅读 · 0 评论 -
天梯赛习题 L2-006. 树的遍历
L2-006. 树的遍历时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第原创 2018-01-31 17:21:32 · 277 阅读 · 0 评论 -
最短路问题
单源最短路径(single-source shortest paths)1.给定带权图G=,其中每条边(vi,vj)上的权W[vi,vj]是一个非负实数。计算从任给的一个源点s到其他各节点的最短路径Dijkstra算法基本思想1.把所有结点分成两组- 第一组U包括已确定最短路径的结点- 第二组V-U包括尚未确定最短路径的结点2.按最短路径长度递增的顺序逐个把第二组的结点加到原创 2017-12-25 19:31:51 · 914 阅读 · 0 评论 -
C/C++回调函数
函数指针(1)概念:指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的物件都是需要加载到内存中,这就决定了程序运行时的任何物件都可以用指针来指向它。函数是存放在内存代码区域内的,它们同样有地址,因此同样可以用指针来存取函数,把这种指向函数入口地址的指针称为函数指针。(2)先来看一个Hello World程序:int main(int argc,char*原创 2018-01-01 19:40:23 · 171 阅读 · 0 评论 -
kmp算法
1.首先,字符串"BBC ABCDAB ABCDABCDABDE"的第一个字符与搜索词"ABCDABD"的第一个字符,进行比较。因为B与A不匹配,所以搜索词后移一位。2.因为B与A不匹配,搜索词再往后移。3.就这样,直到字符串有一个字符,与搜索词的第一个字符相同为止。4.接着比较字符串和搜索词的下一个字符,还是原创 2017-10-26 23:15:16 · 232 阅读 · 0 评论 -
图的遍历
图的遍历(graph traversal)1.给出一个图G和其中任意一个顶点V0,从V0出发系统地访问G中所有的顶点,每个顶点访问而且只访问一次。2.从一个顶点出发,试探性访问其余顶点,同时必须考虑到下列情况- 从一顶点出发,可能不能到达所有其他的顶点,如非连通图- 也可能会陷入死循环,如存在回路的图3.解决方法:为每个顶点保留一个标志位, 算法开始时,所有顶点的标志位置零,在原创 2017-12-25 16:55:27 · 380 阅读 · 0 评论 -
链表
链表(linked list)1.通过指针把它的一串存储结点链成一个链2.存储节点由两部分组成:- 数据域 + 指针域(后继地址)3.分类(根据链接方式和指针多寡)单链表(singly linked list)1.简单的单链表- 整个单链表:head- 第一个结点:head- 空表判断: head == NULL- 当前结点a1 :c原创 2017-12-24 19:49:06 · 269 阅读 · 0 评论 -
顺序表
顺序表1,也称向量,采用定长的一维数组存储结构2.主要特性- 元素的类型相同- 元素顺序地存储在连续存储空间中,每一个元素有唯一的索引值- 使用常数作为向量长度3.数组存储4.读写其元素很方便,通过下标即可指定位置- 只要确定了首地址,线性表中任意数据元素都可以随机存取5.元素地址计算如下所示:- Loc(ki) = Loc(k0)+c*i, c = siz原创 2017-12-24 17:10:54 · 276 阅读 · 0 评论 -
算法的复杂性
算法的渐进分析f(n)=n^2+100n+log10n+10001.数据规模n逐步增大时,f(n)的增长趋势2.当n增大到一定值以后,计算公式中影响最大的就死n的幂次最高的项 - 其他的常数项和低幂次项都可忽略算法渐进分析:大O表示法1.函数f,g定义域为自然数,值域为非负实数集2.如果存在正数c和n0,使得对任意的n>=n0,都有f(n)3.大O表示法:表达函数增原创 2017-12-24 15:49:35 · 1067 阅读 · 0 评论 -
int int& int * int**的区别、联系和用途
1、int;int是C++关键字,表示整型,其大小是32位有符号整型,表示的范围是-2,147,483,648 到 2,147,483,647;在声明和定义变量时使用,它表示的意思是所声明或所定义的变量为整型变量。如果其用于函数参数时,其传递方向为值传递,即只能将实参的值传递给形参,而不能将形参的值传递给实参。例如:通过这种方式去进行交换两个数是无法达到转载 2017-11-26 16:35:16 · 17001 阅读 · 0 评论 -
南阳oj-找球号(一) set的常用用法
找球号(一)时间限制:3000 ms | 内存限制:65535 KB难度:3描述在某一国度里流行着一种游戏。游戏规则为:在一堆球中,每个球上都有一个整数编号i(0<=i<=100000000),编号可重复,现在说一个随机整数k(0<=k<=100000100),判断编号为k的球是否在这堆球中(存在为"YES",否则为"NO"),先答出者为胜。现在有一个人想玩玩这原创 2017-05-17 17:09:01 · 720 阅读 · 0 评论 -
mod与%的区别
mod与%的区别%与mod的区别:%出来的数有正有负,符号取决于左操作数,而mod只能是正;所以要用%来计算mod的话就要用这样的公式:a mod b = (a % b + b) % b;括号中的式子可以把左操作数转变为正数。原创 2017-07-31 20:49:38 · 5507 阅读 · 1 评论 -
for循环语句头的执行顺序
算是温习吧。问题比较基础,但是也比较重要。for循环可以说在每个程序中都少不了的,语句头包括三个部分:初始化,判读条件,一个表达式。但是这三个部分的执行顺序是什么,这是我们所关心的,也是本文所要讨论的。下面先看一段简单的代码。[cpp] view plain copy#include int main(转载 2017-10-14 17:22:39 · 1067 阅读 · 0 评论 -
优先队列
优先队列:顾名思义,首先它是一个队列,但是它强调了“优先”二字,所以,已经不能算是一般意义上的队列了,它的“优先”意指取队首元素时,有一定的选择性,即根据元素的属性选择某一项值最优的出队~百度百科上这样描述的: 优先级队列 是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素 优先队列的类定义 优先队列是0个或多个元素的集合,每个元素都有一个优先权或转载 2017-10-10 20:52:00 · 1107 阅读 · 0 评论 -
vector数组STL习惯用法
C++ STL库中vector素有动态数组的美誉,为什么?我想有以下几个原因:1)它能够弥补普通数组(如“int a[8]”)只能固定长度的缺陷;2)它能弥补一般堆数组(如int *p = new int[n])需要预先知道长度,并且长度不可变的缺陷。 在有些情况下,比如从文件中读取一组未知长度的float型的数据。3)相对STL中其他容器,如list,vector与数组更接近,它内部的数...原创 2018-02-24 03:10:06 · 207 阅读 · 0 评论