树、图、堆、STL

图论基础

简单图:

没有自环,两个顶点之间最多只有一条边。

完全图:

一个简单图,每两个顶点之间都有一条边。一共有(n-1)*n/2条边。

二分图:

一个简单图,设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。

一般二分图都能化成:

图的定义:

相邻、度数…………

有向图:

边都是单向的。

带权图:

可以给边加权,成为带权图。

稀疏图:

边与V*(V-1)相比非常少的图。他的补图为稠密图。

简单路径:

不出现重复的点。

连通图:

每两点之间都有路径。

树:

N个点,N-1条边

关于树的具体知识:

1.纳尼??Vector(顺序表结构 向量)和List(单链表)居然不够用??

vector list
search log n 线性
insert 线性 O(1)

无法同时兼顾高效性!!

2.中间概念

边、节点、指定根、有根树、子树、孩子、父亲、度数、兄弟、祖先、后代、叶子节点。没有意外的话,上文有讲。

任何一棵树中,所含的边数应该恰好等于所有顶点度数之和,也等于顶点总数-1.

3.有序树:将同一节点的所有孩子编号使他们具有这种意义上的某一个次序

4.WTF??原来树这么神奇?? 树:无环连通图 极小连通图 极大无环图

5.树的半线 性 v的祖先/后代若存在,则必然/未必唯一.

6.生成树:原图的子图,是一棵树。

图/树 ( 反正是通用的 ) 的表示方法 : 邻接矩阵与邻接表。

邻接矩阵:

优点:查找/删除一个点时间复杂度O(1)

邻接表:

优点:快速遍历某点所有数据 以及 占用空间小

缺点:查找、删除边不是常数时间。

二叉树

定义:二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。

由二叉树定义以及图示分析得出二叉树有以下特点:

1)每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点。

2)左子树和右子树是有顺序的,次序不能任意颠倒。

3)即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。 这点与普通的树不同。

1)在二叉树的第i层上最多有2i-1 个节点 。(i>=1)

2)二叉树中如果深度为k,那么最多有2k-1个节点。(k>=1)

3)n0=n2+1 n0表示度数为0的节点数,n2表示度数为2的节点数。

4)在完全二叉树中,具有n个节点的完全二叉树的深度为[log2n]+1,其中[log2n]是向下取整。

5)若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意一个编号为 i 的结点有如下特性:

(1) 若 i=1,则该结点是二叉树的根,无双亲, 否则,编号为 [i/2] 的结点为其双亲结点;

(2) 若 2i>n,则该结点无左孩子, 否则,编号为 2i 的结点为其左孩子结点;

(3) 若 2i+1>n,则该结点无右孩子结点, 否则,编号为2i+1 的结点为其右孩子结点。

所以,二叉树的表示比普通的树的表示方便多了!! 只需开一个数组,记录当前节点(x)以及节点编号(y)。他爸的编号就是y/2。

STL 数据结构

标准数据库,简称STL;

数据结构:

1.栈(stack)

1.1 栈的定义

栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。所以,我们一般画一个桶来模拟栈的运行。

我们来实现栈:

#include <stack>
stack <int> a;
a.push(x);
a.pop();
a.empty();
a.top();

2.队列(queue)

与栈相反,队列的规则是先进后出。

#include <queue>
queue <int> a;
empty()函数返回真(true)如果队列为空,否则返回假(false)。 front()返回队列第一个元素的引用。 pop()函数删除队列的一个元素 push() 在末尾加入一个元素 size() 返回队列中元素的个数
优先队列

它是个队列,你把数据存进去,C++的STL自动帮帮你排序(你可以这么理解吧)。

#include <queue>
queue <int> a;
empty()函数返回真(true)如果队列为空,否则返回假(false)。 top()返回队列第一个元素的引用。 pop()函数删除队列的一个元素 push() 在末尾加入一个元素 size() 返回队列中元素的个数

操作与上面类似。

本文有部分参考:作者:MrHorse1992链接:https://www.jianshu.com/p/bf73c8d50dc2来源:简书简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

树、图、堆、STL(来自菜鸡的"炒鸡"干粮)的更多相关文章

  1. 【bzoj3073】[Pa2011]Journeys 线段树优化建图+堆优化Dijkstra

    题目描述 Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N编号,但是他发现道路实在太多了,他要一条条建简直是不可能的!于是他以如下方式建造道路:(a, ...

  2. JavaScript 数据结构与算法之美 - 非线性表中的树、堆是干嘛用的 ?其数据结构是怎样的 ?

    1. 前言 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手. 非线性表(树.堆),可以说是前端程序员的内功,要知其然,知其所以然. 笔者写的 JavaScript 数据结构与算法 ...

  3. 树和堆(julyedu网课整理)

    date: 2018-12-05 16:59:15 updated: 2018-12-05 16:59:15 树和堆(julyedu网课整理) 1 定义 1.1 树的定义 它是由n(n>=1)个 ...

  4. ㊙力荐!!!那些炒鸡有用的chrome插件㊙

    今天咱们来说一说那些炒鸡

  5. 炒鸡简单的canvas粒子(山东数漫江湖)

    位图的canvas一直不会被svg比下去的原因了. 俗话说,须弥芥子,是大小之说,也有以小见大之说,颗颗粒子,足以构建宏大效果. 这是一篇炒鸡简单的canvas粒子教程,主要是讲如何粒子特效的原理,一 ...

  6. 洛谷 P5471 - [NOI2019] 弹跳(二维线段树优化建图+堆优化存边)

    题面传送门 一道非常有意思的题(大概可以这么形容?) 首先看到这类一个点想一个区域内连边的题目可以很自然地想到线段树优化建图,只不过这道题是二维的,因此需要使用二维线段树优化建图,具体来说,我们外层开 ...

  7. 【XSY2667】摧毁图状树 贪心 堆 DFS序 线段树

    题目大意 给你一棵有根树,有\(n\)个点.还有一个参数\(k\).你每次要删除一条长度为\(k\)(\(k\)个点)的祖先-后代链,问你最少几次删完.现在有\(q\)个询问,每次给你一个\(k\), ...

  8. 【51nod1443】路径和树(堆优化dijkstra乱搞)

    点此看题面 大致题意:给你一个无向联通图,要求你求出这张图中从u开始的权值和最小的最短路径树的权值之和. 什么是最短路径树? 从\(u\)开始到任意点的最短路径与在原图中相比不变. 题解 既然要求最短 ...

  9. 【BZOJ4504&&Hihocoder1046】K个串(主席树,堆)

    题意:一个长度为n的数字序列,选出其中的一个连续子串,然后统计其子串中所有数字之和(注意这里重复出现的数字只被统计一次)询问第k大的和是多少 1 <= n <= 100000, 1 < ...

随机推荐

  1. HBase的高可用(HA)

    在公司写文档时候查到的一些资料,感觉对自己很有帮助,现在整理如下: 介绍 HBase是一个高可靠性.高性能.列存储.可伸缩.实时读写的分布式数据库系统,基于列的存储模式适合于存储非结构化数据. 适用场 ...

  2. BeautifulSoup 库简单学习使用

    from bs4 import BeautifulSoup as BS # 首先是初始化一个BeautifulSoup的对象 soup = BS(text,'lxml') 示例: from bs4 i ...

  3. 基于ZooKeeper的三种分布式锁实现

    [欢迎关注公众号:程序猿讲故事 (codestory),及时接收最新文章] 今天介绍基于ZooKeeper的分布式锁的简单实现,包括阻塞锁和非阻塞锁.同时增加了网上很少介绍的基于节点的非阻塞锁实现,主 ...

  4. vue 实现数据绑定原理

      案例: Vue 底层原理   // 目的: 使用原生js来实现Vue深入响应式   var box = document.querySelector('.box')   var button = ...

  5. Java性能测试从入门到放弃-概述篇

    Java性能测试从入门到放弃-概念篇 辅助工具 Jmeter: Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试.JMeter 可以用于对服务器.网络 ...

  6. 真正加速Jenkins安装插件速度

    本文主旨 看到好多加速Jenkins安装插件速度的文章, 大多数教程中都是在插件配置里使用下边的url来替换原有的https://mirrors.tuna.tsinghua.edu.cn/jenkin ...

  7. OCP培训 MySQL OCP认证实战培训【低价送OCP考证名额】

    一.OCP培训 MySQL 5.7 OCP认证全套实战培训[低价送OCP考试名额] 课程目标: 风哥为满足想参加MySQL OCP考证的学员,而设计的一套比较全面OCP实战培训课程. 课程涉及MySQ ...

  8. JDBC、Tomcat为什么要破坏双亲委派模型?

    问题一:双亲委派模型是什么 如果一个类加载器收到了加载某个类的请求,则该类加载器并不会去加载该类,而是把这个请求委派给父类加载器,每一个层次的类加载器都是如此,因此所有的类加载请求最终都会传送到顶端的 ...

  9. 详解golang net之transport

    关于golang http transport的讲解,网上有很多文章读它进行了描述,但很多文章讲的都比较粗,很多代码实现并没有讲清楚.故给出更加详细的实现说明.整体看下来细节实现层面还是比较难懂的. ...

  10. python 19 包

    目录 1. 包 2. logging 日志 2.1 日志级别 2.2 配置日志格式: 2.3 logger 对象配置 1. 包 文件夹下具有__init__.py文件就是一个包 from bake.c ...