08 2015 档案
摘要: 给出一个由2*S*(S+1)构成的S*S大小的火柴格。火柴可以构成1x1,2x2...SxS大小的方格。其中已经拿走了几个火柴,问最少再拿走几个火柴可以使得这些火柴无法构成任何一个方格。 本题,采用的是搜索+剪枝来实现。需要做的是保存每个搜索节点的状态,以及通过合理的记录数据,对状态
阅读全文
摘要:搜索搜索算法就是在问题的解空间进行搜索,从而得到可行解或最优解。搜索的每一步,都有一个“状态”,搜索的时候需要找到合理的状态,进行搜索。一次成功的搜索就是在“状态”空间中找到一条从起点到终点的路径(可以想象为一棵树从根节点到某个叶子节点的路径)。1. DFS和BFS搜索一般分为两种:深度优先DFS和...
阅读全文
摘要:题目大意推箱子游戏的基本玩法,求将箱子推到目的地的推动次数最少(并不是人移动总次数)的人移动路径。题目分析求最短路径的搜索问题,使用BFS。注意题目求的是 推动次数最少,因此将箱子移动作为状态,求箱子移动最少次数到达目的地的路径,然后在该路径的拐点基础上再次进行 对人移动的BFS搜索。即BFS套BF...
阅读全文
摘要:C/C++中的变量有左值和右值之分,他们的区别主要如下:(1)左值可以放在赋值号 =的左右两边,右值只能放在赋值号 =的右边(2)在C语言中,有名字的变量即为左值;而函数的运行结果或表达式中间变量即为右值(3)对于内嵌类型(基本类型,即built-intypes),右值是不可以被更改的,也不可以...
阅读全文
摘要:一、安装使用免安装的版本进行安装:1. 解压到安装目录2. 拷贝目录下的 my-default.ini 文件为 my.ini 文件3. 修改my.ini 文件内容为 [client] port=3306 default-character-set=utf8 #客户端字符类型,...
阅读全文
摘要:最近在服务器上使用ubuntu系统,服务器上开启sshd服务,在客户端处使用ssh登录到服务器的时候出现卡顿的现象。在网上搜索了解决方案,主要是:1.修改服务器的 /etc/ssh/sshd_config添加 UseDNS no2.修改服务器的 /etc/ssh/ssh_config添加 GSS...
阅读全文
摘要:哈希 Hash 哈希是一种将复杂数据转换为线性数据从而可以进行随机访问的查找算法。 哈希经常用于对复杂数据(如结构体、对象等)的查找,在使用的时候,需要定义一个Hash函数,将需要查找的复杂对象转化为 整型(或其他简单的数据类型)数据,将得到的数据作为该复杂对象的键值key(如果有多个不同的复杂数据
阅读全文
摘要:昨晚又遭遇了久违的失眠,虽然也不情愿,因为失眠毕竟不舒服,但和曾经失眠最严重的那阵比起来心境好多了:不烦不燥,就静静的等着天亮或睡着。 不过好心境也似乎没有起太大作用,于是两点钟起来看了一部电影《国际市场》。大气的名字让我开始以为这是部动作剧情大片,后来发现“国际市场”只是电影中一个市场的名字,和五
阅读全文
摘要:跳表是平衡树的一种替代的数据结构,和红黑树不同,跳表对树的平衡的实现是基于一种随机化的算法,这样就使得跳表的插入和删除的工作比较简单。跳表是一种复杂的链表,在简单链表的节点信息之上又增加了额外的后继节点指针。这样,单链表每次只能向后移动一个节点,而跳表每个节点有多个后继节点,就可以移动多个不同的距离...
阅读全文
摘要:对于C/C++中的字符指针和字符数组,总是在碰到的时候无法确定而不得不现场测试,来确定末尾是否包含'\0',函数到底如何使用等等。真是劳民伤财,现在总结一下:字符指针的赋值(1)指向一个字符串常量char *src = "abcded"; //这种方式由系统自动给该字符指针指定了一个内存中的位置...
阅读全文
摘要:Treap是一种平衡二叉树,同时也是一个堆。它既具有二叉查找树的性质,也具有堆的性质。在对数据的查找、插入、删除、求第k大等操作上具有期望O(log2n)的复杂度。Treap可以通过节点的旋转来实现其维持平衡的操作,详见旋转式Treap. 而旋转式Treap在对区间数据的操作上无能为力,这就需要非旋...
阅读全文
摘要:左倾堆(或左偏树)和之前记录过的二叉堆一样,是堆的一种;和普通的二叉堆不同,它是一种可合并堆。可合并堆相比于普通的二叉堆在对两个堆进行合并的操作上具有很大的优势:对于基本的二叉堆合并,时间复杂度为O(n), 而对于可合并堆,其时间复杂度为O(log2n).左倾堆性质左倾堆(也叫左偏树),是一种可合并...
阅读全文
摘要:Size Balanced Tree(SBT)是目前速度最快的平衡二叉搜索树,且能够进行多种搜索操作,区间操作;和AVL、红黑树、伸展树、Treap类似,SBT也是通过对节点的旋转来维持树的平衡,而相比其他平衡树,SBT维持平衡所需要的额外数据很少,只需要维持以当前节点为根的子树的大小;且SBT的编...
阅读全文
摘要:红黑树是一种自平衡二叉查找树,具有在最坏情况下查找、插入、删除O(log2n)的复杂度。红黑树中从根节点到任意一叶子节点的最长路径不超过最短路径的两倍,因此是一种近似平衡的二叉树。节点信息红黑树的节点具有如下信息:struct RBNode{ int data; //数据 int color; ...
阅读全文
摘要:vncserver是使用非常方便和广泛的远程桌面服务,配置也相对简单。 下面记录了在centos系统上进行配置vncserver的过程。 安装 查看centos下是否已经安装了vncserver rpm -qa |grep vnc 如果未安装vncserver,则进行安装 yum install v
阅读全文
摘要:AVL是一种平衡二叉树,它通过对二叉搜索树中的节点进行旋转使得二叉搜索树达到平衡。AVL在所有的平衡二叉搜索树中具有最高的平衡性。定义平衡二叉树或者为空树或者为满足如下性质的二叉搜索树:左右子树的高度之差绝对值不超过1左右子树仍然为平衡二叉树定义平衡因子 BF(x) = x的左子树高度 - x的右子...
阅读全文
摘要:Treap是一种动态平衡二叉树结构,具有期望的O(log2n)的复杂度。适用于动态区间数据的查询、更改、维护等操作。题目大意一组数从前向后插入队列中,插入的过程中会有查询,查询当前队列中的第k小的数。题目分析对于数据的查询,可以考虑使用treap这种平衡二叉树来实现。而且treap这种动态平衡树结构...
阅读全文
摘要:题目大意对于二维平面上的n个点,给出点的坐标。定义一个点A覆盖的点的个数为满足以下条件的点B的个数:点B的x #include#define MIN(a, b) a b? a :b#define MAX_NUM 32005#define MAX_NODE 15005struct Point{ int...
阅读全文
摘要:题目大意对于二维平面上的n个点,给出点的坐标。定义一个点A覆盖的点的个数为满足以下条件的点B的个数:点B的x #includeusing namespace std;#define MAX_NODE_NUM 15500struct TreapNode{ int key; int priority; ...
阅读全文
摘要: Treap是一种弱平衡二叉查找树,通过给每个节点赋优先值以及必要时进行节点的旋转来避免一般的二叉查找树退化成一条链,从而具有良好的时间性能。 Treap实现将二叉查找树的高度值期望达到O(logn),这条性质由定理 将一组数据以随机的顺序插入一棵二叉查找树中,树的高度期望为 O(logn)
阅读全文
摘要:题目大意一个数列,每次操作可以是将某区间数字都加上一个相同的整数,也可以是询问一个区间中所有数字的和。(这里区间指的是数列中连续的若干个数)对每次询问给出结果。思路1. 伸展树的一般规律对于区间的查找更新操作,可以考虑使用伸展树、线段树等数据结构。这里使用伸展树来解决。伸展树对数组进行维护的核心思想...
阅读全文
摘要:自己伸展树做的第一个题poj 3580 supermemo.题目大意对一个数组进行维护,包含如下几个操作:ADD x, y, d 在 A[x]--A[y] 中的每个数都增加dREVERSE x, y 将 A[x]--A[y] 中的数进行反转,变为 A[y],A[y-1]....A[x+1],A[x]...
阅读全文
摘要:题目大意一个数列,每次操作可以是将某区间数字都加上一个相同的整数,也可以是询问一个区间中所有数字的和。(这里区间指的是数列中连续的若干个数)对每次询问给出结果。思路对于区间的查找更新操作,可以考虑使用伸展树、线段树等数据结构。这里使用线段树来解决。需要注意的是,对于一个区间的增加操作,如果每次都走到...
阅读全文
摘要:伸展树(Splay Tree)树平衡二叉查找树的一种,具有二叉查找树的所有性质。在性能上又比普通的二叉查找树有所改进:普通的二叉查找树在最坏情况下的查找操作的时间复杂度为O(n)(当二叉树退化成一条链的时候),而伸展树在任何情况下的平摊时间复杂度均为 O(log2n). 特性 旋转 伸展树实现O(l
阅读全文
摘要:二叉搜索树是一类特殊的二叉树,它满足中序遍历得到的结果为序列的顺序排序的特点,在对数据排序、查找等方面有着非常重要用途。性质二叉搜索树满足二叉树的所有性质,同时有着自身的特性。中序遍历的结果为序列的顺序排序节点的左子节点(以及左子树中所有元素)值小于节点的值;节点的右子节点(以及右子树中所有元素)值...
阅读全文
摘要:树是一种非常重要的数据结构,而二叉树是树的最基本的形式。像其他高级的数据结构,如 二叉查找树、平衡二叉树、AVL树、红黑树、splay 树(伸展树)、笛卡尔树、Treap、SBT树等都是以二叉树作为基础。
阅读全文
摘要:笛卡尔树是一种同时满足二叉搜索树和堆的性质的数据结构。 可在一个数组上构造出来(时间复杂度可以达到O(n))。树中节点有几个属性, key(节点元素的大小)、index(节点在原数组中的索引)、left(左子节点)、right(右子节点)、parent(父节点)。性质树中的元素满足二叉搜索树性质,要...
阅读全文
摘要:二叉堆是一种用类似二叉树的形式构建的具有堆的性质的数据结构。堆的性质: (以最大堆为例)堆顶元素为最大元素每个节点的元素值都大于其子女节点的元素值用数组实现堆,建堆的时间复杂度为 O(n)用堆进行排序,时间复杂度为 O(n*lgn)二叉堆实现:(c++)#define MAX_HEAP_SIZE 1...
阅读全文