随笔分类 - 算法导论学习笔记
摘要:在将红黑树中某个节点删除时,分几个步骤,首先找到该节点的位置,然后删除该节点,最后调整红黑树。本文代码还存在一个问题没有解决,当连续删除到第3个节点时会出现问题,现在暂时还没找出问题,以后有空慢慢研究。1、找出要删除的节点TREE rb_delete_find(TREE r, int d) // f...
阅读全文
摘要:红黑树的删除分两个部分介绍,第一个部分介绍节点的删除;第二部分介绍在将节点删除后对红黑树的调整,使得其能符合红黑树的性质。1、节点的删除 假如要删除的节点为z,这时,有三种情况: 1)节点z没有孩子节点,这时直接将z节点删除,然后判断节点z是否为黑色的,若z为黑色的,则在删除后会导致黑高不相等。于是...
阅读全文
摘要:红黑树是一棵二叉搜索树,它在每个节点增加了一个存储位来表示节点的颜色。一颗红黑树是满足下面红黑性质的二查搜索树:1)每个节点或是红色的,或是黑色的2)根节点是黑色的3)每个叶节点(NIL)是黑色的4)如果一个节点是红色的,则它的两个子节点都是黑色的5)对每个节点,从该节点到其所有后代叶节点的简单路...
阅读全文
摘要:本文主要介绍KMP算法原理。KMP算法是一种高效的字符串匹配算法,通过对源串进行一次遍历即可完成对字符串的匹配。1、基础知识的铺垫 字符串T的前k(0 =0&& p[i]!=p[k]。则k=next[k-1]。因为数组的下标是从0开始的,所以在比较时使用p[i]与p[k] 比较而不是p[k+1],而...
阅读全文
摘要:问题描述:给定两个字符串T, P。查找字符串P在字符串T中出现的次数。解决方法:典型的KMP算法的题目,在此使用的KMP算法为算法导论上介绍的算法。下一篇文章将详细介绍KMP算法的计算过程。题目链接:http://hihocoder.com/problemset/problem/1015源代码如下:...
阅读全文
摘要:关于快速排序算法,由于其有着很好的平均时间复杂度而得到了广泛的应用。快排的思想:每次从数组中取出一个元素出来,然后将该元素放置到一个合适的位置,使得该元素前面的数都小于或等于该元素,其后面的数都大于或等于该元素。然后在对该元素左右两边的数组进行同样的操作,直到左右两边的元素为空。比如:有数组:538...
阅读全文
摘要:本文转载自:http://www.cnblogs.com/codingmylife/archive/2012/10/21/2732980.html首先,排序算法的稳定性通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj,...
阅读全文
摘要:1、一些概念二叉搜索树:在二叉树中,对任意的节点X其左子树的所有节点都不大于X.key,其右子树的所有节点都不小于X.key。满足此条件的二叉树称为二叉搜索树。对二叉搜索树进行中序遍历将会得到一个单调递增的数列。最优二叉树:在二叉树中,不同的节点都有不同的访问频率。为了减少查找某个节点所需要遍历的次...
阅读全文
摘要:1、一些概念子序列:就是将原序列中的0个或多个元素去掉之后得到的序列。子序列不一定在原序列中连续。比如:X={A,B,D,A,B,C}中的一个子序列可以为:{A,D,B},也可以是: {B,D,B,C}。2、问题描述现有两个序列分别为:X={x1,x2,...,xm}和Y={y1,y2,...,yn...
阅读全文
摘要:适合动态规划求解的最优化问题应该具备两个要素:最优子结构和子问题重叠。1、最优子结构要使用动态规划算法,首先要具有最优子结构的性质,即原问题的最优解包含子问题的最优解。通过逐步求解子问题,最终得到原问题的最优解。在寻找最优子结构的过程中,需要做出一些假设,比如在第一次做出选择时,需要假设已经知道了哪...
阅读全文
摘要:1、问题描述对于不同长度的钢条,其价格各不相同,现给定一个钢条的价格表,以及长度为n的钢条,求如何切割这个长度为n的钢条,使得价值最大。2、样例分析假如现在给定一价格表如下:1 2 3 4 5 6 7 8 9 101 5 8 9 10 17 17 20 24 30现有一个长度为4的钢条,如何切割才能...
阅读全文
摘要:问题描述:给定n个矩阵序列,(A1,A2,A3,A4,...,An). 计算他们的乘积:A1A2A3...An.由于矩阵的乘法运算符合结合律,因而可以通过调整计算顺序,从而降低计算量。样例分析:比如有三个矩阵分别为:A1: 10*100,A2: 100*5,A3: 5*50假如现在按照(A1A2)A...
阅读全文
摘要:在这一篇文章中,首先介绍一下堆的属性和性质。然后讲解一下建堆的过程,最后讲解堆排序。1、堆的介绍 堆的物理存储结构就是一个一维的数组,其数据结构就是一个完全的二叉树。需要注意的是堆中的每个结点不需要后继指针,其父节点和左右孩子结点都可以通过计算得到。假设要计算结点i(i为数组的下标)的父节点和...
阅读全文