美文网首页
算法读书笔记之图的基本概念

算法读书笔记之图的基本概念

作者: Hammy | 来源:发表于2020-01-06 17:31 被阅读0次

概念定义

图是一种数学模型,它通过节点和边的组成映射现实生活中的关系。地图、互联网本身都可以用图来表示,地图两个建筑之间的距离,建筑就是节点,具体就是边.

图的分类

图分为四种:
    1.无向图
    2.有向图
    3.加权图
    4.加权有向图

图的表示方式

图是由vertex(顶点)和边(edge)相互连接而成.
一个V个顶点的图,一般用0-(V-1)个顶点表示图的顶点,与数组索引的表示方式保持一致.
度数表示的是一个顶点被多少条边连接
树本质上是一种无环连接图
图可以用密度这个概念来进行区分,密度低的就是稀疏图,反之就是稠密图.

邻接矩阵和邻接表:
    要表示一个图这种数据结构,要保证数据结构有足够的空间表示,同时时间复杂度、空间复杂度要尽可能的低.
    邻接矩阵:
        它可以将V个顶点的图表示位(0-V-1)^2的矩阵,并且每个元素通过bool类型来表示是否有连接关系.
        这样表示很清晰易懂,但是空间复杂度等于V^2,而且表示稠密图还好,如果表示稀疏图的话,就浪费了大量的空间.
    邻接表:
        邻接表的方法是通过数组的索引表示顶点的位置,通过数组的元素表示顶点连接的其他顶点.
    
    邻接表看起来比邻接矩阵更有优势,因为空间复杂度更低,而且可以表示平行矩阵
    Ps:平行矩阵代表是两个顶点可以有多个边

图的代码实现

邻接表的实现方式整体上更通用,所以使用邻接表来表示图.一个基本的图要实现以下的基本方法:
    public class AdjacencyListGraph implements Graph {

    private final int V;

    private int E;

    private LinkedList<Integer> adj[];

    public AdjacencyListGraph(int v) {
        this.V = v;
        this.E = 0;
        adj = new LinkedList[v];
        for (int i = 0; i < v; i++) {
            adj[i] = new LinkedList<>();
        }
    }

    public AdjacencyListGraph(BufferedReader bufferedReader) throws IOException {
        this(Integer.parseInt(bufferedReader.readLine()));
        int E = Integer.parseInt(bufferedReader.readLine());
        for (int i = 0; i < E; i++) {
            int v = Integer.parseInt(bufferedReader.readLine());
            int w = Integer.parseInt(bufferedReader.readLine());
            this.addEdge(v, w);
        }
    }

    @Override
    public void addEdge(int v, int w) {
        adj[v].add(w);
        adj[w].add(v);
        this.E++;
    }

    @Override
    public Iterable<Integer> adj(int v) {
        return adj[v];
    }

    @Override
    public int E() {
        return this.E;
    }

    @Override
    public int V() {
        return this.V;
    }

    @Override
    public String toString() {
        return "AdjacencyListGraph{" + "V=" + V + ", E=" + E + ", adj=" + Arrays.toString(adj) + '}';
    }

    
    

相关文章

  • 算法读书笔记之图的基本概念

    图 概念定义 图的分类 图的表示方式 图的代码实现

  • 读书笔记

    读书笔记/人生算法十八关之第四-九关 【标题】人生算法十八关之四到九关 【书籍】人生算法 【01】人生算法十八关之...

  • 《数据结构与算法之美》26——广度优先搜索与深度优先搜索

    什么是搜索算法 上一节介绍了图的基本概念,这一节介绍图的搜索算法。 图的搜索算法,最直观的理解就是从一个顶点到另一...

  • 《算法之美》读书笔记-如何获得平衡的生活-1

    《算法之美—指导工作与生活的算法》我的wordpress博文链接:《算法之美》读书笔记-如何获得平衡的生活-1 –...

  • [数据结构]第一章绪论(2)——算法

    绪论第二节——算法 基本概念 什么是算法? 程序=数据结构+算法 算法的特性 有穷性:一个算法必须总在执行有穷步之...

  • 读书笔记

    读书笔记/人生算法十八关之片面、狭隘与模糊 【标题】人生算法十八关之片面、狭隘与模糊 【书籍】人生算法 【01】人...

  • 读书笔记

    读书笔记/人生算法十八关之孤独、爆仓、迷信 【标题】人生算法十八关之孤独、爆仓、迷信 【书籍】人生算法 【01】人...

  • 读书笔记

    读书笔记/人生算法十八关之第十——十二关 【标题】人生算法十八关之第十——十二关 【书籍】人生算法 【01】人生算...

  • 数据结构-图及相关算法

    目录 基本概念及问题图的三种表示方式现实应用图的遍历最短路径 - Dijkstra算法拓扑排序最小生成树 基本概念...

  • “算来算去”

    “算来算去” ——《算法之美》读书笔记 最初听到《算法之美》时,作为一个纯度百分之百的文科生是拒绝的,单算法两字就...

网友评论

      本文标题:算法读书笔记之图的基本概念

      本文链接:https://www.haomeiwen.com/subject/ueikactx.html