上一页 1 ··· 6 7 8 9 10 11 下一页
摘要: huffman1 //C保存所用的字符2 HUFFMAN(C)3 n=length(C)4 把C里的字符按频度从小到大组织成最小二叉堆5 for(i=1;i<n-1;++i)6 取出二叉堆的前两个字符,以他们为左右孩子节点组成一棵树7 该树的根节点频度为二者之和,将该根节点插入二叉堆8 阅读全文
posted @ 2012-02-09 20:30 Cavia 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 使用贪心算法来解决数据结构1 //Eleven activities,sort by finish time already, that's important.2 int Start[]={1,3,0,5,3,5,6,8,8,2,12};//Start time3 int Finish[]={4,5,6,7,8,9,10,11,12,13,14};//Finish time4 int n=11;//Eleven activities5 6 vector<int> Activity;//vector containing activities you choose贪心算法 阅读全文
posted @ 2012-02-09 17:39 Cavia 阅读(440) 评论(0) 推荐(0) 编辑
摘要: 给定一个由n个互异的关键字组成的序列K={k1,k2,...,kn},且关键字有序,对于每一个关键字ki,一次搜索为ki的概率是pi。某些搜索的值可能不在K内,因此还有n+1个虚拟键d0,d1,...,dn代表不再K内的值。d0代表所有小于k1的值,dn代表所有大于kn的值,对于i=1,2,...,n-1,di代表所有位于ki和ki+1之间的值。对每个虚拟键di,一次搜索对应于di的概率是qi。定义在T内一次搜索的期望代价为E=∑(depth(ki)+1)*pi+∑(depth(di)+1)*qi=1+∑depth(ki)*pi+∑depth(di)*qi一颗最优二叉查找树就是期望代价最小的B 阅读全文
posted @ 2012-02-09 15:12 Cavia 阅读(967) 评论(0) 推荐(0) 编辑
摘要: 一个给定序列的子序列就是该给定序列中去掉零个或者多个元素。给定一个序列X={x1,x2,...,xm},对i=0,1...,m,定义X的第i个前缀Xi={x1,x2,...,xi},X0是个空序列。定理:设X={x1,x2,...,xm}和Y={y1,y2,...,yn}为两个序列,并设Z={z1,z2,...,zk}为X和Y的任意一个LCS。(1) 如果xm=yn,那么zk=xm=yn,且Zk-1是Xm-1和Yn-1的一个LCS(2) 如果xm!=yn,那么zk!=xm蕴含Z是Xm-1和Y的一个LCS(3) 如果xm!=yn,那么zk!=yn蕴含Z是X和Yn-1的一个LCS定义c[i][j] 阅读全文
posted @ 2012-02-07 10:34 Cavia 阅读(336) 评论(0) 推荐(0) 编辑
摘要: 矩阵链乘法问题:给定n个矩阵构成的一个链<A1,A2,...,An>,其中i=1,2,...,n,矩阵Ai的维数为pi-1 X pi,对成绩A1A2...An以一种最小化标量乘法次数的方式进行加全部括号两个矩阵相乘对于AiAi+1...Aj,设m[i][j]为计算矩阵Ai..j所需的标量乘法运算次数的最小值,可知m[i][i]=0。则求m[i][j]的递归定义为:m[i][j]=0(if i==j) or min{m[i][k]+m[k+1][j]+pi-1pkpj}(if i<j and i=<k<j)下面的程序利用动态规划自底向上计算最小乘法运算次数,设m[i 阅读全文
posted @ 2012-02-06 20:32 Cavia 阅读(947) 评论(0) 推荐(0) 编辑
摘要: 全局变量 1 /* 2 There are 2 lines, each line has 5 station. 3 Pass only one station per line, from left to right. 4 Find the fastest way from enter to exit. 5 Dynamic Programming 6 */ 7 8 //enter price per line 9 int e[]={2,4};10 11 //exit price per line12 int x[]={3,6};13 14 //price per station15 in... 阅读全文
posted @ 2012-02-06 15:58 Cavia 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 左旋&&右旋Left Rotate 1 LEFT-ROTATE(T,x) 2 y=RIGHT(x) 3 RIGHT(x)=LEFT(y) 4 if(LEFT(y)!=NIL(T)) 5 P(LEFT(y))=x 6 P(y)=P(x) 7 if(P(x)==NIL(T)) 8 Root(T)=y 9 else if(LEFT(P(x))==x)10 LEFT(P(x))=y11 else12 RIGHT(P(x))=y13 LEFT(y)=x14 P(x)=y15 16 Right... 阅读全文
posted @ 2012-02-04 14:28 Cavia 阅读(191) 评论(0) 推荐(0) 编辑
摘要: BST的定义1 //Definition of a Binary Search Tree2 typedef struct BST3 {4 int value;5 struct BST* left;6 struct BST* right;7 }BST; 8 BST* root=new BST;初始化 1 /*Initialization of a BST, based on values in a vector. 2 First element of the vector fills the root, then others will be in the proper... 阅读全文
posted @ 2012-01-31 18:48 Cavia 阅读(284) 评论(0) 推荐(0) 编辑
摘要: Q:我们希望通过利用在一个非常大的数组上直接寻址的方式来实现字典。开始时,该数组中可能包含废料,但要对整个数组进行初始化是不实际的,因为该组的规模太大。请给出在大数组上实现直接寻址字典的方案。每个存储的对象占用O(1)空间;操作SEARCH、INSERT和DELETE的时间为O(1);对数据结构初始化的时间为O(1)。A:增加两个动态数组,S和S',类似于栈,初始化时都为空,当某个关键字变成有效时,压入数组,其最大大小为实际存储在字典中的关键字数目。记直接寻址表为T,当某个关键字k变有效时,T[k]里存储S和S'的索引i,即T[K]=i;S[i]里存储那个有效的关键字k,即S[ 阅读全文
posted @ 2012-01-20 20:51 Cavia 阅读(839) 评论(0) 推荐(0) 编辑
摘要: We simply allocate a large contiguous block of memory using malloc() or global new, or by delaring a global array of bytes. A pointer to the top of the stack is maintained. The top pointer is initialized to the lowest memory address in the stack.Each allocation request simply moves the pointer up by 阅读全文
posted @ 2012-01-20 10:00 Cavia 阅读(323) 评论(0) 推荐(0) 编辑
上一页 1 ··· 6 7 8 9 10 11 下一页