随笔分类 - 数据结构与算法分析:C语言描述
摘要:二叉堆因为实现简单,因此在需要优先队列的时候几乎总是使用二叉堆。d 堆是二叉堆的简单推广,它恰像一个二叉堆,只是所有的节点都有d个儿子(因此,二叉堆又叫2 堆)。下图表示的是一个3 堆。注意,d 堆要比二叉堆浅得多,它将Insert操作的运行时间改进为。然而,对于大的d,DeleteMin操作费时得
阅读全文
摘要:什么是二叉堆? 二叉堆是一种特殊的堆。具有如下的特性: 1. 具有完全二叉树的特性。 2. 堆中的任何一个父节点的值都大于等于它左右孩子节点的值(最大堆),或者都小于等于它左右孩子节点的值(最小堆)。 这个为最大堆: 这个为最小堆: 我们把二叉堆的根节点称之为堆顶。根据二叉堆的特性,堆顶要嘛是整个堆
阅读全文
摘要:概念 散列的概念属于查找,它不以关键字的比较为基本操作,采用直接寻址技术。在理想情况下,查找的期望时间为O(1)。 hash函数就是把任意长的输入字符串变化成固定长的输出字符串的一种函数。输出字符串的长度称为hash函数的位数。 散列(Hashing)通过散列函数将要检索的项与索引(散列,散列值)关
阅读全文
摘要:前戏 我们大家都知道动态查找树能够提高查找效率,比如:二叉查找树,平衡二叉查找树,红黑树。他们查找效率的时间复杂度O(log2n),跟树的深度有关系,那么怎么样才能提高效率呢?当然最快捷的方式就是减少树的深度了。那么怎么减少树的深度呢?为了解答这个问题,我们慢慢来看,先看个实际问题吧。 问题背景 在
阅读全文
摘要:AVL树(平衡二叉树): AVL树本质上是一颗二叉查找树,但是它又具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为平衡二叉树。下面是平衡二叉树和非平衡二叉树对比的例图: 平衡因子
阅读全文
摘要:二叉树的一个重要应用是它们在查找中的使用。 二叉查找树的性质:对于树中的每个节点X,它的左子树中所有项的值小于X中的项,而它的右子树中所有项的值大于X中的项。这意味着该树所有的元素可以用某种一致的方式排序。 二叉查找树的平均深度是O(logN)。二叉查找树要求所有的项都能够排序。树中的两项总可以使用
阅读全文
摘要:在深入浅出数据结构系列前面的文章中,我们一直在讨论“线性表”,其形式如下: 由a1,a2,a3,……a(n 1)个元素组成的序列,其中每一个元素ai(0
阅读全文
摘要:前言 基数排序的排序原理不难理解,但是在算法设计上,个人感觉还是比那些常见的排序要难的,耐心慢慢一步步理解,还是比较容易看懂的,注意基数排序有两种,一种是高位优先,一种是低位优先,在这里我只讲低位优先,即先排个位,再排十位………. 时间复杂度 基数排序的时间复杂度为O (nlog(r)m),其中r为
阅读全文
摘要:问题描述: 假设需要生成前N个自然数的一个随机置换。例如,{4,3,1,5,2}和{3,1,4,2,5}就是合法的置换,但{5,4,1,2,1}却不是,因为数1出现两次而数3却没有。这个程序常常用于模拟一些算法。我们假设存在一个随机数生成器RandInt(i,j),它以相同的概率生成i和j之间的一个
阅读全文
摘要:最大连续子数列和一道很经典的算法问题,给定一个数列,其中可能有正数也可能有负数,我们的任务是找出其中连续的一个子数列(不允许空序列),使它们的和尽可能大。我们一起用多种方式,逐步优化解决这个问题。 为了更清晰的理解问题,首先我们先看一组数据: 第一行的8是说序列的长度是8,然后第二行有8个数字,即待
阅读全文
摘要:不知道大家发现没有,执行递归算法,特别是递归执行层数多的时候,结果极其的慢,而且递归层数达到一定的值,还可能出现内存溢出的情况。本文就要将为你解释原因和对应的解决方案。 一、递归与循环 1.1 所谓的递归慢到底是什么原因呢? 大家都知道递归的实现是通过调用函数本身,函数调用的时候,每次调用时要做地址
阅读全文


浙公网安备 33010602011771号