随笔分类 - 数据结构与算法
摘要:传统解法,最直观的解法是O(m+n)。直接merge两个数组,然后求第K大的数字。 如果想要时间复杂度将为O(log(m+n))。我们可以考虑从K入手。如果我们每次能够删除一个一定在第K个元素之前的元素,那么我们需要进行K次,但是如果每次我们都删除一半呢?由于两个数组都是有序的,我们应该充分利用这个
阅读全文
摘要:优先队列是一种用来维护一组元素构成的结合S的数据结构,其中每个元素都有一个关键字key,元素之间的比较都是通过key来比较的。优先队列包括最大优先队列和最小优先队列,优先队列的应用比较广泛,比如作业系统中的调度程序,当一个作业完成后,需要在所有等待调度的作业中选择一个优先级最高的作业来执行,并且也可
阅读全文
摘要:理解Hash 哈希表(hash table)是从一个集合A到另一个集合B的映射(mapping)。 映射是一种对应关系,而且集合A的某个元素只能对应集合B中的一个元素。但反过来,集合B中的一个元素可能对应多个集合A中的元素。如果B中的元素只能对应A中的一个元素,这样的映射被称为一一映射。这样的对应关
阅读全文
摘要:来源:http://blog.csdn.net/turne/article/details/50488378 看数据结构书的时候碰上的内容,我自己将它化成关于级数的题,然后自己算的过程,基本就是等比级数和等差级数的混合内容。 满二叉树来分析折半查找的平均长度 h=层高 n=节点数 看数据结构书的时候
阅读全文
摘要:贪心算法的定义:贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。解题
阅读全文
摘要:上面分析了 根据这张图 推倒出 数学公式。 刚接触 不能一下弄明白。下面结合上面文章的分析。仔细推倒一下 , 一般设置 快指针 速度是 慢指针的2倍。及 快指针每次遍历两个指针, 慢指针每次遍历1个指针。 假设上图 快慢指针 在E点相遇,那 相遇点离循环节点D 之间距离是X. 头结点A 离循环节点D
阅读全文
摘要:转自:http://blog.csdn.net/ns_code/article/details/12977901 二叉树是一种非常重要的数据结构,很多其他数据机构都是基于二叉树的基础演变过来的。二叉树有前、中、后三种遍历方式,因为树的本身就是用递归定义的,因此采用递归的方法实现三种遍历,不仅代码简洁
阅读全文
摘要:本文转自http://blog.csdn.net/wingofeagle/article/details/13020373 深度遍历: 从图中某个顶点v出发,访问此顶点,然后从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问到。 其更适合:目标比较明确,以找到目标为主
阅读全文
摘要:1.查找树的创建(createTree)假设有如下数组4,1,45,78,345,23,12,3,6,21首先选定4为root,然后遍历剩下的数字,如果大于等于4则放到4的右侧,小于4放到4的左侧,最后构建成的树:所有的左孩子都小于父节点,所有的右孩子都大于等于父节点。如下图:2. 遍历查找树(...
阅读全文
摘要:将树转换为二叉树的步骤如下:1加线:所有兄弟节点之间加线2去线:保留树中每个结点与它第一个孩子的连线,删除其与其他孩子的连线3层次调整:以根结点为轴心,将整棵树旋转,使之层次分明。而将二叉树转换为树,正好是一个相逆的过程。当以二叉链表做树的存储结构时,树的线序遍历和后续遍历完全可以借用二叉树的先序遍...
阅读全文
摘要:本文来自:http://www.matrix67.com/blog/archives/tag/poj大牛的博文学习学习节选如下部分:矩阵乘法的两个重要性质:一,矩阵乘法不满足交换律;二,矩阵乘法满足结合律经典题目1 给定n个点,m个操作,构造O(m+n)的算法输出m个操作后各点的位置。操作有平移、缩...
阅读全文
摘要:转自:http://blog.csdn.net/com_stu_zhang/article/details/7233761 一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最
阅读全文
摘要:转自:http://blog.csdn.net/morewindows/article/details/6709644/堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉...
阅读全文
摘要:转自:http://www.cnblogs.com/bourbon/archive/2011/08/26/2152158.html前言前段时间,我的一位钟情.net的童鞋在编写一套“教务管理系统”的时候,遇到了一个问题。因为系统中包含学生的成绩排序,而大学英语作为公共课有非常多人考试。这使得大学英语...
阅读全文
摘要:转自http://www.cnblogs.com/bourbon/archive/2011/08/23/2151044.html前言和分治法一样,动态规划(dynamic programing)是通过组合子问题的解而解决整个问题的。注意这里的programing翻译成立规划而不是编程。维基百科上写道...
阅读全文
摘要:转自http://blog.csdn.net/orbit/article/details/7368996二、扫描线算法(Scan-LineFilling) 扫描线算法适合对矢量图形进行区域填充,只需要直到多边形区域的几何位置,不需要指定种子点,适合计算机自动进行图形处理的场合使用,比如电脑游戏和三维...
阅读全文
摘要:转自:http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741374.html一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为...
阅读全文