Compreensão simples do gráfico

** 1. Vértice: Os elementos de dados no gráfico, conforme mostrado na Figura 1.

** 2. Borda: a linha que liga esses vértices na figura, como mostra a Figura 1.

Insira a descrição da imagem aqui

Todos os vértices constituem um conjunto de vértices, todas as arestas constituem um conjunto de arestas e uma estrutura gráfica completa é composta por um conjunto de vértices e um conjunto de arestas. A estrutura do gráfico é matematicamente escrita da seguinte forma:

G = (V, E) ou G = (V (G), E (G))

V (G) representa o conjunto de todos os vértices na estrutura do gráfico e os vértices podem ser representados por diferentes números ou letras. E (G) é o conjunto de todas as arestas da estrutura do gráfico e cada aresta é representada por dois vértices conectados.

O conjunto de vértices V (G) na estrutura do gráfico não pode estar vazio e deve conter um vértice, enquanto o conjunto de arestas na estrutura do gráfico pode estar vazio, indicando que não há arestas.

Conceitos básicos de gráficos


1. um gráfico não direcionado

Se uma estrutura de gráfico, todas as arestas não têm direcionalidade, esse gráfico é chamado de gráfico não direcionado. Um gráfico não direcionado típico é mostrado na Figura 2. Como as arestas em um gráfico não direcionado não têm direcionalidade, não exigimos a ordem dos dois vértices ao representar as arestas. Por exemplo, a aresta entre o vértice VI e o vértice V5 pode ser expressa como (V2, V6) ou (V6, V2).

Insira a descrição da imagem aqui

Para o gráfico não direcionado na Figura 2, o conjunto de vértices e o conjunto de arestas correspondentes são os seguintes:

V (G) = {V1 , V2 , V3 , V4 , V5 , V6}

E (G) = {V1, V2 (V1 , V3 , (V2 , V6 (V2 , V5 ((V2 , V4) (V4 , V3 (V3 , V5) ( V5 (V6)}

2. gráfico direcionado

Em uma estrutura de gráfico, as arestas são direcionais e, em seguida, esses gráficos são chamados de gráficos direcionados, como mostra a Figura 3. Como as arestas do gráfico são direcionais, temos requisitos na ordem dos dois vértices ao representar as arestas. Usamos colchetes angulares para indicar arestas direcionadas.Por exemplo, <V2, V6> significa do vértice V2 ao vértice V6 e <V6, V2> significa vértice V6 ao vértice V2.

[Falha na transferência da imagem da cadeia externa, o site de origem pode ter um mecanismo de cadeia anti-roubo, é recomendável salvar a imagem e enviá-la diretamente (img-ylFPv8ks-1581605615956) (images / 824470-20180529220933054-293758125.png)]

Figura III grafo orientado

Para o gráfico direcionado na Figura 3, o conjunto de vértices e o conjunto de arestas correspondentes são os seguintes:

V (G) = {V1 , V2 , V3 , V4 , V5 , V6}

E (G) = {<V2 , V1> , <V3 , V1> , <V4 , V3> , <V4 , V2> , <V3 , V5> , <V5 , V3> , <V2 , V5> , < V6 , V5> , <V2 , V6> , <V6 , V2>}

Nota:

Um gráfico não direcionado também pode ser entendido como um gráfico direcionado especial, ou seja, as arestas apontam para os nós uns dos outros, A aponta para B e B aponta para A.

3. Grau de vértice

O número de arestas que conectam os vértices é chamado de grau do vértice. Os graus de vértices têm representações diferentes em gráficos direcionados e não direcionados. Para um gráfico não direcionado, o grau de um vértice V é relativamente simples, que é o número de arestas que conectam o vértice, denotado como D (V). Por exemplo, no gráfico não direcionado mostrado na Figura 2, o grau do vértice V5 é 3. O grau de V6 é 2.

Para um gráfico direcionado, é um pouco mais complicado: de acordo com a direcionalidade da aresta que liga o vértice V, o grau de um vértice é dividido em graus de entrada e saída .

  • O grau é o número de arestas com o vértice como ponto final e é indicado como ID (V).

  • O grau de saída é o número de arestas de saída com o vértice como ponto final e é registrado como OD (V).

    Dessa forma, em um gráfico direcionado, o grau total de um vértice V é a soma dos graus de entrada e saída, ou seja, D (V) = ID (V) + DO (V). Por exemplo, no gráfico direcionado mostrado na FIG. 3, o grau interno do vértice V5 é 3 e o grau externo é 1, então o grau total do vértice V5 é 4.

    4. Vértices adjacentes

    Os vértices adjacentes se referem aos dois vértices de uma aresta na estrutura do gráfico. Os vértices adjacentes têm representações diferentes em gráficos direcionados e não direcionados. Para gráficos não direcionados, os vértices adjacentes são relativamente simples. Por exemplo, no gráfico não direcionado mostrado na FIG. 2, o vértice V2 e o vértice V6 são vértices adjacentes, o vértice V2 e o vértice V5 são vértices adjacentes e assim por diante.

    O gráfico direcionado é um pouco mais complicado: de acordo com a direcionalidade da aresta que liga o vértice V, os dois vértices são chamados de vértice inicial (ponto inicial ou ponto inicial) e vértice final (ponto final). Os vértices adjacentes dos gráficos direcionados são divididos em duas categorias:

  • Vértice adjacente da borda de entrada : o vértice inicial na borda que conecta o vértice. Por exemplo, para os dois vértices que compõem a aresta de <V2, V6>, V2 é o vértice adjacente da aresta de entrada de V6.

  • ** A aresta de saída é adjacente ao vértice: ** O vértice final na aresta que conecta o vértice. Por exemplo, para os dois vértices que compõem a borda de <V2, V6>, V6 é o vértice adjacente da borda de saída de V2.

    5. Gráfico completo não direcionado

    Se houver uma aresta entre cada dois vértices em um gráfico não direcionado, essa estrutura de gráfico será chamada de gráfico completo não direcionado. Um gráfico completo não direcionado típico é mostrado na Figura 4.

Insira a descrição da imagem aqui
A Figura IV não dirigida gráfico completo

Teoricamente, pode-se provar que, para um gráfico completo não direcionado com vértices M, o número total de arestas é M (M-1) / 2. Por exemplo, o número total de arestas na Figura 4 é 5 (5-1) / 2 = 10.

6. Gráfico completo direcionado

Se houver duas arestas em direções opostas entre cada dois vértices em um gráfico direcionado, essa estrutura de gráfico será chamada de gráfico completo direcionado. Um gráfico completo direcionado típico é mostrado na Figura 5.

Insira a descrição da imagem aqui

A Figura V dirigido gráfico completo

Teoricamente, pode-se provar que, para um gráfico completo direcionado contendo N vértices, o número total de arestas é N (N-1). Isso é o dobro de um gráfico completo não direcionado, o que também é fácil de entender porque são necessárias duas arestas entre cada dois vértices.

7. Um dirigida gráfico acíclico DAG (FIG)

Se um gráfico direcionado não puder iniciar a partir de um vértice e retornar a esse ponto através de várias arestas, o gráfico será um gráfico acíclico direcionado.

O gráfico acíclico direcionado pode ser usado na tecnologia blockchain.

Insira a descrição da imagem aqui
  8. Mapa não autorizado e mapa autorizado


Insira a descrição da imagem aqui
Direita aqui descritos pode ser entendida como um valor que se situa entre o nó de borda e se o nó tem um valor numérico, que corresponde, para este lado não tem direito a FIG nenhum valor específica. O relacionamento entre os nós e os nós do gráfico de potência pode precisar de um determinado valor para representar, por exemplo, esse valor pode representar a distância entre dois vértices ou o tempo de um vértice para outro, portanto, o valor dessa aresta é Representando o relacionamento entre dois nós, esse tipo de gráfico é chamado de gráfico de potência;

Por exemplo, na rede de transporte, os pesos ao lado podem indicar a distância ou também indicar

São custos de transporte (obviamente ambos são números). No entanto, os pesos laterais também são possíveis

Outras coisas, como uma string ou até um pacote de dados mais complexo,

Há mais dados nele

[Falha na transferência da imagem da cadeia externa, o site de origem pode ter um mecanismo de cadeia anti-roubo, é recomendável salvar a imagem e enviá-la diretamente (img-S0Ho0WLl-1581605615960) (images / 1071674-20170705165123847-2077753454.png)]

9. Conectividade gráfica

Cada nó do gráfico pode não estar necessariamente conectado por arestas, portanto, isso envolve a conectividade do gráfico, como mostrado abaixo:

Insira a descrição da imagem aqui

Pode-se descobrir que o gráfico acima não está totalmente conectado.

9. Gráfico Simples

Existem dois tipos de arestas entre nós, que são relativamente especiais

1. Auto-loop (auto-loop): a borda do próprio nó, apontando para si mesmo.

2. Arestas paralelas: existem várias arestas conectadas entre dois nós.

[Falha na transferência da imagem da cadeia externa, o site de origem pode ter um mecanismo de cadeia anti-roubo, é recomendável salvar a imagem e enviá-la diretamente (img-8xQiwZT3-1581605615962) (images / 824470-20190420092908548-1950023783.png)]

Ambos os lados são significativos.Por exemplo, da cidade A para a cidade B pode não ter apenas uma estrada, por exemplo, existem três estradas, para que lados paralelos possam ser usados ​​nessa situação. No entanto, esses dois lados aumentarão a dificuldade de implementação no design de algoritmos. O gráfico simples não considera essas duas arestas.

Transversal do gráfico

Travessia em profundidade primeiro e travessia em largura primeiro

图的节点和边的结合变量

package edu.xalead.Graph;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

public class GraphNode {

    private Object data;
    private List<GraphNode> nexts = new ArrayList<>();


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        GraphNode graphNode = (GraphNode) o;
        return Objects.equals(data, graphNode.data) &&
                Objects.equals(nexts, graphNode.nexts);
    }

    @Override
    public int hashCode() {
        return Objects.hash(data, nexts);
    }

    public GraphNode(Object data) {
        this.data = data;
        this.nexts = nexts;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public List<GraphNode> getNexts() {
        return nexts;
    }

    public void setNexts(List<GraphNode> nexts) {
        this.nexts = nexts;
    }
}
两种遍历方法

package edu.xalead.Graph;
import java.util.*;

public class Test {
    /**
     * 图的深度优先(递归)
     * @root 图的起始节点
     * @visited 已经访问过的节点集合
     */
    public static void dft(GraphNode root,ArrayList<GraphNode> visiteds){
        System.out.print (root.getData() + "  ");
        visiteds.add(root);
        for(int i = 0 ; i < root.getNexts().size() ; i++){
            GraphNode t = root.getNexts().get(i);
            if(!visiteds.contains(t)){
                dft(t,visiteds);
            }
        }
    }

    /**
     * 图的广度优遍历
     * @param root 图的起始节点
     * @param visiteds 已经访问过的节点集合
     */
    public static void bft(GraphNode root,ArrayList<GraphNode> visiteds){
        Queue<GraphNode> queue = new LinkedList<>();
        queue.offer(root);
        visiteds.add(root);
        while(!queue.isEmpty()){
            GraphNode poll = queue.poll();
            System.out.print(poll.getData() + "  ");
            for(int i=0;i<poll.getNexts().size();i++){
                GraphNode node = poll.getNexts().get(i);
                if(!visiteds.contains(node)){
                    queue.offer(node);
                    visiteds.add(node);

                }
            }
        }
    }
    public static void main(String[] args) {
        GraphNode node1 = new GraphNode(0);
        GraphNode node2 = new GraphNode(1);
        GraphNode node3 = new GraphNode(2);
        GraphNode node4 = new GraphNode(3);
        GraphNode node5 = new GraphNode(4);
        GraphNode node6 = new GraphNode(5);
        GraphNode node7 = new GraphNode(6);
        GraphNode node8 = new GraphNode(7);

        node1.getNexts().add(node2);
        node1.getNexts().add(node3);
        node3.getNexts().add(node7);
        node2.getNexts().add(node4);
        node2.getNexts().add(node5);
        node4.getNexts().add(node6);
        node5.getNexts().add(node6);
        node5.getNexts().add(node8);


        System.out.println("图的深度优先遍历(递归 栈)");
        dft(node1,new ArrayList<>());
        System.out.println();
        System.out.println("图的广度度优先遍历(队列)");
        bft(node1,new ArrayList<>());


    }
}

Os resultados mostram:

Insira a descrição da imagem aqui

101 artigos originais publicados · Gostei 47 · Visitantes com mais de 10.000

Acho que você gosta

Origin blog.csdn.net/TONGZONGE/article/details/104304490
Recomendado
Clasificación