摘要: 先上链接:1.http://blog.csdn.net/super_chris/archive/2009/09/22/4581900.aspx 这一篇讲得很细致。 2.http://blog.csdn.net/made_in_chn/archive/2010/04/12/5473871.aspx 大家可以看看文章里的图,注意那是最小堆实现的图。 3.http://blog.csdn.net/midgard/archive/2009/04/14/4070074.aspx 同样讲的很细致的一篇。 4.http://student.zjzk.cn/course_ware/data_struc... 阅读全文
posted @ 2011-05-04 20:56 Avril 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 堆,是一个很有意思的数据结构。逻辑结构是树,一般为二叉树,每个节点的值都大于(小于)其子树中的任意节点。也就是说,使用堆结构的数组 中,元素 是部分有序的。而正是这个特点,使得在堆上,得到最大值(最小值)的时间复杂度为O(1),移除最大值(最小值)、插入元素、改变元素值(或者是删除位置 已知的元素)的时间复杂度为O(lgn)。另外,用堆结构的排序是一种原地的、时间复杂度为O(nlgn)的排序算法。 可以参见动画演示:演示 在优先级队列前先说一下堆排序。 堆排序和归并排序都是时间复杂度为O(nlgn)的排序算法,不同的是,归并排序不是原地排序,它需要额外的n的空间;而堆排序是在原数组中进行的。. 阅读全文
posted @ 2011-05-04 20:06 Avril 阅读(1000) 评论(0) 推荐(0) 编辑
摘要: 分析:设R= {r1,r2,r3,……,rn}是要进行排列的n个元素,Ri=R-{ri}。集合X中的元素的全排列记为perm(X).(ri)perm(X)表示在全排列perm(X)的每一个排列前加上前缀ri得到的排列,R的全排列可归纳定义如下:当n=1,perm(R) = (r) ,其中r是集合R中唯一的元素。当n>1,perm(R)由(r1)perm(R1),(r2)perm(R2),……,(rn)perm(Rn)构成。#include<iostream>usingnamespacestd;voidswap(inta[],inti,intj){inttemp=a[i];a[ 阅读全文
posted @ 2011-05-04 16:09 Avril 阅读(283) 评论(0) 推荐(0) 编辑
摘要: 快速排序(QuickSort) 1、算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 (1) 分治法的基本思想 分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。 (2)快速排序的基本思想 设当前待排序的无序区为R[low..high],利用分治法可将快速排序的基本思想描述为: ①分解: 在R[low..high]中任选一 个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个 阅读全文
posted @ 2011-05-04 14:14 Avril 阅读(529) 评论(0) 推荐(0) 编辑
摘要: 1.递归方法://最大子串的递归解法#include<iostream>#include<cstring>#include<cstdio>usingnamespacestd;intmax(inta,intb){returna>b?a:b;}intlcs(char*a,char*b,inti,intj){if(i==0||j==0)return0;if(*(a+i-1)==*(b+j-1))returnlcs(a,b,i-1,j-1)+1;elsereturnmax(lcs(a,b,i-1,j),lcs(a,b,i,j-1));}intmain(){ch 阅读全文
posted @ 2011-05-04 09:47 Avril 阅读(273) 评论(0) 推荐(0) 编辑