摘要:
KMP算法 暴力匹配算法 假设现在我们面临这样一个问题:有一个文本串S,和一个模式串P,现在要查找P在S中的位置,怎么查找呢? 如果用暴力匹配的思路,并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置,则有: 如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配下 阅读全文
摘要:
区间树 注意:区间树和线段树不一样哦,线段树是一种特殊的区间树。 区间树: 区间树是在红黑树基础上进行扩展得到的支持以区间为元素的动态集合的操作,其中每个节点的关键值是区间的左端点。通过建立这种特定的结构,可是使区间的元素的查找和插入都可以在O(lgn)的时间内完成。相比于基础的红黑树数据结构,增加 阅读全文
摘要:
最大流 网络流的英文名是network flows,但是具体它是什么呢? 在这里我们可以把它看作很多现实中存在的东西,当然也是一些网络流能解决的东西,比方说水管流量,电力分配,运输货物时的物流问题,匹配问题等。 网络是一个各条边都有权值和方向的图。 给定一个有向图G=(V,E), 把图中的边看作管道 阅读全文
摘要:
单源最短路径 在最短路径问题中,我们给定一个带权重的有向图和权重函数, 该权重函数将每条边映射到实数值的权重上。图中一条路径的权重是构成该路径的所有边的权重之和: 定义从结点u到结点v的最短路径权重如下: 从结点u到结点v的最短路径则定义为任何一条权重为的从u到v的路径p。 最短路径的几个变体 单源 阅读全文
摘要:
散列表 散列表是普通数组概念的推广。由于普通数组可以直接寻址,使得能在O(1)时间内访问数组中的任意位置。如果存储空间允许,我们可以提供一个数组,为每个可能的关键字保留一个位置,以利用直接寻址技术的优势。 直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术。假设某应用要用到一个动态 阅读全文
摘要:
最小生成树 通用最小生成树 假定有一个连通无向图G=(V,E)和权重函数,我们希望找出图G的一颗最小生成树,Kruskal和Prim算法都是使用贪心策略来解决这个问题,但它们使用贪心策略的方式却有所不同。 这个贪心策略可以由下面的通用方法来表述。该通用方法在每个时刻生长最小生成树的一条边,并在整个策 阅读全文
摘要:
软件体系结构2 软件体系结构概述 软件体系结构包括构件(Component)、连接件(Connector)和约束(Constraint)或配置(Configuration)三大要素。 软件需求与架构 需求是指明必须实现什么规格说明。它描述了系统的行为、特性或属性,是在开发过程中对系统的约束。 与客户 阅读全文
摘要:
软件体系结构 质量属性: 开发期质量:可扩展性,可复用性,可维护性等; 运行期质量:正确性,健壮性,性能,可靠性,容错性,易用性,安全性,可移植性,兼容性。 设计原则: 面向接口编程(Program to interfaces, not to implementations) 多用组合,少用继承(F 阅读全文
摘要:
最长同值路径 给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。 注意:两个节点之间的路径长度由它们之间的边数表示。 示例 1: 输入: 输出: 2 示例 2: 输入: 输出: 注意: 给定的二叉树不超过10000个结点。 树的高度不超过1000。 阅读全文
摘要:
重复叠加字符串匹配 给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数,使得字符串B成为叠加后的字符串A的子串,如果不存在则返回 -1。 举个例子,A = "abcd",B = "cdabcdab"。 答案为 3, 因为 A 重复叠加三遍后为 "abcdabcdabcd",此时 B 是其子 阅读全文