树、图、堆、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. JavaScript数据结构——图的实现

    在计算机科学中,图是一种网络结构的抽象模型,它是一组由边连接的顶点组成.一个图G = (V, E)由以下元素组成: V:一组顶点 E:一组边,连接V中的顶点 下图表示了一个图的结构: 在介绍如何用Ja ...

  2. 前端利器躬行记(1)——npm

    npm(Node Package Manager)是Node.js的包管理工具,相当于一个在线仓库.它提供了一个公共的平台,将分散在世界各地的包集中起来,能轻松的安装.分享和管理相关的包,不用再为搜索 ...

  3. Python中的for else 和while else的用法

    for else 在for 循环中,如果没有从任何一个break中退出,则会执行和for对应的else,只要从break中退出了,则else部分不执行. while else while 后面的els ...

  4. c++ 左移

    maxval = (1 << d) - 1: d=8 意思是2^d-1,相当于1左移d位

  5. Spring学习之旅(十一)--JDBC

    JDBC 是数据持久化的一种比较常见的方案,Spring 也对它进行了支持. 在开始 JDBC 的使用之前,我们要先做下一些准备工作. 配置数据源 在 Spring 上下文中可以数据源 Bean 有如 ...

  6. unity之局域网

    Unity自5.1以后支持新版的网络系统Unet,Unet是什么,优缺点是什么,和以前的网络系统有什么区别,请自行去百度.本篇要实现的功能是创建网络游戏的Player主角,以及实现移动同步.本教程来源 ...

  7. 吃货眼中的sqlalchemy外键和连表查询

    前言 使用数据库一个高效的操作是连表查询,一条查询语句能够查询到多个表的数据.在sqlalchem架构下的数据库连表查询更是十分方便.那么如何连表查询?以及数据库外键对连表查询有没有帮助呢?本篇文章就 ...

  8. effective java 3th item2:考虑 builder 模式,当构造器参数过多的时候

    yiaz 读书笔记,翻译于 effective java 3th 英文版,可能有些地方有错误.欢迎指正. 静态工厂方法和构造器都有一个限制:当有许多参数的时候,它们不能很好的扩展. 比如试想下如下场景 ...

  9. 2019 Multi-University Training Contest 1

    2019 Multi-University Training Contest 1 A. Blank upsolved by F0_0H 题意 给序列染色,使得 \([l_i,r_i]\) 区间内恰出现 ...

  10. CF1027C Minimum Value Rectangle 贪心 数学

    Minimum Value Rectangle time limit per test 2 seconds memory limit per test 256 megabytes input stan ...