自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 动态规划之最长公共子序列问题(LCS)

该问题的描述略。LCS问题同样具有最优子结构(),子问题也出现重叠,但又有所不同——它可以根据条件来排除子问题。建立一个二维数组res来存储LCS的长度,即res[i][j]表示长度为i的字符串X与长度为j的字符串Y的最长公共子序列的长度。经过分析可以得出如下公式:res[i][j]=0      i=0或j=0;  res[i-1][j-1]+1若i,j>0且X[i]=Y

2017-07-19 15:43:22 228

原创 数组、二维数组与指针

鉴于下面要解决的LCS问题要用到2维数组,这里就对 数组与指针,二维数组与指针做一个简单的阐述。比如说我们建立一个数组int test[3];它代表存储了3个int类型的组合,而且3个int类型的数字在内存中是紧靠在一起的,然后将数组名解释为第一个int类型数的地址(就是指针咯),即test等于&test[0]。那对于二维数组而言,情况又出现了哪些变化呢?见图:

2017-07-19 10:55:18 185

原创 动态规划之钢条问题

先给出概述:动态规划通常是用来解决最优化问题的。最优化问题指的是该类问题有很多可行解,我们希望找到最优解(最大或最小的解),更具体的来说:要得到规模为n的问题的最优解,那么会用到规模为n-1的相似问题的最优解。下面我们将通过钢条切割问题来详细描述什么是动态规划,动态规划又是如何操作的。钢条问题描述:给定一段长度为n的钢条和它对应的收益表Pi(i=1--n),问如何切割钢条(切割钢条本身不计

2017-07-18 10:56:20 306

原创 数据结构之平衡二叉树(红黑树)

接上文。我们介绍二叉树时,强调了它的优点:在它上面做任何字典操作的时间跟树的高度成正比,那单纯的二叉树并不能保证树的高度最低,于是人们就设计了诸如红黑树之类的平衡二叉树——使得一定节点的情况下树的高度最低。到这里其实数据怎么保存就已经基本

2017-07-17 21:07:00 215

原创 数据结构之二叉搜索树

什么是二叉搜索树呢?它与别的数据结构相比其优势又是什么呢?一颗二叉搜索树就是以一颗二叉树来组织和存储数据的,如图所示(图a是包含6个节点、高度为2的二叉树,图b是包含相同关键字、高度为4的低效二叉树)。对比博文前面所介绍的链表,二叉树也是可以用结构体来实现,只不过每个节点里面不仅要保存数据本身的关键字(称之为key),还要有左节点(左孩子left)、右节点(右孩子right)、父节点(p);根

2017-07-17 08:59:17 168

原创 数据结构之链表

为什么要单独把链表放出来呢?因为不同于栈和队列的基于数组实现,链表是通过保存在每个对象(这里我们用结构体)里面的指针来形成顺序结构的,这也就意味着它是不支持随机访问的(随机访问是指在常量的时间内访问任何一个元素)。但肯定有它的优势:从链表里删除(ListDelete)或插入(ListInsert)任何位置的元素的时间将是常量。下面代码通过结构体来实现链表以及删除(ListDelete)或插

2017-07-14 14:58:22 133

原创 基本数据结构——栈、队列和链表

栈(stack)实现的是一种依照先进先出(last—in,first-out,LIFO)原则的结构,也就是说最后放入的元素总是最先被取出。队列(queue)实现的是一种依照先进先出(first-in,first-out,FIFO)原则的结构,也就是说最先放入的元素总是最先被取出。至于为什么会存在这两种如此简单的结构,是因为我们在日常生活中经常采用上面的两个原则来处理一些数据。栈上的插入

2017-07-14 14:55:34 269

原创 排序算法之终章总结与提升

至此我们介绍了插入排序、(冒泡排序)、归并排序、堆排序以及快速排序,除此之外还有基数排序,计数排序和桶排序。其中冒泡排序效率低且没有插入排序有代表性,就不做过多描述。对于小规模的输入,插入排序是一种非常快的原址排序算法(原址指的是输入数组中仅有常数个元素需要在排序过程中存储到数组之外)。归并排序的效率会更高,但它采用的Merge过程并不是原址的,也就是说会占用更多的空间。堆排序是一

2017-07-13 11:32:23 221

原创 排序算法之快速排序

我们先概述下快速排序的过程:对数组A[p,r]进行排序,第一步将数组A[p,r]分解为三部分:A[p,q-1],A[q+1,r],A[q]其中A[p,q-1]中元素全部小于等于A[q],A[q+1,r]中元素全部大于A[q],这样A[q]这个元素就已经排好序了;第二步对A[p,q-1],A[q+1,r]两个数组递归滴调用该过程就能将A[p,r]数组排好序了。与归并排序相比,我们发现将数组分

2017-07-13 10:44:54 223

原创 排序算法之堆排序

要理解什么是堆排序(heapsort)首先要介绍堆,(二叉)堆是这样的一种可以看成近似完全二叉树的数据结构:采用最大堆,最大堆要满足的要求是对于任意一个节点i中的元素要大于其左孩子和右孩子节点中的元素。这样根节点中所存储的一定是改组元素中的最大元素。如图所示,图(a)表示该种数据结构,图(b)表示实际存储的形式。于是我们对任意节点i,2(i+1)就表示它的左孩子,2(i+1)+1就表示

2017-07-12 14:47:54 171

空空如也

空空如也

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

TA关注的人

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