• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
 






richardcpp

 
 

Powered by 博客园
博客园 | 首页 | 新随笔 | 联系 | 订阅 订阅 | 管理
上一页 1 2

2012年10月30日

KMP
摘要: KMP算法之所以叫做KMP算法是因为这个算法是由三个人共同提出来的,就取三个人名字的首字母作为该算法的名字。其实KMP算法与BF算法的区别就在于KMP算法巧妙的消除了指针i的回溯问题,只需确定下次匹配j的位置即可,使得问题的复杂度由O(mn)下降到O(m+n)。在KMP算法中,为了确定在匹配不成功时,下次匹配时j的位置,引入了next[]数组,next[j]的值表示P[0...j-1]中最长后缀的长度等于相同字符序列的前缀。对于next[]数组的定义如下:1)next[j]=-1 j=02)next[j]=max k:0<k<j P[0...k-1]=P[j-k,j-1]3)nex 阅读全文
posted @ 2012-10-30 11:18 richardcpp 阅读(213) 评论(0) 推荐(0)
 

2012年10月23日

Doing Homework again
摘要: 贪心算法 HDU1789 Doing Homework again题目大意:Ignatius有N项作业要完成。每项作业都有限期,如果不在限期内完成作业,期末考就会被扣相应的分数。给出测试数据T表示测试数,每个测试以N开始(N为0时结束),接下来一行有N个数据,分别是作业的限期,再有一行也有N个数据,分别是若不完成次作业会在期末时被扣的分数。求出他最佳的作业顺序后被扣的最小的分数。(每个作业费时一天)。解题思路:求被扣分数最少。这是一道贪心算法。于是第一个想法就是:使用一个结构体保存每门作业的限制时间deadline和被扣的分数reduce。对限制时间排序,限制越大的要越先完成,若托限制时间一样 阅读全文
posted @ 2012-10-23 16:41 richardcpp 阅读(283) 评论(0) 推荐(0)
 
sort()
摘要: struct node { int l; int w; bool visited; };int cmp( const int &a, const int &b ){ //单关键字, 降序排序 if( a > b ) return 1; else return 0;}bool cmp(const node &a, const node &b)//双关键字 ,先按l升序排序,如果l相同,则按w升序排序。{ if(a.l!=b.l) { return a.l<b.l; } else { return a.w<b.w; } } sort(wood, w 阅读全文
posted @ 2012-10-23 11:38 richardcpp 阅读(179) 评论(0) 推荐(0)
 

2012年10月18日

C指针的用法总结
摘要: char*p,**p,***p;charp[],p[][],p[][][];char*p[],*p[][],**p[],**p[][],*(*p)[],(**p)[],(**p)[][];void (*pFun)(int i);大神们看到这些东西脑袋里一定像蓝天白云一样清晰明了。。。(1)关于指针与数组的存储a、指针和数组在内存中的存储形式 数组p[N]创建时,对应着内存中一个数组空间的分配,其地址和容量在数组生命周期内一般不可改变。数组名p本身是一个常量,即分配数组空间的地址值,这个值在编译时会替换成一个常数,在运行时没有任何内存空间来存储这个值,它和数组长度一起存在于代码中(应该是符... 阅读全文
posted @ 2012-10-18 15:16 richardcpp 阅读(2120) 评论(0) 推荐(0)
 

2012年10月15日

C++定义动态数组
摘要: 首先:为什么需要动态定义数组呢? 这是因为,很多情况下,在预编译过程阶段,数组的长度是不能预先知道的,必须在程序运行时动态的给出 但是问题是,c++要求定义数组时,必须明确给定数组的大小,要不然编译通不过 如: int Array[5];正确 int i=5; int Array[i]; 错误 因为在编译阶段,编译器并不知道 i 的值是多少 那么,我们该如何解决定义长度未知的数组呢? 答案是:new 动态定义数组 因为new 就是用来动态开辟空间的,所以当然可以用来开辟一个数组空间 这样,下面的语句: int size=50; int *p=new int[size]; 是正确的 但是二... 阅读全文
posted @ 2012-10-15 15:49 richardcpp 阅读(65824) 评论(2) 推荐(3)
 

2012年10月13日

二分查找
摘要: Jon Bentley:90%以上的程序员无法正确无误的写出二分查找代码。也许很多人都早已听说过这句话,但我还是想引用《编程珠玑》上的如下几段文字:“二分查找可以解决(预排序数组的查找)问题:只要数组中包含T(即要查找的值),那么通过不断缩小包含T的范围,最终就可以找到它。一开始,范围覆盖整个数组。将数组的中间项与T进行比较,可以排除一半元素,范围缩小一半。就这样反复比较,反复缩小范围,最终就会在数组中找到T,或者确定原以为T所在的范围实际为空。对于包含N个元素的表,整个查找过程大约要经过log(2)N次比较。//首先要把握下面几个要点: //right=n-1 => while(lef 阅读全文
posted @ 2012-10-13 21:21 richardcpp 阅读(292) 评论(0) 推荐(0)
 

2012年10月11日

递归
摘要: 对于递归问题的分析:1. 先弄清楚递归的顺序。在递归的实现中,往往需要假设后续的调用已经完成,在此基础之上,才实现递归的逻辑。在该题中,我们就是假设已经把后面的长度计算出来了,然后继续考虑后面的逻辑;2. 分析清楚递归体的逻辑,然后写出来。比如在上面的问题中,递归体的逻辑就是如何计算两边最长的距离;3. 考虑清楚递归退出的边界条件。也就说,哪些地方应该写return。注意到以上 3 点,在面对递归问题的时候,我们将总是有章可循。 阅读全文
posted @ 2012-10-11 09:53 richardcpp 阅读(396) 评论(0) 推荐(0)
 
二叉树的最大距离
摘要: 问题定义如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。对于任意一个节点,以该节点为根,假设这个根有k个孩子节点,那么距离最远的两个节点U与V之间的路径与这个根节点的关系有两种。1).若路径经过Root,则U和V属于不同子树的,且它们都是该子树中到根节点最远的节点,否则跟它们的距离最远相矛盾2).如果路径不经过Root,那么它们一定属于根的k个子树之一,并且它们也是该子树中相距最远的两个顶点因此,问题就可以转化为在字数上的解,从而能够利用动态规划来解决。设第K棵子树中 阅读全文
posted @ 2012-10-11 09:06 richardcpp 阅读(788) 评论(0) 推荐(0)
 

2012年10月10日

重建二叉树-Tree Recovery
摘要: Little Valentine liked playing with binary trees very much. Her favorite game was constructing randomly looking binary trees with capital letters in the nodes. This is an example of one of her creations:D/ \/ \B E/ \ \/ \ \A C G//FTo record her trees for future generations, she wrote down two string 阅读全文
posted @ 2012-10-10 17:29 richardcpp 阅读(549) 评论(1) 推荐(1)
 
上一页 1 2