****** 二 ******、软设笔记【数据结构】-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)树。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树的更多相关文章
- 算法笔记之KMP算法
本文是<算法笔记>KMP算法章节的阅读笔记,文中主要内容来源于<算法笔记>.本文主要介绍了next数组.KMP算法及其应用以及对KMP算法的优化. KMP算法主要用于解决字符串 ...
- 【数据结构与算法】二叉树的 Morris 遍历(前序、中序、后序)
前置说明 不了解二叉树非递归遍历的可以看我之前的文章[数据结构与算法]二叉树模板及例题 Morris 遍历 概述 Morris 遍历是一种遍历二叉树的方式,并且时间复杂度O(N),额外空间复杂度O(1 ...
- 萌新笔记——用KMP算法与Trie字典树实现屏蔽敏感词(UTF-8编码)
前几天写好了字典,又刚好重温了KMP算法,恰逢遇到朋友吐槽最近被和谐的词越来越多了,于是突发奇想,想要自己实现一下敏感词屏蔽. 基本敏感词的屏蔽说起来很简单,只要把字符串中的敏感词替换成"* ...
- 数据结构--KMP算法总结
数据结构—KMP KMP算法用于解决两个字符串匹配的问题,但更多的时候用到的是next数组的含义,用到next数组的时候,大多是题目跟前后缀有关的 . 首先介绍KMP算法:(假定next数组已经学会, ...
- 实验数据结构——KMP算法Test.ming
翻译计划 小明初学者C++,它确定了四个算术.关系运算符.逻辑运算.颂值操作.输入输出.使用简单的选择和循环结构.但他的英语不是很好,记住太多的保留字,他利用汉语拼音的保留字,小屋C++,发明 ...
- PythonCookBook笔记——数据结构和算法
数据结构和算法 解包赋值 p = [1, 2, 3] a, b, c = p # _表示被丢弃的值 _, d, _ = p # 可变长解包 *a, b = p # 字串切割解包 line = 'nob ...
- 数据结构——KMP算法
算法介绍 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法).KMP算法的核心是利用 ...
- 数据结构与算法--树(tree)结构
树 二叉树 遍历原则:前序遍历是根左右, 中序遍历是左根右,后序遍历是左右根. 二叉搜索树 特点:对于树中的每个节点X,它的左子树中所有节点的值都小于X,右子树中所有节点的值都大于X. 遍历:采取二叉 ...
- 数据结构-kmp算法
定义 改进字符串的匹配算法 关键:通过实现一个包含了模式串的局部匹配信息的next()函数,利用匹配失败的信息,减少匹配次数. 1.BF算法 暴力匹配 给定 文本串S "BBC ABCDAB ...
随机推荐
- zabbix添加ceph监控
应用背景: 网上监控ceph集群的资料不算多,git上有个开源的监控项目,是跟zabbix结合的,主要包含一个shell写的脚本和zabbix监控模板,拿来测试小记一下. 开源地址: https:// ...
- CentOS单网卡绑定双IP
OS:CnetOS 6.8 初始网卡配置文件 [root@localhost /]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ...
- 阿里云 docker连接总报超时 registry.cn-hangzhou.aliyuncs.com (Client.Timeout exceeded while awaiting headers
Error response from daemon: Get https://registry.cn-hangzhou.aliyuncs.com/v2/: net/http: request can ...
- Spring Data JPA Batch Insertion
转自:https://www.jeejava.com/spring-data-jpa-batch-insertion/ Spring Data JPA Batch Insertion will sho ...
- Windows下VMware14黑屏
解决方法 以管理员身份运行命令提示符,执行netsh winsock reset
- django2用模板代码图标字体丢失报404 cJZKeOuBrn4kERxqtaUH3T8E0i7KZn-EPnyo3HZu7kw.woff
以前开发网站,不是用php就是用c#或java写后端,跟后端繁重麻烦的代码相比,前端的html+css+JavaScript简直就简单的不算技术,相比之下,工作量也不大. 但如果用django框架,使 ...
- page-break-after:always不能正常工作
https://stackoverflow.com/questions/9595412/ie7-ie8-page-break-afteralways-not-working 最近在打印网页的时候发现 ...
- 第三十三节,目标检测之选择性搜索-Selective Search
在基于深度学习的目标检测算法的综述 那一节中我们提到基于区域提名的目标检测中广泛使用的选择性搜索算法.并且该算法后来被应用到了R-CNN,SPP-Net,Fast R-CNN中.因此我认为还是有研究的 ...
- 第一节,初识OpenCV3-图像的读、写、显、格式转化等
之前一直在看深度学习,突然用到了对图像处理的东西,所以过来补充一下OpenCV基础. 就顺便从网上了买了一本OpenCV 3计算机视觉这本书,这本书比较薄,但是目前已经够我用了,在这里就记录一下我的学 ...
- HTTP协议相关原理
HTTP 的全称是 Hyper Text Transfer Protocol,中文名叫做超文本传输协议 HTTP协议是用于从网络传输超文本数据到本地浏览器的传送协议,它能保证传送高效而准确地传送超文本 ...