¿Qué es un árbol y un gráfico en las estructuras de datos?

Son muy parecidos. Sin embargo, un árbol implica una estructura jerárquica, mientras que un gráfico implica conexiones arbitrarias.

Piensa en un sistema de archivos. ¿Es un árbol o un gráfico? Si visualiza la estructura del directorio, probablemente concluiría que es un árbol debido a la forma en que se “ramifica” en una forma jerárquica limpia.

(Imagen de ejemplo de: ¿Qué es el sistema de archivos? – Definición de WhatIs.com )

Ahora puede hacer que los sistemas de archivos se parezcan más a un gráfico si usa enlaces de archivos, pero ese no es un ejemplo terriblemente bueno de un gráfico. Un mejor gráfico es tuyo y de tus amigos en Facebook. Puede representar gráficamente todas las relaciones que tiene allí, pero no hay un punto de partida claro. (¡Y muy probablemente no haya puntos finales!) Se podría decir que USTED es la raíz (porque el universo gira alrededor de USTED, ¿verdad?), Pero eso no sería más válido que su amiga argumentando que ella es el punto central.

(Ejemplo del usuario Murta en StackExchange: ¿Cómo jugar con datos de Facebook dentro de Mathematica? )

Ambas soluciones funcionan a partir de “nodos” que unen los elementos. La única diferencia práctica real es que un árbol tiene un punto de partida claro, mientras que un gráfico debe permitir la búsqueda de los nodos independientemente del recorrido. De lo contrario, nunca podría encontrar un lugar para comenzar.

ÁRBOL

Introducción a los arboles

Árbol binario

Árbol de búsqueda binaria

Implementación de BST

GRAFICO

Introducción a los gráficos.

Propiedades del grafo

Gráficos transversales (DFS y BFS)

Ahora que hemos visto el gráfico y algunas de sus propiedades, intentaremos explorar cómo atravesar el gráfico y buscar un nodo en particular.
Hay 2 enfoques populares para hacer recorridos de gráficos:
* Profundidad primera búsqueda (DFS)
* Amplitud primera búsqueda (BFS)
Los veremos en este video:

Ejemplo de implementación de BFS y DFS

DFS:

Pasos Algorítmicos

Paso 1: Empuje el nodo raíz en la Pila.
Paso 2: Haz un bucle hasta que la pila esté vacía.
Paso 3: mira el nodo de la pila.
Paso 4: si el nodo tiene nodos secundarios no visitados, obtenga el nodo secundario no visitado, márquelo como atravesado y empújelo en la pila.
Paso 5: si el nodo no tiene nodos secundarios no visitados, saque el nodo de la pila.

Según los pasos anteriores, el siguiente código Java muestra la implementación del algoritmo DFS:

public void dfs () {
// DFS usa la estructura de datos Stack
Pila s = nueva Pila ();
s.push (this.rootNode);
rootNode.visited = true;
printNode (rootNode);
while (! s.isEmpty ()) {
Nodo n = (Nodo) s.peek ();
Nodo hijo = getUnvisitedChildNode (n); // Esencialmente, esta función pasa por los vecinos de n, y encuentra la que tiene node.visited = false
if (child! = null) {
child.visited = true;
printNode (hijo); // imprime el nodo como quieras.
s.push (niño);
}
más {
s.pop ();
}
}
// Borrar propiedad visitada de nodos
clearNodes ();
}

BFS

Pasos Algorítmicos

Paso 1: Empuje el nodo raíz en la Cola.
Paso 2: realiza un bucle hasta que la cola esté vacía.
Paso 3: eliminar el nodo de la cola.
Paso 4: si el nodo eliminado tiene nodos secundarios no visitados, márquelos como visitados e inserte los secundarios no visitados en la cola.

Según los pasos anteriores, el siguiente código Java muestra la implementación del algoritmo BFS:

public void bfs () {
// BFS usa la estructura de datos de cola
Cola q = nueva LinkedList ();
q.add (this.rootNode);
printNode (this.rootNode);
rootNode.visited = true;
while (! q.isEmpty ()) {
Nodo n = (Nodo) q.remove ();
Nodo hijo = nulo;
while ((child = getUnvisitedChildNode (n))! = null) {
child.visited = true;
printNode (hijo);
q.add (niño);
}
}
// Borrar propiedad visitada de nodos
clearNodes ();
}

Diferencia entre árboles y gráficos | Árboles vs. Gráficos – FreeFeast.info: Preguntas de la entrevista, Gadgets impresionantes, Guía de motivación de la personalidad, Personalidades famosas de TI

leer hay una tabla bien explicada

More Interesting

¿Resolver problemas en Topcoder / Codeforces es una buena manera de aprender Java Collections Framework?

¿Cuál es el mejor algoritmo para ordenar una pila de 400 exámenes de algoritmos, si tiene 16 TA?

Cómo encontrar la complejidad de tiempo de caso promedio de un algoritmo

Dos jugadores juegan el siguiente juego: hay N piedras en la mesa, el jugador puede tomar 1 o 2 piedras (si N mod 3 = 0), 1 o 3 (si N mod 3 = 1) y 1, 2 o 3 ( si N mod 3 = 2). ¿Cómo determino al ganador en el juego?

¿Desde dónde puedo aprender estructuras de datos en Bhopal?

Cómo escribir un validador de sangría de Python

¿Alguien ha probado algún algoritmo de aprendizaje automático en diseño o verificación de hardware?

¿Cómo resuelven los árboles de segmentos el problema de apuñalamiento (todos los intervalos que contienen un punto dado)?

¿Qué calcularía los algoritmos pesados ​​en matemáticas más rápido: FPGA o GPU?

Cómo resolver la Tierra y los meteoritos en el Algoritmo Calificador 2 de Hackerearth

¿Cómo es posible que algún algoritmo sea más rápido que cualquier otro algoritmo similar para algunos valores de la variable de entrada y más lento para otros valores?

¿El algoritmo de Kruskal resuelve siempre el problema del vendedor ambulante?

¿Puede mostrar que la ordenación por fusión tiene complejidad de tiempo [matemática] O (n \ log n) [/ matemática]?

Cómo resolver el problema INUMBER usando gráficos

Cómo ordenar la matriz de tipos primitivos en orden descendente en Java