当前位置: 首页 > news >正文

****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树

五、KMP算法:
    *KMP算法是一种改进的字符串匹配算法。
    *KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。

    例如:在BBC ABCDAB ABCDABCDABDE中找到ABCDABD

    KMP算法的想法是,利用已经知道的前面六个字符“ABCDAB”,不要把“搜索位置”移回已经比较过的位置,继续把它向后移,这样就提高了效率。

 一、树:
     树是n(n>=0)个结点的有限集合,n=0时称为空树,在任一个非空树中
         *有且仅有一个称为根的结点。
         *其余的结点可分为m(m>=0)个互不相交的子集T1,T2...,Tm,其中每个子集本身又是一棵树,并称为根节点的子树。

     1.树的基本概念
         *双亲和孩子
         *兄弟:具有相同双亲的结点互为兄弟。
         *结点的度:一个结点的子树的个数记为该结点的度。
         *树的度:树中各结点的度的最大值
         *叶子结点:也称为终端结点,指度为零的结点。
         *内部结点:度不为零的结点称为分支结点或非终端结点。除根结点之外,分支结点也称为内部结点。

         *结点的层次:根为第一层,根的孩子为第二层,依次类推。
         *树的高度:一颗树的最大层次树记为树的高度(或深度)。
         *有序(无序)树:若将树中的结点的各子树看成是从左到右具有次序的,即不能交换,则称该树为有序树,否则为无序树。
         *森林:是m(m>=0)棵互不相交的树的集合

     2.树的存储结构:
         *标准存储结构
             结点的数据
             指向子结点的指针

         *带逆存储结构:
             结点的数据
             指向子结点的指针
             指向其父节点的指针

     3.树的遍历:
         遍历是指对树中所有结点信息的访问,即依次对树中每个结点访问一次且仅访问一次。
             *前序遍历 A B E F I J C D G H
             *后序遍历 E I J F B C G H D A
             *层次遍历 A B C D E F G H I J

         注意:树没有中序遍历,二叉树才有。


 二、二叉树
     二叉树(BinaryTree)是n(n>=0)个结点的有限集合,它或者是空树(n=0),或者是由一个根结点及棵互不相交、分别称为左子树和右子树的二叉树所组成。
     二叉树与树的区别:
         *二叉树的结点的最大度为2,而树不限制结点的度。
         *二叉树的结点的子树要区分左子树和右子树

     1.二叉树的性质
         (1)二叉树第i层上的结点数目最多为2的i-1(i>=1)次方。
         (2)深度为k的二叉树至多有2的k次方-1个结点(k>=1)。
         (3)在任意一棵二叉树中,若终端结点数为n0,度为2的结点数为n2,则n0 = n2+1。
         (4)具有n个结点的完全二叉树的深度为[log2n]+1.
         (5)对一棵有n个结点个完全二叉树的结点按层次自左至右进行编号,则对任一结点i有:
             *若i = 1,则结点i是二叉树的根,无双亲,若i > 1,则器双亲为[i/2]。
             *若2i > n,则结点i无左孩子,否则其左孩子为2i。
             *若2i+1 > n,则结点i无右孩子,否则其右孩子为2i+1。

         若深度为k的二叉树有2的k的-1个结点,则称其为满二叉树。
         深度为k、有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树编号从1至n的结点---对应时,称之为完全二叉树。

     2.二叉树的存储结构
         (1)顺序存储结构
             对完全二叉树既简单又节省空间,而对于一般二叉树则不适用。
         (2)链式存储结构
             由于二叉树中结点包含有数据元素、左子树根、右子树根及双亲等信息,因此可以用三叉链表或二叉链表来存储二叉树。链表的头指针指向二叉树的根节点。

     3.二叉树的遍历
         *前序遍历 4 2 1 3 5 6
         *中序遍历 1 2 3 4 5 6
         *后序遍历 1 3 2 6 5 4

 三、二叉树
     又称为二叉查找树,定义:或者是一棵空树,或者是具有下列性质的二叉树:
         (1)若左子树不空,则左子树上所有的结点的值均小于它的根结点的值;
         (2)若右子树不空,则右子树所有结点的值均大于或等于它的根结点的值;
         (3)左、右子树也分别为二叉树;

 四、平衡二叉树
     又被称为AVL树,具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

五、线索树
    n个结点的二叉链表中含有n+1(2n-(n-1)=n+1)个空指针域。利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前趋和后继结点的的指针(这种附加的指针称为“线索”)。

六、最优二叉树
    给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼(Huffman tree)树。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。

转载于:https://www.cnblogs.com/changemax/p/10015121.html

相关文章:

  • 第一个博客,南沙的星星
  • IO创建Socket通信中慎用BufferReader中的readLine()
  • lambda表达式的简单入门
  • 提交表单且不刷新页面
  • selenium+python 优化测试报告
  • Kylin性能调优记——业务技术两手抓
  • 编译时
  • 详解PHP魔术函数、魔术常量、预定义常量
  • 聊一聊session和cookie
  • 通过Struts2Web应用框架深入理解MVC
  • 酒店管理系统
  • 前端人工智能?TensorFlow.js 学会游戏通关
  • 从 源码 谈谈 redux compose
  • 【译】理解JavaScript:new 关键字
  • 开发者论坛一周精粹(第四十三期) 物联网全栈教程 ECSphp版本降级
  • Google 是如何开发 Web 框架的
  • [case10]使用RSQL实现端到端的动态查询
  • 【刷算法】从上往下打印二叉树
  • 【译】理解JavaScript:new 关键字
  • ECMAScript入门(七)--Module语法
  • ESLint简单操作
  • jdbc就是这么简单
  • JS 面试题总结
  • rc-form之最单纯情况
  • ReactNativeweexDeviceOne对比
  • Webpack 4 学习01(基础配置)
  • 关于springcloud Gateway中的限流
  • 基于Android乐音识别(2)
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 小程序开发之路(一)
  • 学习JavaScript数据结构与算法 — 树
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​TypeScript都不会用,也敢说会前端?
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #android不同版本废弃api,新api。
  • (0)Nginx 功能特性
  • (done) 两个矩阵 “相似” 是什么意思?
  • (LeetCode C++)盛最多水的容器
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (八十八)VFL语言初步 - 实现布局
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二)Linux——Linux常用指令
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (一)基于IDEA的JAVA基础12
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • .bat批处理出现中文乱码的情况
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET 的程序集加载上下文
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .NET微信公众号开发-2.0创建自定义菜单
  • .net中应用SQL缓存(实例使用)
  • .sdf和.msp文件读取