摘要:KD树 1. 概述 KD树是一种查询索引结构,广泛应用于数据库索引中。从概念的角度讲,它是一种高纬数据的快速查询结构,本文首先介绍1维数据的索引查询,然后介绍2维KD树的创建和查询 2. 1维数据的查询 假设在数据库的表格T中存储了学生的语文成绩chinese、数学成绩math、英语成绩englis
阅读全文
摘要:层次遍历递归和非递归方法 如何遍历一棵树 有两种通用的遍历树的策略: 深度优先搜索(DFS) 深度优先搜索(DFS) 在这个策略中,我们采用深度作为优先级,以便从跟开始一直到达某个确定的叶子,然后再返回根到达另一个分支。 深度优先搜索策略又可以根据根节点、左孩子和右孩子的相对顺序被细分为先序遍历,中
阅读全文
摘要:跳跃表 跳跃表的引入 无论是数组还是链表在插入新数据的时候,都会存在性能问题。排好序的数据,如果使用数组,插入新数据的方式如下: 如果要插入数据3,首先要知道这个数据应该插入的位置。使用二分查找可以最快定位,这一步时间复杂度是O(logN)。插入过程中,原数组中所有大于3的商品都要右移,这一步时间复
阅读全文
摘要:基于遗传算法的试题组卷 IT企业每年都会在春季和秋季举行校园招聘,对于个性化定制的试卷需求量很大,如何组出又好又快的定制化试题对于IT企业非常重要。组卷技术主要针对知识点覆盖率,题型,难度系数,试题数量等一些试题的属性进行多条件约束优化组卷。 为了方便考官出题考试,系统中引入了试题组卷技术。如何又快
阅读全文
摘要:红黑树与AVL AVL树 二叉搜索树只有保持平衡时其查找效率才会高。 要保持二叉搜索树的平衡不是一件易事。不过还是有一些非常经典的办法可以做到,其中最好的方法就是将二叉搜索树实现为AVL树。 AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis,他们在 196
阅读全文
摘要:Hash冲突 对象Hash的前提是实现equals()和hashCode()两个方法,那么HashCode()的作用就是保证对象返回唯一hash值,但当两个对象计算值一样时,这就发生了碰撞冲突。 开放地址法 开放地执法有一个公式:Hi=(H(key)+di) MOD m i=1,2,…,k(k<=m
阅读全文
摘要:哈夫曼树及哈夫曼编码 哈夫曼树 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 树节点间的边相关的数叫做权。 从树中的一个节点到另一个节点之间的分支
阅读全文
摘要:01背包问题 问题描述 一个旅行者有一个最多能装m公斤的背包,现在有n中物品,每件的重量分别是W1、W2、……、Wn,每件物品的价值分别为C1、C2、……、Cn, 需要将物品放入背包中,要怎么样放才能保证背包中物品的总价值最大? 思路 假设前n个物品,总承重为j,物品的重量为w,其最大价值为v[n,
阅读全文
摘要:根据给出的先序遍历和中序遍历,画出二叉树。 先序遍历:DBACEGF 中序遍历:ABCDEFG 首先我们来看一下三种遍历方式: 1)先序遍历二叉树 (1)访问根节点 (2)先序遍历跟的左子树 (3)先序遍历根的右子树 2)中序遍历二叉树 (1)中序遍历根的左子树 (2)访问根节点 (3)中序遍历根的
阅读全文
摘要:PageRank算法 1. PageRank算法概述 PageRank,即网页排名,又称网页级别、Google左側排名或佩奇排名。 是Google创始人拉里·佩奇和谢尔盖·布林于1997年构建早期的搜索系统原型时提出的链接分析算法,自从Google在商业上获得空前的成功后,该算法也成为其他搜索引擎和
阅读全文
摘要:KMP算法 暴力匹配算法 假设现在我们面临这样一个问题:有一个文本串S,和一个模式串P,现在要查找P在S中的位置,怎么查找呢? 如果用暴力匹配的思路,并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置,则有: 如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配下
阅读全文
摘要:区间树 注意:区间树和线段树不一样哦,线段树是一种特殊的区间树。 区间树: 区间树是在红黑树基础上进行扩展得到的支持以区间为元素的动态集合的操作,其中每个节点的关键值是区间的左端点。通过建立这种特定的结构,可是使区间的元素的查找和插入都可以在O(lgn)的时间内完成。相比于基础的红黑树数据结构,增加
阅读全文
摘要:散列表 散列表是普通数组概念的推广。由于普通数组可以直接寻址,使得能在O(1)时间内访问数组中的任意位置。如果存储空间允许,我们可以提供一个数组,为每个可能的关键字保留一个位置,以利用直接寻址技术的优势。 直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术。假设某应用要用到一个动态
阅读全文
摘要:最大流 网络流的英文名是network flows,但是具体它是什么呢? 在这里我们可以把它看作很多现实中存在的东西,当然也是一些网络流能解决的东西,比方说水管流量,电力分配,运输货物时的物流问题,匹配问题等。 网络是一个各条边都有权值和方向的图。 给定一个有向图G=(V,E), 把图中的边看作管道
阅读全文
摘要:单源最短路径 在最短路径问题中,我们给定一个带权重的有向图和权重函数, 该权重函数将每条边映射到实数值的权重上。图中一条路径的权重是构成该路径的所有边的权重之和: 定义从结点u到结点v的最短路径权重如下: 从结点u到结点v的最短路径则定义为任何一条权重为的从u到v的路径p。 最短路径的几个变体 单源
阅读全文
摘要:最小生成树 通用最小生成树 假定有一个连通无向图G=(V,E)和权重函数,我们希望找出图G的一颗最小生成树,Kruskal和Prim算法都是使用贪心策略来解决这个问题,但它们使用贪心策略的方式却有所不同。 这个贪心策略可以由下面的通用方法来表述。该通用方法在每个时刻生长最小生成树的一条边,并在整个策
阅读全文
摘要:模拟退火 爬山算法(Hill Climbing) 介绍模拟退火前,先介绍爬山算法。爬山算法是一种简单的贪心搜索算法,该算法每次从当前的解空中选择一个最优解作为当前解,直到达到一个局部最优解。 爬山算法实现很简单,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解。如下图所示:假设C点为当前解,
阅读全文
摘要:粒子群算法 粒子群算法是在1995年由Eberhart博士和Kennedy博士一起提出的,它源于对鸟群捕食行为的研究。它的基本核心是利用群体中的个体对信息的共享从而使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得问题的最优解。设想这么一个场景:一群鸟进行觅食,而远处有一片玉米地,
阅读全文
摘要:同进化算法(进化算法是受生物进化机制启发而产生的一系列算法)和人工神经网络算法(神经网络是从信息处理角度对人脑的神经元网络系统进行了模拟的相关算法)一样,群智能优化算法也属于一种生物启发式方法,它们三者可以称为是人工智能领域的三驾马车(实际上除了上述三种算法还有一些智能算法应用也很广泛,比如模拟金属
阅读全文