
数据结构和算法
Data Structure & Algorithm
Bungehurst
极限尤可突破,至臻亦不可止
展开
-
KMP算法
KMP算法简介KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,简称KMP算法。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next表,其包含了模式串的局部匹配信息。模式串移动距离通过查表确定。KMP算法的时间复杂度O(m+n)。算法原理假如已经通过比对发现,T[...原创 2020-05-01 10:56:02 · 258 阅读 · 0 评论 -
数据结构 第六章 图-4
深度优先搜索:优先选取最后一个被访问到的顶点的邻居。template <typename Tv, typename Te> void Graph<Tv,Te>::dfs ( int s ) { reset(); int clock = 0; int v = s; do if ( UNDISCOVERED == status ( ...原创 2020-02-03 12:22:33 · 96 阅读 · 0 评论 -
数据结构 第六章 图-3
广度优先搜索:越早被访问到的顶点,其邻居越优先被选用。在所有已访问到的顶点仍有邻居尚未访问者,构成所谓的波峰集。BFS搜索过程可理解为:反复从波峰集中找到最早被访问到的顶点v,若其邻居均已访问到,则将其逐出波峰集;否则,随意选出一个尚未访问到的邻居,并将其加入波峰集中。步骤:访问顶点s 依次访问s所有尚未访问的邻接顶点 依次访问它们尚未访问的邻接顶点 如此反复。。。BF...原创 2020-02-03 11:58:37 · 164 阅读 · 0 评论 -
数据结构 第六章 图-2
邻接矩阵与关联矩阵:邻接矩阵实现图结构直观,适用广泛,效率高,扩展性。缺点:空间浪费。#include "Vector.h"#include "Graph.h"template <typename Tv> struct Vertex { //顶点对象(为简化起见,并未严格封装) Tv data; int inDegree, outDegree; V...原创 2020-02-01 22:35:18 · 191 阅读 · 0 评论 -
数据结构 第六章 图-1
基本概念图,定义为G(V, E)。集合V中的元素称作节点vertex,集合E中的元素分别对应于V中的某一对定点(u,v),表示他们之间存在某种关系,故称为边(edge)。邻接关系:彼此之间存在关系且邻接的,顶点与顶点之间的关系。对于任何边e=(u,v),称作顶点u和v彼此邻接adjacent,互为邻居。而他们都与边e彼此关联incident。关联关系:定点与相关的边的关系。入度 (...原创 2020-02-01 15:13:01 · 328 阅读 · 0 评论 -
数据结构 第五章 二叉树-4
递归式遍历:先序、中序、后序遍历:取决于根节点的遍历顺序。先序遍历://preorder traversaltemplate <typename T, typename VST>void travPre_R( BinNodePosi(T) x, VST& visit){ if ( !x ) return; visit( x->dat...原创 2020-01-31 10:53:59 · 194 阅读 · 0 评论 -
数据结构 第五章 二叉树-3
更新高度:template <typename T> int BinTree<T>::updateHeight( BinNodePosi(T) x ) { return x->hieght = 1 + max ( stature( x->lc ), stature( x->rc ));}template <typename T&g...原创 2020-01-30 15:28:19 · 173 阅读 · 0 评论 -
数据结构 第五章 二叉树-2
BinNode模板类:#include <iostream>#define BinNodePosi(T) BinNode<T>*#define stature(p) ((p) ? (p)->height : -1)typedef enum {RB_RED, RB_BLACk} RBColor;template <typename T> st...原创 2020-01-30 13:56:33 · 184 阅读 · 0 评论 -
数据结构 第五章 二叉树-1
树属于半线性结构(semi-linear structure)从图论的角度,树等于连通无环图。树由一组顶点(vertex)和边(edge)组成,在指定根节点之后,称为有根树。顶点称为节点(node)深度和层次:沿每个节点v到根r的唯一通路所经过边的数目,称为v的深度(depth)记作depth(v),约定,根的深度depth(r)= 0。任一节点v在通往树根沿途所经过的每个节点都...原创 2020-01-30 11:02:59 · 265 阅读 · 0 评论 -
数据结构 第四章 栈
Stack 模板类:#include "Vector.h"template <typename T>class Stack : public Vector<T> { public: void push ( T const& e) {insert(size(), e);} T pop() {return remove(s...原创 2020-01-28 13:33:06 · 189 阅读 · 0 评论 -
数据结构 第三章 列表-2
有序列表:唯一化:template <typenamee T> int List<T>::uniquify(){ if (_size < 2) return 0; int oldSize = _size; ListNodePosi(T) p = first(); ListNodePosi(T) q; while(trailer != (q = p-&...原创 2020-01-23 10:36:17 · 168 阅读 · 0 评论 -
Fib 类的一种可行实现(动态规划)
class Fib{ private: int f,g; public: Fib (int n){ f = 1; g = 0; while (g < n) next(); } int get(){ return g; } int next(){ g+=f; f = g - f; return g; } int prev(){ f ...原创 2020-01-20 09:43:00 · 399 阅读 · 0 评论 -
数据结构 第三章 列表-1
列表:list节点:node前驱(predecessor),后继(successor)首节点(first),末节点(last),header(头元素), trailer(尾元素) :哨兵节点,对外不可见ListNode.h#include <iostream>using namespace std;typedef int Rank;#define Lis...原创 2020-01-21 09:49:29 · 237 阅读 · 0 评论 -
数据结构 第二章 向量-3
向量排序器:起泡排序://起泡排序template <typename T> void Vector<T>::bubbleSort(Rank lo, Rank hi){ while(!bubble(lo,hi--));}template <typename T> bool Vector<T>::bubble(Rank lo, Ra...原创 2020-01-19 22:14:37 · 186 阅读 · 0 评论 -
数据结构 第二章 向量-2
有序向量:有序性的甄别:template <typename T> int Vector<T>::disordered() const { int n = 0; for (int i = 1; i < _size; i++) { if (_elem[i - 1] > _elem[i]) n++; } return n;}唯一化:低效...原创 2020-01-19 16:30:58 · 169 阅读 · 0 评论 -
数据结构 第二章 向量-1
向量ADT接口ADT: Abstract Data Type向量:线性数组的抽象和泛化,故不再限定向量中的各元素都属于同一基本类型。寻秩访问:对于Vector来说,相当于数组中的元素下标。size() 元素总数 向量 get(r) 获取秩为r的元素 向量 put(r,e) 用e替换秩为r的元素 向量 insert(r,e...原创 2020-01-17 20:07:44 · 438 阅读 · 0 评论 -
数据结构 第一章 绪论
算法:输入输出 基本操作、确定性和可行性 有穷性和正确性 有限次基本操作,正确结果 退化与鲁棒:处理极端输入。 重用性:算法的整体框架能否推广至其他场合。复杂度度量:时间复杂度:算法执行时间。 渐进分析:忽略小规模问题,着眼于长远,注重时间复杂度的整体变化趋势和增长速度的策略。 大O记号:T(n)=O(f(n)),忽略常系数,只保留最高次项。 空间复杂度:算法所需的存储空...原创 2020-01-16 12:11:59 · 172 阅读 · 0 评论