自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(197)
  • 资源 (2)
  • 收藏
  • 关注

原创 平衡二叉树(AVL树)的查找,插入和删除

1,http://blog.csdn.net/zzuchengming/article/details/49824561这是我转载的一个讲解AVL树的文章,思路很好,内容也很清晰,这里基础知识不再赘述!2,下边是我参考这篇文章写的代码,发现了其中的一个小错误!#include "stdafx.h"#include using std::cin;using std::cout;usi

2015-11-15 22:41:27 1422 1

转载 一步一步写平衡二叉树(AVL树)

转载:http://www.cppblog.com/cxiaojia/archive/2012/08/20/187776.html平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树。1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL树。平衡二叉树要求对于每一

2015-11-13 22:27:13 831 6

原创 二叉搜索树(二叉排序树,二叉查找树,二叉检索树)的查找,插入,删除

1,—二叉搜索树定义?—(1)每个节点有一个唯一的key值,且所有结点互不相同;(2)—左子树所有key值小于根的key值;(3)—右子树所有key值大于根的key值;—(4)左右子树都是二叉搜索树。这就是一棵二叉搜索树。2,二叉搜索树的查找操作:—(1)与根结点的key值比较,相等则 查找成功;—(2)小于则查找左子树;(3)—大于则查找右子树。3,二

2015-11-13 17:28:51 3600

原创 动态规划求最长递增子序列(longest increasing subsequence)

1,什么是动态规划?在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。当然,各个阶段决策的选取不是任意确定的,它依赖于当前面临的状态,又影响以后的发展,当各个阶段决策确定后,就组成一个决策序列,因而也就确定了整个过程的一条活动路线,这种把一个问题看作是一个前后关联具有链状结构的多阶段过程就称为多阶段

2015-11-04 22:00:28 6200

转载 动态规划解最长公共子序列问题

转载地址:http://blog.csdn.net/yysdsyl/article/details/4226630动态规划法经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加。为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有

2015-11-04 10:58:50 644

原创 从左到右升序,从上到下升序的元素互异的二维数组元素查找问题

1.问题定义:什么叫做从左到右升序,从上到下升序的元素互异的二维数组元素查找问题?即在每一行上递增,在每一列上也递增的互异的二维数组上查找一个元素是否在该二维数组上。右图即是一个这样的二维数组:2.解决方法。(1)很容易想到的就是遍历一遍,时间复杂度为O(n2);(2)就是在每一行上做一个二分查找,总共n行,时间复杂度为O(nlogn);(3)就是从对角线角度出发,总共

2015-10-28 22:04:57 1801

转载 参数传递二维数组

转载地址:http://blog.csdn.net/yunyun1886358/article/details/5659851   今天在论坛上有朋友提问:声明函数如下void function(int** pInt),意图是想参数传递一个二维数组。于是就定义了一个二维数组,比如 int[1][1],然后调用函数。结果如何?当然是失败了,编译器提示:cannot convert param

2015-10-28 20:28:11 365

原创 主元素问题求解

1,主元素问题描述:即在数组中出现次数大于总数一半的元素。2,当数组元素之间可以有序时用求中位数的方法解决,因为若存在主元素,那么它一定会在中位数上出现。中位数:数列排序后位于最中间的那个数,如果一个数列有主元素,那么必然是中位数。求一个数列有没有主元素,只要看中位数是不是主元素。所以难点在求中位数上,如果使用排序算法后,自然可以求得中位数,但一般时间复杂度为O(nlogn);

2015-10-27 12:09:23 4173

原创 最大子数组(最大连续区间和)问题

1,应用背景:最大子数组的问题可以用到股票市场,比如想得知在一段时间内怎么让股票买进卖出后的利益最大。就可以转化为最大子数组问题。2,解决方法:(1)暴力枚举法,O(n3)#include "stdafx.h"#include #include #includeusing namespace std;//暴力枚举法,O(n^3)#define AFFINITY -65

2015-10-22 22:17:30 3191

转载 关于函数返回值为数组的时候的问题解析

转载地址:http://www.cnblogs.com/micky-zhou/archive/2012/08/08/2628773.html用函数返回值来传递动态内存这种方法虽然好用。但是常常有人把return语句用错了。   我们强调一定不要用return语句返回指向“栈内存”的指针,因为栈内存空间在函数结束后被释放了。1 我在用g++编译如下程序的时候,使用的命令是

2015-10-22 21:57:07 2146

原创 Kruskal算法求最小生成树

1.Kruskal的思想是:先把n个顶点分成n个单独的连通分量,把边用堆排序或者别的排序排成非递减序列;一次从中拿出最小的边,判断是不是连接两个不同的连通分量,若是,则该边是一个最小生成树的边,否则往下找次小的边,继续,直至找到n-1条边为止。难点:怎么判断一条边是不是连接两个不同的连通分量,在网上看了一些资料,大多是用并查集来实现。具体为:(1)维持一个father【】数组,

2015-10-16 09:05:47 1042

原创 Prim实现最小生成树

1,什么是最小生成树?用连通网(图)表示n个城市以及n个城市间可能设置的通信线路,其中网的顶点表示城市,边表示两城市之间的线路,带有权值。对于这样的一个连通网,找n-1条边使得这n个城市连通,这就是一颗生成树,这样的生成树很多,我们要找总的权值最小的树,即为最小生成树。2,应用背景?在n个城市间建立耗费经费最小的通信网。3,存在方法:Prim和Kruskal方法;主要利用了简称为M

2015-10-14 22:39:23 690

转载 windows与Linux间远程拷贝文件(pscp)

从http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html下载pscp,将其放入windows的system32文件夹下说明:dev为linux的用户名,192.168.68.248为远程Linux主机ip地址。(一)上传1.开始→运行→cmd进入到dos模式 输入以下命令pscp D:\java\a

2015-10-13 19:03:50 3647

原创 分别使用Kahn和DFS实现拓扑排序

1,先了解什么是偏序?偏序就是图中存在无先后顺序的顶点对。全序即找不到这样的顶点对。2,什么是拓扑排序?把图由偏序变成全序的操作即是拓扑排序。前提是有向无环图,拓扑才能成功。3,Kahn算法思想:先把入度为0的点入栈,每次从中出栈一个顶点,删除从它出发的边,相应顶点的入度减少1,若有入度为0的点,则入栈,重复至栈为空。4,DFS思想:前提是有向无环图,因为最先完成DFS的顶点恰

2015-10-12 22:43:35 941

转载 外部排序技术之多路归并

转载地址:http://blog.chinaunix.net/uid-25324849-id-2182916.html外部排序技术之多路归并重点:败者树的创建调整函数1.外部排序概述外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。外部排序最常用的算法是

2015-10-12 09:24:24 576

原创 读鸟哥的Linux后对操作系统的初识

一.先了解一下硬件方面的知识。从外观上说,一般计算机分为以下三个部分:    输入单元:包括键盘、鼠标等; 主机部分:这个就是系统单元,被主机机壳保护住了,里面含有 CPU 和主存储器等; 输出单元:例如屏幕、打印机等等。整部主机的重点在于中央处理器 (Central Processing Unit, CPU),CPU为一个具有特定功能的芯片, 里头含有微指令集,如

2015-10-10 21:39:58 1229

转载 C++编程对缓冲区的理解

转载地址:http://developer.51cto.com/art/201107/277186.htm下面介绍缓冲区的知识。一、什么是缓冲区缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区

2015-10-09 22:21:17 633

转载 探讨C++内存回收

转自:http://club.topsage.com/thread-541343-1-1.html3.1 C++内存对象大会战  如果一个人自称为程序高手,却对内存一无所知,那么我可以告诉你,他一定在吹牛。用C或C++写程序,需要更多地关注内存,这不仅仅是因为内存的分配是否合理直接影响着程序的效率和性能,更为主要的是,当我们操作内存的时候一不小心就会出现问题,而且很多时候,这些问题

2015-10-09 11:24:10 2044

原创 图相似性相关论文阅读总结

SimRank 是在有向图中测量顶点对间相似性的重要措施。SimRank 是一个评估任意两个对象之间相似性的模型,核心思想是:如果两个对象的引用是相似的,那么这两个对象也是相似的。它的定义有两种:(1),其中NI(u)表示结点u的所有入邻居结点,c是一个属于(0,1)的阻尼系数。(2),另一种定义是基于随机冲浪匹配模型的。其中T是一条随机路径的长度;Pft(u,

2015-10-08 17:34:41 1153

转载 Trie树和后缀树讲解及应用

后缀数组原理及应用详解     在pongba的讨论组上看到一道Amazon的面试题:找出给定字符串里的最长回文。例子:输入XMADAMYX。则输出MADAM。这道题的流行解法是用后缀树(Suffix Tree)。这坨数据结构最酷的地方是用它能高效解决一大票复杂的字符串编程问题: 1.在文本T里查询T是否包含子串P(复杂度同流行的KMP相当)。2.文本T里找出最长重复子串。比如

2015-09-26 22:03:53 1990

原创 2路插入排序实现

1,2路插入排序的思想:在折半插入排序的基础上改进,目的是减少排序过程中激动记录的次数,既然是在折半的基础上,那么应该也能减少查找操作。具体做法:另设一个和原数组L同类型的数组D,将L[1]赋值给D[0],并将D[0]看成是在排好序的序列中处于中间的位置,即当L中来一个数和D[0]比较,大往D[0]后放,小往前放,这时候把D看成是个循环向量。因为在以D[0]分隔的两边都是有序序列,我们

2015-09-24 10:23:25 984

原创 堆以及堆排序实现

1.今天实现了一下堆排序,这里的堆是指二叉堆,至于二项堆和斐波那契堆以后再说。先看二叉堆的定义:二叉堆是完全二叉树或近似完全二叉树。满足特性是:父亲节点的值大于等于(小于等于)左右孩子的值,并且左右子树也是二叉堆。对应的二叉堆是大顶堆(小顶堆)。二叉堆是完全二叉树,可以用线性表来存储。2.实现堆排序时的想法:(1)一个关键点是堆的调整,调整的时候一定要注意先找到左右孩子中较...

2015-09-22 11:41:23 622

原创 static的作用

1.static 的一个最重要的作用是:隐藏。例如:我在a.h中的内容为:#pragma onceclass a{public:a(void);~a(void);//void msg();};void msg();在a.cpp中的内容为:#include "StdAfx.h"#include "a.h"#includeusing name

2015-09-21 20:30:31 360

原创 c++语法小知识2

1.operator的初步认识。operator是c++中的关键字,是一个重载操作符,为什么要使用重载操作符呢?对于系统的所有操作符,一般情况下,只支持基本数据类型和标准库中提供的class,对于用户自己定义的class,如果想支持基本操作,比如比较大小,判断是否相等,等等,则需要用户自己来定义关于这个操作符的具体实现。比如,判断两个人是否一样大,我们默认的规则是按照其年龄来比较,所以,在

2015-09-21 19:00:41 341

原创 calloc和malloc/free以及new/delete相关知识

calloc/free和malloc/free是c/c++语言中的标准库函数,new/delete是c++运算符,都可以用来申请动态内存和释放内存。1. malloc/freemalloc 的函数原型为:void * malloc(int size);说明:malloc向系统申请分配指定size个字节的空间,返回类型是void *类型,意思是指返回的是未确定类型的指针,c/c++规定v

2015-09-19 21:07:49 1249

原创 在XML数据库中高效的关键字搜索求SLCAs

1.首先了解什么是XML?XML是Extensible Markup Language的缩写,是一种类HTML的可扩展标记语言,它的设计宗旨是传输数据,而不是显示数据,XML标签没有被预定义,可以自定义标签。2.XML与HTML的区别?XML 被设计为传输和存储数据,其焦点是数据的内容。HTML 被设计用来显示数据,其焦点是数据的外观。HTML 旨在显示信息,而 XML 旨在传

2015-09-18 21:52:18 1481

原创 c++语法小知识1

1,#define 不是一个执行语句,后边不用加分号2,struct                                       { char data; int cur;}node[10];与typedef struct{char data;int cur;}node[10];的区别。前面那个是定义了一个名为node规模为10的结果体数组,后面那个是用type

2015-09-06 14:46:32 503

原创 静态链表实现

1,有些高级语言中没有“指针”数据类型,只能用数组来模拟线性链表的结构,数组元素中的指针“域”存放的不是元素在内存中的真实地址,而是在数组中的位置。这样的链表称为静态链表。2,静态链表是用数组实现的,是顺序的存储结构,在物理地址上是连续的,而且需要预先分配大小。动态链表是用申请内存函数(C是malloc,C++是new)动态申请内存的,所以在链表的长度上没有限制。动态链表因为是动态

2015-09-06 14:18:16 1225

原创 快速排序实现和改善

1,快速排序的一个关键是找枢轴,我的处理方式是将起始位置和中间位置以及最后位置的值进行比较取中间值,如果枢轴不在起始位置可以交换后统一只考虑枢轴在起始位置时的处理方式,因为枢轴不同,处理方式有点小差异。2,另一改善点是如果有和枢轴相等的数据,在一次快排后应该和枢轴放一起,这样下一次快排的规模会变小,这在数据集中有很多相同数据时很有用。处理方式是在遍历过程中遇到比枢轴大和小的数据还是交换,遇到相...

2015-09-01 09:10:23 871

原创 直接插入排序和折半插入实现

1,初写的代码,浪费了空间#include "stdafx.h"#include#include#includeusing namespace std;int _tmain(int argc, _TCHAR* argv[])//缺陷:浪费了空间!{ cout> num; int *a = new int[num]; srand(time(0)); for(in

2015-08-26 17:10:37 800

原创 归并排序实现

1,我认为归并排序是分治思想的运用,先是把要排序的数列分成两半,分别对这两半进行归并排序,一步步分下去,当分到规模为1时,开始合并两个已经有序的数组。2,主要的代码是两个已经有序的数组的合并,其中涉及的有空间申请的问题和哨兵的使用。具体看代码:#include "stdafx.h"#include#include#includeusing namespace std;

2015-08-26 16:43:17 773

原创 c++中常用的计算程序运行时间的方法

方法1:计时函数是clock(),而与其相关的数据类型是clock_t(头文件是time.h)。函数定义原型为:clock_t clock(void);这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock)。clock_t是一个长整形数。另外在time.h文件

2015-08-25 12:33:57 2879

转载 如何在csdn博客中粘贴代码和文本

如何将自己的代码贴上去显示这种效果?方法很简单:【1】、将CSDN的博客编辑功能中找到【源代码】即图标              【2】、在你要贴代码的前面加上如下一句话:                其中class为可以改成你自 己贴得语言类 在你点击上边那个图案后,你可以编辑文本,当你要粘贴代码时就在代码前加上这句代码,当你要粘贴的代码结束

2015-07-07 21:02:41 3013

原创 双DFS求强连通分量

用双DFS实现强连通分量是3个方法中比较好理解的。注意事项:1.读入文件时,我用是fstream,流的方式读入!2.如果是数据集中没有别的多余符号,可以直接读入。若是由逗号等符号分隔开,我用的是CString中的readstring来按行读入,需引入头文件.在按行截取,用到find()函数,TrimLeft()和TrimRight()函数!3.按行读入数据后建立正反两个邻接表!按头插法建立效率更高

2015-07-07 20:43:43 1644

转载 简单实现哈希表,适合初学者看

hash表,有时候也被称为散列表。个人认为,hash表是介于链表和二叉树之间的一种中间结构。链表使用十分方便,但是数据查找十分麻烦;二叉树中的数据严格有序,但是这是以多一个指针作为代价的结果。hash表既满足了数据的查找方便,同时不占用太多的内容空间,使用也十分方便。    打个比方来说,所有的数据就好像许许多多的书本。如果这些书本是一本一本堆起来的,就好像链表或者线性

2015-05-06 10:09:51 2745

转载 进程和线程关系及区别

1.定义进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.2.关系

2015-05-04 11:12:22 419

原创 求强连通分量的双DFS,Tarjan和Gobow算法详解

1.强连通分量-----双DFS算法思想:对一个有向图作两遍DFS,第一遍DFS能确定图中每个顶点的DFS完成时间,第二遍DFS从第一遍DFS完成时间的逆序开始遍历,这时得到的一棵棵深度优先搜索树就是一个个对应的强连通分量。举例:对于下面这个有向图,我们以C为源节点进行第一遍DFS,可以得到每一个顶点的 (访问时间/完成时间).也就是我们能得到顶点DFS完成时间,逆序为:b->e-

2015-03-25 09:46:41 2080 3

Kruskal实现最小生成树代码

Kruskal实现最小生成树,其中用并查集判别一条边是否是在同一连通分量中!

2015-10-29

xml关键字查询求SLCA代码

是对论文Efficient Keyword Search for Smallest LCAs in XML Databases的部分实现!

2015-10-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除