算法

悬线法实例讲解

悬线法实例讲解先说说什么是悬线?就是一条竖线,这条竖线有初始位置和高度两个性质,可以在其上端点不超过当前位置的矩形高度的情况下左右移动。一、概述悬线法的适用范围是单调栈的子集。具体来说,悬线法可以应用于满足以下条件……

哈夫曼树的介绍及C语言代码实现

哈夫曼树的介绍及C语言代码实现1.简介哈夫曼树(HuffmanTree),又名:最优二叉树,赫夫曼树其标准含义是:给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼……

网络流常用小技巧拆点

网络流常用小技巧拆点拆点是一种图论建模思想,常用于网络流,用来处理点权或者点的流量限制的问题,也常用于分层图。一、什么是拆点?什么是拆点?拆点就是将一个点拆成入点和出点两个点,并在两个点之间建一条边。为什么要拆点?拆点是……

记忆化搜索实例讲解

记忆化搜索实例讲解什么是记忆化搜索?记忆化搜索在本质上,还是动态规划,只是实现方式采用了深度优先搜索的形式,但是它不像深度优先搜索那样重复枚举所有情况,而是把已经计算的子问题保存下来,这样就和动态规划的思想不谋而合了。……

KMP算法与前缀函数实例讲解

KMP算法与前缀函数实例讲解KMP算法与前缀函数(一)前缀函数一个字符串s的border是一个最长的字符串,且既是s的后缀,又是s的真前缀。给定长为n的字符串s,其前缀函数定义为一个长为n的数组π。其中π[i]为s的……

回溯法入门级讲解

回溯法入门级讲解说到回溯法,其实就是暴力搜索,并不是什么高效的算法,最多再剪枝一下。回溯算法能解决如下问题:(1)组合问题:N个数里面按一定规则找出k个数的集合(2)排列问题:N个数按一定规则全排列,有几种排列方式(……

后记

后记自6月提笔写这个教程,到现在已是年末了,时光如梭,读者跟着连载应该再配合一些基本的习题和搜索应该已经基本掌握数据结构了,然而,学完这些基本的数据结构还只是计算机学习海洋的一个开始,正如我开篇所说,数据……

分块查找算法介绍与实现

分块查找算法介绍与实现1.算法简介分块查找是折半查找和顺序查找的一种改进方法,分块查找由于只要求索引表是有序的,对块内节点没有排序要求,因此特别适合于节点动态变化的情况,其核心有二索引表,二是分块处理。分块查找要求把一个大……

什么是Prufer序列?

什么是Prufer序列?Prufer序列可以将一个带标号n个结点的树用[1,n]中的n-2个整数表示。你也可以把它理解为完全图的生成树与数列之间的双射。显然你不会想不开拿这玩意儿去维护树结构。这玩意儿常用组合计数问题上。He……

字符串的KMP算法详解及C/C++代码实现

字符串的KMP算法详解及C/C++代码实现1.原由紧接上文,我们知道了暴力匹配的算法在时间运行上的缺陷,假设字符串T的长度为n,字符串P的长度为m,则整个算法的时间复杂度为O(n*m),而对于一个复杂的现实情况而言n>&……