自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 22.4-5拓扑排序BFS

这个问题和宽度优先搜索很相似,是横向扩展入度为0的节点队列中都是入度为0的元素,将一个元素出队列之前,将与他相连的元素的入度减1,如果为0将新元素入队列#include<stdio.h>#include<stdlib.h>typedef struct edge{ int i; struct edge *next;}edge;typedef struct node{

2016-03-31 18:54:58 293

原创 22.4-2简单路径条数

利用有向无环图的性质,不存在后向边,只存在树边前向边和横向边给节点增加一个属性,即节点到目标节点的简单路径条数考虑节点u v是白色的,则v.count还没有计算,计算v.count,再u.count+=v.countv是黑色的,则将u.count+=v.count,避免重复计算,因此具有动态规划性质v不可能是灰色的算法的复杂度和dfs相同为o(v+e)#include<stdio.h>

2016-03-31 15:51:45 1740

原创 p354拓扑排序

有向无环图为我们提供了一个非常有用的性质,假设有边(u,v),那么u.f>v.f,不论u,v是不是在同一棵树里面因此,算法将每个节点一经完成就加入列表,使得后插入的节点不可能有边指向先插入的节点,这样就完成了拓扑排序typedef struct link_element{ node *pnode; struct link_element *next;}link_element;

2016-03-31 14:05:32 262

原创 p354图的DFS(用栈消除递归调用)

首先看下面的递归代码,留意每层递归的栈需要保存什么变量int dfsvisit(gve G,node *pnode,int *time){ edge *tmp=pnode->next; (*time)++; pnode->d=*time; pnode->color=gray; while (tmp!=NULL) { if (G.g[t

2016-03-31 10:26:59 1506

原创 p349图的DFS

之前都是零零散散知道些DFS(现在还是零零散散),现在发现时间戳这个东西很有用哈 ,可以瞬间判断两个节点在搜索树中的关系,还可以判断边的类型,期待以后发挥用武之地吧写这段代码的感受:之前在写BFS的时候,图的点数啊,边数啊什么的都没有集成在一起,这次首先用一个G里面包括了点数v,边数e,点集g(指针);g[i]是node类型,包括d,f(和书中的意义相同),color,和指向第一条边的指针nex

2016-03-30 20:25:06 296

原创 p349 22.2-7二分图

因为放在宽度优先搜索这一节嘛,在其上稍微添加一点属性(good or not)修改一下就可以了算法的过程是,对当前节点d,扫描所有和d连接的点,对这些点,如果颜色为white(也就是之前没有发现),就把其颜色设为gray,good设为和d相反;如果颜色为gray(也就是之前已经发现且设置过good),就判断其和d的good是否一样,如果一样,没有答案,如果不一样,算法继续写代码的时候一个比较坑爹

2016-03-30 16:00:28 273

原创 p345BFS

把节点染色用以区分状态这种思想还是比较好的注意队列要按引用传递,也就是用指针为了便于判断队列状态,新增一个队列元素个数q.n#include<stdio.h>#include<stdlib.h>#define white 1#define gray 2#define black 3typedef struct node{ int d; int color; s

2016-03-30 10:36:23 299

原创 p(343)通用汇点

i\j 0 1 2 3 4 0 0 0 1 0 1 1 0 0 1 0 0 2 0 0 0 0 0 3 0 0 1 0 0 4 0 0 1 0 0这个算法的运行时间是O(V) - 首先,a[i][i]=0,因此算法走过的路径都在主对角线及以上 - 若a[i]

2016-03-29 09:09:30 521

原创 p(247)赫夫曼编码

算法主要在做的事就是从堆中取出两个元素合并成一个新元素,再插入堆中,同时构建二叉树注意堆中要存下二叉树元素的地址,方便引用#include<stdio.h>#include<stdlib.h>struct node{ int f; struct node *l,*r;};struct heap{ int f; struct node *hnode;};in

2016-03-28 17:42:06 306

原创 (p245)分数背包(O(n))

思路请参考:http://blog.csdn.net/mishifangxiangdefeng/article/details/7748435写起来还是挺麻烦的复杂度为On的原因主要就是1+1/2+1/4+1/8....=2#include#include#define max 1000float v[max+1]={0,60,100,120};int w[max+1]={0,

2016-03-27 17:14:40 901

原创 (p244)01背包问题

#include#define maxn 100#define maxw 1000int w[maxn+1]={0,10,20,30},v[maxn+1]={0,60,100,120},d[maxn+1][maxw+2],n=3,W=50,ans;//现在才知道大数组要声明为全局变量才不会报错int select(int w[],int v[],int n,int W){ int i,

2016-03-27 14:24:59 245

原创 (p241)活动选择

#include#include#define max 1000int GreedyActivitySelector(int s[],int f[],int ans[],int n)//贪心{ int k=0,i,count=0; for (i=1;i<=n;i++) if (s[i]>=f[k]) { ans[count++]=i; k=i; } retur

2016-03-27 09:37:41 263

原创 (p231)15.5-4最优二叉搜索树(n^2和n^3)

对于长度为l的所有子数组的root[i+1][j]-root[i][j-1]+1的和其实就是root[n-l+1][n]-root[1][l]+n-l=o(n),所以两层循环就是n^2,但是并不知道Knuth的结论是怎么来的,希望知道的分享一下^-^/*attention if max set to 1000 will cause segmentation fault*/#include#

2016-03-26 17:55:19 653

原创 (p226)最长单调递增子序列

实际上这应当是贪心算法,d[k]表示[0..i]中长度为k的子串中末尾最小的子串的末尾,因为选择末尾最小的子串,x[i+1]连接到他后面更容易一些,那么,为了让d[k]尽可能小,就要让d[k-1]尽可能小。。。。依次类推,于是需要将小一点的数取代前面的数,以保证后面的可以最小。d[k]是不减的,因此可以用二分查找。具体请看:http://blog.csdn.net/zsc09_leaf/art

2016-03-25 17:26:29 270

原创 (p226)最长单调递增子序列

#include#define max 100int LS(int a[],int f[],int d[],int next[],int n){ int i,j; f[0]=1; for (i=1;i<n;i++) f[i]=0;//初始化值<=1都可以 d[0]=0; for (i=0;i<n;i++) { for (j=0;j<i;j++) if (a[i]>=

2016-03-25 14:28:45 261

原创 (p226)最长公共子序列

#include#include#include#define max 100const char lu[4]={0xe2,0x86,0x96},u[4]={0xe2,0x86,0x91},l[4]={0xe2,0x86,0x90};int LCS_LENGTH(char x[],char y[],int c[][max+1],int b[][max+1],int m,int n){

2016-03-25 09:07:04 276

原创 第一次实验

题目和解答都在代码里:/* * CS:APP Data Lab * * bits.c - Source file with your solutions to the Lab. * This is the file you will hand in to your instructor. * */#include #include #include #in

2016-03-23 23:40:11 7275

原创 p89~p90浮点数部分

#include#include#includetypedef unsigned float_bits;float_bits f2u(float f){ float_bits fb; fb=*((float_bits *)(&f)); return fb;}float u2f(float_bits fb){ float f; f=*((float *)(&fb)); r

2016-03-14 19:25:54 744

原创 (p196)利用顺序统计树求逆序对

只需要将insert里面的while循环改成下面这个样子就行了,思路是insert的时候,节点每往左移动一次,那么说明它比右边的都要小,所以加上右边的数目,而红黑树的旋转并不会影响 while (next!=t->nil) { prev=next; next=new->nn?next->l:next->r; count=new->nn?count+prev->size-next-

2016-03-03 17:16:44 335

原创 (p193)顺序统计数及相关操作

代码和红黑树的基本一样,只是由于多了size属性,需要和color,bh等属性一样,在对其进行操作时需要维护这个属性leftrotate和rightrotate以及insert和delete里面自然要进行维护,这里要说的是,由于维护过程都在前面四个里面操作了,transplant里面并不需要进行维护,另外,尽管delete里面情况较多,实际上还是只需要共用一个维护过程/* * sourc

2016-03-03 16:19:34 231

原创 (175)红黑树及其相关操作

不得不说,红黑树虽然有点难懂,有点麻烦,但这一章的确是非常精彩的一章,看了还想看^-^首先,作者为我们说明了一种思路,定义一种数据结构的基本性质->根据这种结构的基本性质推导它的性能之类的->进行操作时维护这种性质->操作之后仍然满足性质,即具备相应的性能,这种自底而上的思路很有代表性其次,研究本章的算法可以加深我们对于迭代的理解,对于复杂的问题可以从某一时刻入手,研究这一时刻各种可能的状

2016-03-02 10:14:04 242

day1_NOIP基础算法--枚举、递推和递归.ppt

NOIP基础算法--枚举、递推和递归 很有用的哦,看看有好处的

2013-04-16

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

TA关注的人

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