Vous êtes sur la page 1sur 43

GRAFOS

Los grafos tienen aplicaciones en campos tan diversos como lo son la


Sociología
 Química
 Geografía
 Ingeniería Eléctrica
 Ingeniería Industrial, etc.
Se estudian como estructuras de datos o tipos de datos abstractos.

GRAFOS Y SUS APLICACIONES


Con los árboles se han representado relaciones entre objetos en la que
existe una sola jerarquía, es decir cada nodo puede tener como
máximo un predecesor o raíz.

Con frecuencia, es necesario representar relaciones más complejas o


arbitrarias entre nodos de datos o componentes y esta estructura
recibe el nombre de grafo o gráfica.

Las gráficas o grafos son estructuras de datos no lineales donde cada


componente puede tener uno o más predecesores o sucesores.

CLASIFICACIÓN
Los grafos se clasifican en grafos dirigidos y no dirigidos y son
modelos naturales de relaciones arbitrarias.

SE USAN PARA REPRESENTAR


 Redes al alcantarillados
 Redes de comunicaciones
 Circuitos eléctricos, etc.
Departamento de Computación y Simulación de Sistemas

Una vez modelado el problema mediante grafos se pueden hacer


estudios de diversas propiedades. Esta teoría ha sido aplicada en
diversas ciencias.

El primer paso siempre será representar el problema como un grafo.


En esta representación cada elemento o cada objeto del problema
representa un nodo.

La relación, comunicación o conexión entre los nodos da lugar a una


arista, que puede ser dirigida (con una dirección específica) o
bidireccional (no dirigida).

Impresora
Modem

PC1
Servidor

PC2
GRAFO REPRESENTANDO UNA RED DE COMUNICACIÓN

2
Departamento de Computación y Simulación de Sistemas

CONCEPTOS BÁSICOS
Un grafo consiste en un conjunto de vértices o nodos V y conjunto de
arcos o aristas A. Se representa por G = {V, A}

1 4

5 MODELO 1

7 9

El conjunto de vértices V = {1, 4, 5, 7, 9}


El conjunto de arcos A = {(1,4), (5,1), (7,5), (7,9), (4,9)}
Forman el grafo no dirigido G = {V, A}

C E MODELO 2

F
D H

El conjunto de vértices V = {C, D, E, F, H}


El conjunto de arcos A = {(C, D), (D, F), (E, H), (H, E), (E, C)}
Forman el grafo dirigido G = {V, A}

Un arco o arista está formado por un par de nodos y se escribe (u, v)


siendo u, v el par de nodos terminales.

Un grafo es dirigido (dígrafo) si los pares de nodos que forman los


arcos están ordenados, se representa u v.
El Modelo 2 es un ejemplo de grafo dirigido.

Un grafo no dirigido es aquel en que los arcos están formados por


pares de nodos no ordenados o no direccionados, se representa u -- v.
El Modelo 1 es un ejemplo de grafo no dirigido.

3
Departamento de Computación y Simulación de Sistemas

DEFINICIONES:
Bucle o lazo: es una arista que conecta un vértice consigo mismo, es
decir si tiene los extremos idénticos.
Grado de un Vértice: es el número de aristas que tienen al vértice v
como extremo. Si el grado (v) = 0 (v no tiene aristas) se dice que v es
un nodo aislado. En el modelo 2, el grado del vértice E = 3

C E MODELO 2

F
D H

Grado de Entrada de un Vértice: representa el número de arcos que


terminan en un determinado nodo y se identifica por ge (vi). En el
modelo 2, el ge (E) = 1.

Grado de Salida de un vértice: representa el número de arcos que


empiezan en un determinado nodo y se identifica por gs (vi). En el
modelo 2, el gs (E) = 2.

Camino: Un camino P de longitud n se define como la secuencia de n


vértices que se deben seguir para llegar del vértice v1 (origen) al
vértice vn (destino):
P = (v1,..., vn) De tal modo que vi es adyacente a v i+1 para i= 1, 2,…, n-1.
En el modelo 2, el camino P [E, F] = (E, C, D, F)

Camino Simple: Un camino es simple si todos los nodos que forman el


camino son distintos, pudiendo ser iguales los extremos del camino.
Modelo 3 4 7
P1= (4, 6, 9,7)
10
Camino de Long. = 3
11
6 9

4
Departamento de Computación y Simulación de Sistemas

Camino cerrado: El camino P es cerrado si el primero y el último vértice


es igual, es decir v1 = vn. En el modelo 4 P2 = (A, E, B, F, A).

Circuito o ciclo: es un camino cerrado de longitud 3 o mayor, en el cual


el vértice inicial coincide con el final. Un ciclo de longitud k se llama k-
ciclo.

A B C

D E F
Modelo 4
P2 = (A, E, B, F, A) es un grafo dirigido que forma un ciclo de longitud 4

Una gráfica dirigida o digráfica: Es aquella en que cada arista tiene


una dirección asignada; El modelo 4 es gráfica dirigida.

Una arista dirigida a = (E,D): se llama arco y se expresa a = E D,


1. a empieza en E y termina en D.
2. E es el origen o punto inicial de a y D es el destino o punto terminal
de a.
3. E es predecesor de D y D es un sucesor o vecino de E.
4. E es adyacente hacia D y D es adyacente desde E.

Un grafo no dirigido conexo o grafo conexo G es conexo si existe un


camino entre cualquier par de sus nodos.

3 5

2 7
Modelo 5

5
Departamento de Computación y Simulación de Sistemas

Un grafo dirigido es fuertemente conexo si existe un camino entre


cualquier par de los nodos que forman el grafo

5 8

Modelo 6

Un grafo dirigido es conexo si existe una cadena que une cualquier par
de vértice.
A

H B

MODELO 7

Un grafo es completo si existe adyacencia entre todos los nodos que


forman el grafo, es decir que: cada vértice v de G es adyacente a todos
los demás vértices de G. Un grafo completo de n vértices tendrá n(n –
1)/2 aristas.

H B

# Aristas = n(n-1)/2
D

6
Departamento de Computación y Simulación de Sistemas

# Aristas = 4(3)/2 =6
MODELO 8

Grafo árbol: Se dice que una gráfica G es del tipo árbol si G es una
gráfica conexa sin ciclos. En el grafo del Modelo 3, P1 es un grafo
árbol.

Gráfica etiquetada: Se dice que una gráfica G es etiquetada si sus


aristas tienen asignado un valor. Este valor numérico no negativo es
c(a) es llamado costo, peso o longitud de a. Cada camino P de G tendrá
un peso o longitud que será la suma de los pesos de las aristas que
forman el camino. Gráfica etiquetada:

8
C E MODELO 2
10
4
F
D H
2

Multigráfica: Una gráfica G se denomina multigráfica si al menos 2 de


sus vértices están conectados entre sí por medio de 2 aristas. Dichas
aristas reciben el nombre de aristas múltiples o paralelas. El grafo del
modelo 6, es de tipo multigráfica.

Subgráfica: Dada la gráfica G = (V, A), G’ = (V’, A’), se denomina


subgráfica de G si V’ ≠ Ф, V’ pertenece al conjunto V y A’ pertenece al
conjunto A, donde cada arista de A’ es incidente con vértices de V’.

Fuente: Un nodo V se llama fuente si tiene un grado de salida positivo y


un grado de entrada nulo. En el modelo 2, el nodo D es de tipo fuente.

7
Departamento de Computación y Simulación de Sistemas

Sumidero: Un nodo V de llama sumidero si tiene un grado de salida nulo


y un grado de entrada positivo. En el modelo 2, el nodo F y C son de tipo
sumidero.

REPRESENTACIÓN DE LOS GRAFOS


Existen dos formas estándares de mantener un grafo en memoria del
computador. Una forma esta basada en la matriz de adyacencia A. Y la
otra forma basada en la lista en enlazada de vecinos.

MATRIZ DE ADYACENCIA:
Es una matriz booleana de orden n, donde n indica el número de
vértices de G. Los renglones y columnas de la matriz representan a los
vértices y su contenido la existencia o no de arcos entre ellos. Por lo
tanto cada elemento i, j de la matriz almacenada tendrá un 1 si existe
un arco o un 0 si no existe un arco entre los vértices i, j.

Para generar la matriz de adyacencia:


1. Dé un orden a los vértices,
2. Use este orden para nombrar las filas y columnas de la matriz

3. El elemento a ij , recibe valor de acuerdo a los siguientes

criterios:
1 si vi es adyacente a vj o sea si existe una arista
a ij = (vi, vj)
0 en caso contrario

La matriz A de un grafo depende de la ordenación de los nodos del


grafo; esto significa que para diferentes ordenaciones de los nodos
pueden resultar diferentes matrices de adyacencias, aunque sea la
misma matriz.

8
Departamento de Computación y Simulación de Sistemas

Veamos un Ejemplo:
Considere el siguiente grafo dirigido. Suponga que los nodos se
guardan en memoria en un arreglo lineal DATOS tal como sigue:

DATOS:
Y X

Z W
Asumimos que el orden de los nodos es el siguiente:
V1 = X, V2 = Y, V3 = Z, V4 = W.
X Y Z W
X 0 0 0 1
Y 1 0 1 1
DATOS = Z 1 0 0 1
W 0 0 1 0

Una ventaja de la matriz de adyacencia es que el tiempo de acceso a un


elemento es independiente del tamaño.
La principal desventaja de la matriz de adyacencia es que requiere n 2
posiciones de memoria para almacenar un grafo de n nodos, aunque el
número de arcos sea mucho menor.

TRASPUESTA DE LA MATRIZ DE ADYACENCIA


Representa la misma matriz del grafo, solo que en este caso las de
direcciones de éste, están invertidas.

9
Departamento de Computación y Simulación de Sistemas

MATRIZ DE CAMINOS
Esta operación sobre los grafos puede obtenerse de dos formas:
 Mediante la Potencia de Matrices y Sumatoria de Matrices
 Mediante el Algoritmo de Warshall

Potencia de Matrices
Considere las siguientes potencias de la matriz de adyacencia A 1, A2,
A3,… Ak. De un grafo dado “G”. Sea:

Ak (i, j) = Esta matriz da como resultado el número de caminos de


longitud k desde el nodo vi al nodo vj.

Esta entrada da como resultado el número de camino


A1 (i, j) = de longitud 1 desde el nodo vi al nodo vj.

Esta entrada da como resultado el número de


A2 (i, j) = camino de longitud 2 desde el nodo vi al nodo vj.

TEOREMAS: sea A la matriz de adyacencia de un grafo “G”. Entonces,


la matriz Ak, da el número de caminos de longitud k desde el vértice vi
hasta el vértice vj.

X Y Z W
X 0 0 0 1
Y 1 0 1 1
A = Z 1 0 0 1
W 0 0 1 0

Para recordar, el proceso de multiplicación de matrices se lleva a cabo


de la siguiente forma: la sumatoria de la multiplicación de la primera
fila de la primera matriz por la primera columna de la segunda matriz.

10
Departamento de Computación y Simulación de Sistemas

A2 = A X A X Y Z W
X 0 0 1 0
Y 1 0 1 2
A2 = Z 0 0 1 1
W 1 0 0 1

A3 = A 2 X A X Y Z W
X 1 0 0 1
Y 1 0 2 2
A3 = Z 1 0 1 1
W 0 0 1 1

A4 = A 3 X A X Y Z W
X 0 0 1 1
Y 2 0 2 3
A4 = Z 1 0 1 2
W 1 0 1 1

a) Hay un camino de longitud 2 que va desde el v1 al v3


b) Hay dos caminos de longitud 3 que va desde le v2 al v3
c) Hay tres caminos de longitud 4 que va desde el v2 al v4

Supongamos que ahora definimos la matriz Bk de la siguiente forma:

Bk = A1+A2+A3+... Ak.

De esta forma las entradas ij de la matriz Bk da el número de caminos


de longitud k o menor del vértice vi al vértice vj.

11
Departamento de Computación y Simulación de Sistemas

Para el caso anterior Tenemos:


B4 = A1+A2+A3+ A4.
1 0 2 3
5 0 6 8
B4 = 3 0 3 5
2 0 3 3

Matriz de camino: Sea “G” un grafo dirigido simple con m nodos V1,
V2, ....Vm. La matriz de caminos o matriz de alcance de G es la matriz
m-cuadrada definida por:

P ij = 1 si hay un camino desde vi a vj


0 en caso contrario

RELACION ENTRE P Y B:
Sea A la matriz de adyacencia y P la matriz de camino del grafo,
entonces una entrada de matriz de camino pij será igual a 1 si y solo
si, existe un entero positivo en la entrada ij de la matriz Bk.

1 0 1 1
1 0 1 1
Matriz de camino
P = 1 0 1 1 Encontrada
1 0 1 1

12
Departamento de Computación y Simulación de Sistemas

ALGORITMO DE WARSHALL
Partiendo de la matriz de adyacencia se puede tener la matriz de
camino sin tener que calcular las distintas matrices de adyacencias.
Para ello utilización los conceptos del Algoritmo de Warshall.

Tenemos un grafo “G” con “n” vértices representado por la matriz de


adyacencia A. Queremos encontrar la matriz de camino “P” del grado
“G”.

Se define una serie de matrices m-cuadradas de 0 y 1 denominadas


por P0, P1, P2, P3,... Pm. Luego los elementos de cada matriz Pk [i,j]
tienen el valor de cero (0) si no existe camino y uno (1) si existe camino
entre el vértice i y el vértice j. La diferencia entre las matrices P k y Pk-1
radica en la incorporación del vértice k para poder formar el camino
del vértice i al vértice j.

1 si existe un arco del vértice i al vértice j.


P0 [i, j] =
0 en caso contrario

1 si existe un camino simple del vértice i al vértice j


que no pasa por ningún otro vértice a no ser el
vértice 1.
P1 [i, j] = 0 en otro caso

1 si existe un camino simple del vértice i al vértice j


P2 [i, j] = que no pasa por ningún otro vértice a no ser los que
están comprendido entre el vértice 1...2
0 en otro caso
En cada paso se incorpora un nuevo vértice el que coincide con el
índice de P o los anteriores para formar un camino.

1 si existe un camino simple del vértice i al vértice j


Pk [i, j] = que no pasa por ningún otro vértice a no ser los que
están comprendido entre el vértice 1...k

0 en otro caso

13
Departamento de Computación y Simulación de Sistemas

1 si existe un camino simple del vértice i al vértice j


que no pasa por ningún otro vértice a no ser los que
Pn [i, j] = están comprendido entre el vértice 1...n. En
definitivo en el camino puede estar cualquier vértice.

0 en otro caso

Procedimiento:
 Transferimos a la matriz Pk a todas los entradas de la matriz P k-1
 Listar todas las localidades p1, p2, p3...pk de la columna k de la
matriz Pk-1 donde la componente sea igual a 1 y las localidad q1,
q2, q3,... qk, del renglón k de la matriz Pk-1 donde donde la
componente sea igual a 1
 Acomodar unos en todas las posiciones (pi, qj) de la matriz P k si
todavía no los tiene.
Veamos el ejemplo:

Partiendo del matriz de adyacencia “A”:

0 0 0 1
1 0 1 1
A= 1 0 0 1
0 0 1 0

Hacemos a P0 = A; para cuando k = 0


pk

0 0 0 1 qk
1 0 1 1
P0 = 1 0 0 1
0 0 1 0

Luego se sigue el procedimiento dado por el algoritmo de Warshall


Para cuando K = 1 tenemos los valores de la matriz Pk-1.
pk-1 = 2,3 qk-1 = 4 Combinamos (2,4) y (3,4)
pk

0 0 0 1
1 0 1 1 qk
P1 = 1 0 0 1
0 0 1 0

14
Departamento de Computación y Simulación de Sistemas

Y este proceso se hace repetitivo encontrando P2, P3..... hasta Pm = P

..
...

1 0 1 1
1 0 1 1
P4 = 1 0 1 1
1 0 1 1

ALGORITMO DE CAMINOS MINIMOS:

Sea “G” un grafo dirigido con “m” nodos, v1, v2, v3,.....vm. Para cada
arista “e” del grafo se tiene un asignado un número no negativo w (e)
llamado peso o longitud de la arista “e”. Entonces el grafo “G” se
puede mantener en memoria por la matriz de sus pesos W = [wij]
definida de la siguiente forma:

1 si existe una arista “e” del vértice i al vértice j.


WIJ =
0 en caso contrario

La matriz de caminos nos dice si existe un camino entre dos nodos. Se


debe encontrar una matriz Q = (qij) que nos diga las longitudes de los
caminos mínimos entre dos nodos o más exactamente: una matriz
Q = (qij) dónde
qij = longitud del camino mínimo de vi a vj.

Para ello se define una secuencia de matrices Q0, Q1, Q2,..Qm cuyas
entradas vienen dada por:

Qk [i,j] = la menor de las entradas de los anteriores caminos de vi


a vj o la suma de las longitudes de los anteriores caminos de vi a
vk y de vk a vj.

Mas exactamente:

15
Departamento de Computación y Simulación de Sistemas

Qk [i,j] = MINQk-1 [i, j] = ( Qk-1 [i, k] + Qk-1 [k, j] )

La matriz inicial Q0 es la matriz de W excepto que los ceros “0” de la


matriz de pesos “W” se reemplazan por  (representa un camino muy
grande).

La matriz fina Qm será la matriz Q de caminos mínimos deseada.

Veamos el siguiente ejemplo:


Se define a V1 = R, V2 = S , V3 = T , V4 = U

7 R 4 U

5 7 2 1

S T
3

Definimos la Matriz de pesos “W” de la siguiente forma:


R S T U
R 7 5 0 0
S 7 0 0 2
W= T 0 3 0 0
| U 4 0 1 0

Al hacer a Q0 = W; para cuando k = 0 se reemplaza por infinito α.


pk

7 5 α α qk
7 α α 2
Q0 = α 3 α α
4 α 1 α

El proceso a seguir es similar al utilizado en el algoritmo de Warshall.


Para cuando K = 1 tenemos:

16
Departamento de Computación y Simulación de Sistemas

pk-1 = 1, 2, 4 y la qk-1 = 1, 2

Luego Combinamos y se obtiene (1,1), (1,2), (2,1), (2,2), (4,1), (4,2)

Qk [i,j] = MIN(Qk-1 [i, j] , Qk-1 [i, k] + Qk-1 [k, j] )

Q1 [1,1] = MIN(Q0 [1,1] , Q0 [1,1] + Q0 [1,1] ) = 7

Q1 [1,2] = MIN(Q0 [1,2] , Q0 [1,1] + Q0 [1,2] ) = 5

Q1 [2,1] = MIN(Q0 [2,1] , Q0 [2,1] + Q0 [1,1] ) = 7

Q1 [2,2] = MIN(Q0 [2,2] , Q0 [2,1] + Q0 [1,2] ) = 12

Q1 [4,1] = MIN(Q0 [4,1] , Q0 [4,1] + Q0 [1,1] ) = 4

Q1 [4,2] = MIN(Q0 [4,2] , Q0 [4,1] + Q0 [1,2] ) = 9


pk

7 5 α α
7 12 α 2 qk
Q1 = α 3 α α
4 9 1 α

Y el proceso se hace repetitivo hasta encontrar a Qm = Q.


..
....

7 5 8 7
7 11 3 2
Qm = 9 3 6 5
4 4 1 6

17
Departamento de Computación y Simulación de Sistemas

PRACTICA
Concepto Generales de Grafos, Algoritmo de Warshall y
Caminos Mínimos

Para el siguiente grafo, cuyo datos se muestra en el siguiente orden:

DATOS : X, Y; S, T

X 5 Y

2 3 1 6 7

4
S T
8

1. Encontrar la matriz de adyacencia.


2. encontrar la matriz de caminos mediante la potencia de la matriz de
adyacencia.
3. Encontrar la matriz “W”.
4. Encontrar la matriz P mediante el algoritmo de Warshall.

18
Departamento de Computación y Simulación de Sistemas

5. Encontrar la matriz de caminos mediante el algoritmo de caminos


mínimos.
6. Cual el grado de entrada de cada vértice de “G”.
7. Cual es el grado de salida de cada vértice de “G”.
8. Encuentre todos los caminos simples de X a T.
9. Existen fuentes o sumideros en el “G” dado? Cuales son?
10. Es el grafo conexo?
11. Es el grafo fuertemente conexo?
12. Es el grafo completo?
13. Identifique un circuito en el grafo?

REPRESENTACIÓN ENLAZADA DE GRAFOS


Considere el siguiente grafo “G”:
A D

B C
Como primer punto mostramos una tabla que representa a cada nodo del
grado “G” seguida por una lista de nodos adyacentes, también llamados
sucesores o vecinos.

NODOS LISTA DE ADYACENCIA


A B, C, D
B C
C
D C, E
E C

Como segundo punto mostramos un diagrama esquemático de la


representación enlazada de grafos “G” en memoria del computador:

19
Departamento de Computación y Simulación de Sistemas

A Nil
Principio

B Nil

C Nil

D Nil

E NIL Nil

Para le representación enlazada de grafos se usaran dos listas o archivos,


una lista de nodos “NODO” y una lista de aristas “ARISTA”

a) Lista de nodos “NODO”


NODO SIG ADY

NODO: Será el nombre o valor clave del nodo


SIG: Será un puntero al siguiente nodo de la lista NODO.
ADY: Será un puntero al primer elemento de la lista de adyacencia del
nodo que se mantiene en la lista de aristas “ARISTA.

Los nodos mismos estarán organizad como una lista enlazada y por tanto
habrá una variable puntero:

PRINCIPIO: Puntero que indica el comienzo de la lista de nodos


“NODO”.
NDISP: Puntero que indica la lista de espacios disponibles en la lista
de nodos “NODO”.
b) Lista de Aristas “ARISTA”.
DEST ENL

DEST: Apuntará a la posición de la lista nodo “NODO” del nodo destino


o terminal de la arista.

ENL: Enlazará juntas las aristas con el mismo nodo inicial, o sea los
nodos con las misma lista de adyacencia.

20
Departamento de Computación y Simulación de Sistemas

En la lista de aritas también se necesitan una variable puntero para:

ADISP: indica el inicio de la lista de espacios disponibles en la lista ARISTA.

EJEMPLO: ADISP
2
Principio
NODO SIG ADY DEST ENL
1 3 1 2(C) 7
4
2 C 9 0 2 5
3 8 3 7(B) 10
4 A 7 3 4 9(D) 0
NDISP
5 1 5 8
6 E 0 11 6 2(C) 0
5
7 B 2 6 7 6(E) 0
8 10 8 9
9 D 6 1 9 12
10 0 10 2(C) 4
11 2(C) 0
12 0

REPRESENTACIÓN EN PASCAL

Type
PtrDir = ^NodoDir
PtrAdy = ^NodoLy
NodoDir = record
Vert : String; (indentificador del Vértice)
Lady : PtrAdy;
Sgte : PtrDir
end;

NodoLy = record
PtrV : PtrDir;
Sgte : PtrAdy
end;

OPERACIONES SOBRE LOS GRAFOS

Las operaciones que pueden ser realizada en el mantenimiento de los grafos


son las siguientes:

21
Departamento de Computación y Simulación de Sistemas

 Recorridos “En anchura y en Profundidad”


 Inserción, Eliminación de nodos y de aristas.

RECORRIDO DE UN GRAFO
Muchos de los algoritmos de grafos requieren que se examine
sistemáticamente los nodos y las aristas de un grafo “G”. Esto puede ser
realizado de dos formas estándar. Una forma llamada búsqueda en anchura
y la otra búsqueda en profundidad. Las búsqueda en anchura usará una cola
como una estructura auxiliar para mantener los nodos que se vayan a
procesar posteriormente y análogamente, la búsqueda en profundidad usará
una pila.

Durante la ejecución de estos algoritmos cada nodo “N” del grafo “G” estará
en un estado, lo cual se llama estado del nodo “N”, tal como sigue.

Estado = 1 (Estado de Preparado). Representa el Estado Inicial del


Nodo “N”
Estado = 2 (Estado de Espera). El nodo “N” está en cola o en la pila,
esperando a ser procesado.
Estado = 3 (Estado de Procesado). El nodo “N” ha sido procesado.

ALGORITMO DE BÚSQUEDA EN ANCHURA


1. Poner todos los nodos en estado de preparado.
2. Colocar el nodo de partida “N” en la cola y poner su estado en espera.
3. Repetir los pasos 4 y 5 mientras la cola tenga elementos.
4. Sacar el nodo “N” del frente de la cola procesarlo y ponerlo en estado
de procesado.
5. Poner en la cola todos los vecinos del nodo “N” cuyo estado sea
preparado y cambiar su estado a espera.
6. Salir.

EJEMPLO:

22
Departamento de Computación y Simulación de Sistemas

Suponga que el grafo “G” representa los vuelos diarios entre ciudades de
alguna compañía aérea y suponga que deseamos volar de la ciudad A a la
ciudad C. Con el mínimo número de paradas. En otras parabras se desea el
Camino Mínimo “P” desde A hasta C. (Longitud Aristas (1 KM).

A E
NODOS SUCESORES
D A B,D,E
B
C B
C D B,C
B E C,D

Primero procedemos a poner todos los nodos en Estado de Preparado =1

Añadimos A a la cola y ponemos su Estado en Espera = 2

FRENTE = 1 COLA = A
FINAL = 1 ORIG = 0

Quitamos A del frente de la cola (Frente = Frente + 1) cambiamos su Estado


a Procesado = 3 y añadimos a la cola los vecinos de A y cambiamos su
Estado a Espera = 2

FRENTE = 2 COLA = A B D E
FINAL = 4 ORIG = 0 A A A

Quitamos B del frente de la cola (Frente = Frente + 1) cambiamos su Estado


a Procesado = 3 y añadimos a la cola los vecinos de B y cambiamos su
Estado a Espera = 2

FRENTE = 3 COLA = A B D E
FINAL = 4 ORIG = 0 A A A

Quitamos D del frente de la cola (Frente = Frente + 1) cambiamos su Estado


a Procesado = 3 y añadimos a la cola los vecinos de D y cambiamos su
Estado a Espera = 2

FRENTE = 4 COLA = A B D E C
FINAL = 5 ORIG = 0 A A A D

Este algoritmo termina cuando el punto destino ingresa a la cola.

23
Departamento de Computación y Simulación de Sistemas

El camino Resultante sería P = C D A

BÚSQUEDA EN PROFUNDIDAD

Este algoritmo es muy similar al de búsqueda en anchura excepto que


usamos una pila en ligar de una cola. Es utilizado para encontrar los nodos
alcanzables desde un nodo “N” en particular.

ALGORITMO DE BÚSQUEDA EN PROFUNDIDAD


1. Poner todos los nodos en estado de preparado. (Estado = 1)
2. Colocar el nodo de partida “N” en la pila y poner si estado en espera
(Estado = 2)
3. Repetir los pasos 4 y 5 hasta que la pila este vacía.
4. Sacar el nodo del Tope de la pila. Pila(Tope) = N. Procesarlo y ponerlo
en estado de procesado (Estado = 3).
5. Meter en la pila todos los vecinos del nodo “N” cuyo estado sea
preparado (Estado = 1) y cambiar su estado a espera (Estado = 2)
6. Salir.

A E NODOS SUCESORES
D A B,D,E
B
C B
C D B,C
B E C,D

Supongamos que deseamos encontrar e imprimir todos los nodos alcanzados


desde el nodo E.

Primero procedemos a poner todos los nodos en Estado de Preparado =1

Poner el Nodo E en la Pila y cambiar su estado a espera. Estado = 2


PILA = E Tope = 1
Sacar e Imprimir el elemento E del tope de la pila poner su estado en
procesado Estado = 3 y luego meter los vecinos de nodo E a la pila y
cambiar su estado a espera Estado = 2.

24
Departamento de Computación y Simulación de Sistemas

PILA = C, D Tope = 2 Imprimir = E


Sacar e Imprimir el elemento D del tope de la pila poner su estado en
procesado Estado = 3 y luego meter los vecinos de nodo D a la pila y
cambiar su estado a espera Estado = 2.
PILA = C, B Tope = 2 Imprimir = E, D
Sacar e Imprimir el elemento B del tope de la pila poner su estado en
procesado Estado = 3 y luego meter los vecinos de nodo B a la pila y
cambiar su estado a espera Estado = 2.
PILA = C Tope = 1 Imprimir = E, D, B
Sacar e Imprimir el elemento C del tope de la pila poner su estado en
procesado Estado = 3 y luego meter los vecinos de nodo C a la pila y
cambiar su estado a espera Estado = 2.
PILA = Nil Tope = 0 Imprimir = E, D, B,C

Los nodos alcanzables desde E son B, C, D

INSERCIÓN EN UN GRAFO

1) Inserción de un nodo
tipo
enlace = ^puntero
nodo = registro
info :string;
sig : enlace;
ady : enlace
fin;
arista record
dest : enlace;
enl : enlace
end;

Procedimiento INSNODO(NODO, SIG, ADY, PRINCIPIO, NDISP, N, INDIC)


SI NDISP = NILL
ENTONCES
INDIC := FALSE “DESBORDAMIENTO
DE OTRO MODO
NUEVO NDISP
NDISP NDISP^SIG
NUEVO^info N
NUEVO^SIG PRINCIPIO
PRINCIPIO NUEVO
NUEVO ^ADY NILL

25
Departamento de Computación y Simulación de Sistemas

RETORNAR

2) Inserción de una Arista


POSA representa la vértice inicial donde comienza la arista.
POSB representa el vértice de finaliza la arista a Insertar.

Procedimiento INSARISTA(NODO, SIG, ADY, PRINCIPIO, DEST,


ENL, ADISP, POSA; POSB; INDIC)

SI ADISP = NILL
ENTONCES
INDIC := FALSE “DESBORDAMIENTO
DE OTRO MODO
NUEVO ADISP
ADISP ADISP^ENL
NUEVO^DEST POSB
NUEVO^ENL POSA^ADY
POSA ^ADY NUEVO
RETORNAR
VEAMOS EL EJEMPLO

PRINCIPIO = 1 NDISP = 5
NODO A B E D C
SIG 7 4 0 6 8 0 2 3
ADY 1 2 5 7 6

ADISP = 8
DEST 2 6 4 6 7 4 4 6
ENL 10 6 0 0 0 3 0 4 0 0

INSERTAR EL NODO “F”

PRINCIPIO = 5 NDISP = 8

NODO F
SIG 1
ADY NIL

ADISP = 8 (No sufre cambios)


DEST
ENL

El nodo queda al inicio de la lista nodo. Y el resto de lista nodo queda igual.
Adicionalmente la lista de arista no sufre cambios.

INSERTAR LA ARISTA (A,F)

PRINCIPIO = 5 NDISP = 8

26
Departamento de Computación y Simulación de Sistemas

NODO A B E F D C
SIG 7 4 0 6 1 0 2 3
ADY 1 2 5 NIL 7 6

ADISP = 8
DEST 2 6 4 6 7 4 4 6
ENL 10 6 0 0 0 3 0 4 0 0

POSA = 1 POSB = 5 NUEVO = 8

PRINCIPIO = 5 NDISP = 8
NODO A B E F D C
SIG 7 4 0 6 1 0 2 3
ADY 8 2 5 NIL 7 6

ADISP = 4
DEST 2 6 4 6 7 4 5 4 6
ENL 10 6 0 0 0 3 0 1 0 0
Para el proceso de inserción de la arista, esta queda al inicio de la lista de
sucesores del nodo fuente.

ELIMINACIÓN EN UN GRAFO
1) Eliminación de una Arista

Suponga que se va a eliminar una Arista (A, B) de un grafo “G” dados. Para
realizar este procedimiento hay que encontrar primero la posición de inicio de
la Arista POSA para el nodo “A”. Y la posición destino de la Arista POSB
para el nodo “B”. Luego simplemente se elimina la posición destino de la
arista POSB de la lista de sucesores del nodo “A” , que esta siendo
direccionado por el puntero POSA^ÂDY. En el proceso se usará una
variable lógica “INDIC” que indica si no existe la arista en el grafo.
Adicionalmente se utiliza una variable “PTR” que indica la arista que será
eliminada.

VEAMOS EL EJEMPLO:
PRINCIPIO = 5 NDISP = 8
NODO A B E F D C
SIG 7 4 0 6 1 0 2 3
ADY 8 2 5 NIL 7 6

ADISP = 4

27
Departamento de Computación y Simulación de Sistemas

DEST 2 6 4 6 7 4 5 4 6
ENL 10 6 0 0 0 3 0 1 0 0

Eliminar las arista (D,E) y (A,B)


POSA = Posición Inicial de la Arista - POSB = Posición Final de la Arista
PTR = Arista a Eliminar - ANT = Arista Anterior a la Arista a Eliminar
Si es el primer sucesor
POSA^ADY PTR^ENL
PTR^DEST ““
PTR^ENL ADISP
ADISP PTR

Si es cualquier otro sucesor

PTR ^ANT^ENL PTR^ENL


PTR^DEST ““
PTR^ENL ADISP
ADISP PTR

PRINCIPIO = 5 NDISP = 8
NODO A B E F D C
SIG 7 4 0 6 1 0 2 3
ADY 8 2 5 NIL Nil 6

ADISP = 1
DEST 6 4 6 7 5 4 6
ENL 7 6 0 0 0 3 4 10 0 0

a) POSA = 6 b) POSA = 1
POSB = 4 POSB = 2
PTR = 7 PTR = 1
ANT = 8
Las inserción de las Aristas liberadas se hacen al inicio de ADISP.

2) Eliminación de un Nodo
Suponga que deseamos eliminar un nodo “N” del grafo “G”. Está operación es
más complicada que las operaciones de búsquedas e inserción de nodos y
aristas, y que la eliminación de aristas, ya que debemos eliminar todas las
aristas que contengan al nodo “N”.

Note que esas aristas son de dos tipos:


o Aquellas que empiezan en el nodo “N”

28
Departamento de Computación y Simulación de Sistemas

o Aquellas que terminan en el nodo “N”

Así que nuestro procedimiento consistirá fundamentalmente en los siguientes


pasos:
1. Encontrar la posición del nodo a eliminar “POSN” en el grado “N”
2. Eliminar todas las aristas que terminan en el nodo “N”. O sea eliminar
todas la posiciones POSN de la lista de sucesores de cada nodo “N”
del grafo “G”. (Esto requiere recorrer la lista de nodos del grafo “G”)
3. Eliminar todas las aristas que empiezan en el nodo “N” a eliminar.
Esto se hace encontrando la posición inicial del primero sucesor del
nodo “N” el cual identificaremos con “COM” y la posición final del
ultimo sucesor del nodo “N” a eliminar el cual identificaremos por
“FIN”. Y luego añadimos la lista de sucesores del nodo a eliminar “N”
a lista de aristas disponibles “ADISP”.
FIN^ENL ADISP
ADISP COM
COM^DEST ....... FIN^DEST “ “
4. Eliminar el nodo “N” de la lista NODO y añadirlo a la lista de nodos
disponibles “NDIPS”.

PRINCIPIO = 1 NDISP = 6
NODO A B C D E
SIG 2 3 4 5 0 7 8 0
ADY 1 4 7 9 13

ADISP = 15
DEST 2 3 4 1 4 5 1 4 1 2 3 5 2 4
ENL 2 3 0 5 6 0 8 0 10 11 12 0 14 0 16 0

ELIMINAR EL NODO B
POSN = 2; ARISTA LLEGAN PTR = 1,10,13 COM = 4
ARISTA QUE SALEN PTR = 4,5,6 FIN = 6

PRINCIPIO = 1 NDISP = 2
NODO A C D E
SIG 2 6 4 5 0 7 8 0
ADY 1 7 9 14

29
Departamento de Computación y Simulación de Sistemas

ADISP = 4 1 4 5 6 2 3
DEST 3 4 1 4 1 3 5 4
ENL 15 3 0 5 6 13 8 0 11 1 12 0 10 0 16 0

ADISP = 15, 1, 10, 13, 4

Para Liberar el Nodo

POSN^ANT^SIG POSN^SIG
POSN^SIG NDISP
NDISP POSN

PRACTICA
MANTENIMIENTO DE LOS GRAFOS

1) Suponga que un grafo “G“se guarda en memoria de la siguiente manera:

PRINCIPIO = 6 NDISP = 5
NODO A C E D B
SIG 4 0 8 0 7 3 2 1
ADY 6 1 10 2 9

ADISP = 3
DEST 8 8 1 4 3 3 6 3
ENL 5 7 0 0 0 0 0 0 4 0

a) Muestre los cambios que ocurren en la representación enlazada del grafo


si se elimina la arista (C,E) y se inserta la arista (D,E).

b) Muestre los cambios que ocurren en la representación enlazada del grafo


si se inserta el nodo F y las aristas (E, F) y (F, D).

c) Encontrar los cambios en la representación enlazada del grafo si se


elimina el nodo B del grafo.

Nota: Para cada caso debe tomarse como grafo inicial el dado.

2) Suponga que el grafo “G” se encuentra en memoria de la siguiente forma:

PRINCIPIO = 1 NDISP = 8
NODO A B C D E

30
Departamento de Computación y Simulación de Sistemas

SIG 2 3 4 5 0 0 6 7
ADY 11 14 3 2 1

ADISP = 5
DEST 4 2 1 4 5 3 4 5 2 3 5
ENL 13 0 6 0 7 4 12 0 10 0 9 0 0 8

a) Dibujar el Grafo
b) Insertar la arista (A, C)
c) Eliminar la arista (B, C)
d) Insertar el nodo (F)
e) Insertar la arista (B, F) y (F, D)
f) Eliminar el nodo (E)
g) Dibujar el grafo

Nota.: EL problema debe ser resuelto de forma secuencial.

CONSIDERACIONES DE EFICIENCIA DE LOS ALGORITMOS

ALGORITMOS DE ORDENAMIENTO Y SU EFICIENCIA

Conceptos

Ordenamiento: significa reorganizar o reagrupar un conjunto de datos u


objetos en una secuencia específica. Las operaciones de búsqueda por lo
general se efectúa sobre elementos ordenados.

Formalmente definimos una ordenación de la siguiente manera:

Sea A una lista de “N” elementos:

A1, A2, A3 .......An

Ordenar significa permutar estos elementos de tal forma que los mismos
quedan de acuerdo con un orden pre-establecido:
 Ascendente: A1 <= A2 <= A3 <=....... <=An
 Descendente: A1 >= A2 >= A3 >=....... >=An

En el procesamiento de datos, a los métodos de ordenación de les clasifica


en dos categorías:
 Ordenación de Arreglos
 Ordenación de Archivos

ORDENACIÓN DE ARREGLOS
Recibe el nombre también de ordenación “interna”, ya que los elementos o
componentes del arreglo se encuentra en la memoria principal de la
computadora.

31
Departamento de Computación y Simulación de Sistemas

ORDENACIÓN DE ARCHIVOS
Recibe también el nombre de ordenación “externa” ya que los elementos se
encuentran almacenados en dispositivos de almacenamiento secundario
como lo son los disco, cintas, etc.

ORDENACIÓN INTERNA
Para la aplicación delos métodos de ordenación interna se utilizan arreglos
unidimensionales aunque también pueden utilizarse otros tipos de arreglos
por ejemplos: bidimensionales y tridimensionales. Cabe destacar que se
trabajará con métodos de ordenación que no requieren de arreglos auxiliares
para su ordenación ya que estos además de ineficientes, son intrínsecamente
de menor interés.

Los métodos de ordenación interna pueden ser clasificados en dos tipos:


 Métodos Directos (n 2 )
 Métodos Logarítmicos( n * log n)

Los métodos de ordenación directa tiene las característica de que sus


programas son cortos, de fácil elaboración y de fácil compresión aunque son
ineficientes cuando “n” (Número de elementos del arreglo) es medio o grande.

Los métodos de ordenación logarítmica son más complejos que los directos,
usan menos comparaciones y movimientos para ordenar sus elementos pero
su elaboración y compresión resulta más sofisticada y abstracta.

Una buena medida de eficiencia entre los distintos métodos lo presenta el


tiempo de ejecución del algoritmo y este depende fundamentalmente del
número de comparaciones y movimientos que se realicen entre los
elementos.

Para los métodos de ordenación interna puede decirse que cuando “n” es
pequeño debe utilizarse métodos directos y cuando “n” es medio o grande
deben emplearse los métodos logarítmicos.

Los métodos directos más conocidos son:


 Ordenación por Intercambio
 Ordenación por Inserción
 Ordenación por Selección

ORDENACIÓN POR INTERCAMBIO DIRECTO(BURBUJA)


El método de intercambio directo, conocido también con el nombre de
burbuja, es el más utilizado por su fácil comprensión y programación.
Aunque probablemente es el método más ineficiente. Puede trabajar de dos
formas diferentes levando los elementos más pequeños hacia la parte
izquierda del arreglo o bien llevando los elementos más grandes hacia la
parte derecha del arreglo.

32
Departamento de Computación y Simulación de Sistemas

La idea básica de este algoritmo consiste en comparar pares de elementos


adyacentes e intercambiarlos entre si hasta que todos los elementos estén
ordenados.

Ejemplo
Supóngase que se desean ordenarse las siguientes claves del arreglo A,
transportando en cada pasada el menor elemento hacia la izquierda del
arreglo.

A 15 67 08 16 44 27 12 35

Las comparaciones que se realizan son las siguientes:

PRIMERA PASADA

A[7] > A[8] (12 > 35) No hay intercambio


A[6] > A[7] (27 > 12) Si hay intercambio
A[5] > A[6] (44 > 12) Si hay intercambio
A[4] > A[5] (16 > 12) No hay intercambio
A[3] > A[4] (08 > 12) No hay intercambio
A[2] > A[3] (67 > 08) Si hay intercambio
A[1] > A[2] (15 > 18) Si hay intercambio

Después de la primera pasada el arreglo queda de la siguientes forma:

A 08 15 67 12 16 44 27 35

SEGUNDA PASADA

A[7] > A[8] (27 > 35) No hay intercambio


A[6] > A[7] (44 > 27) Si hay intercambio
A[5] > A[6] (16 > 27) No hay intercambio
A[4] > A[5] (12 > 16) No hay intercambio
A[3] > A[4] (67 > 12) Si hay intercambio
A[2] > A[3] (15 > 12) Si hay intercambio
Después de la segunda pasada el arreglo queda de las siguiente forma:
A 08 12 15 67 16 27 44 35

Después de la tercera pasada el arreglo queda de la siguiente forma:


A 08 12 15 16 67 27 35 44

Después de la cuarta pasada el arreglo queda de la siguiente forma:


A 08 12 15 16 27 67 35 44

Después de la quinta pasada el arreglo queda de la siguiente forma:


A 08 12 15 16 27 35 67 44

Después de la sexta pasada el arreglo queda de la siguiente forma:


A 08 12 15 16 27 35 44 67

33
Departamento de Computación y Simulación de Sistemas

Después de la séptima pasada el arreglo queda de la siguiente forma:


A 08 12 15 16 27 35 44 67

ANÁLISIS DE EFICIENCIA DEL MÉTODO DE INTERCAMBIO DIRECTO

El número de comparaciones en el método de burbuja es fácilmente


contabilizable. En la primera pasada realizamos (n-1) comparaciones, en la
segunda pasada realizamos (n-2) comparaciones en la tercera pasada (n-3)
comparaciones y así sucesivamente hasta llegar a dos(2) y una(1)
comparaciones entre las claves, siendo “n” el número de elementos del
arreglos.

Por lo tanto por inducción matemática:

C = (n – 1) + (n - 2) + ..... + 2 + 1 = n * (n -1)
2
que es igual a:

C = n * (n -1)
2
Respecto al número de movimientos estos dependen de que si el arreglo está
ordenado, desordenado o en un orden inverso. Los movimientos para cada
uno son los siguientes.

Mmin= 0 Mmed= 0.75*(n2 – n ) MMáx= 1.5 * ( n2 - n)

Ejemplo
Se tiene que ordenar un arreglo que contiene 500 elementos. Determine el
número de comparaciones y movimientos a realizar si:

a) Si el arreglo está ordenado.

C = n * (n -1) = 500 (500 –1 ) = 124,750 comparaciones


2 2
Mmin = 0

b) Si los elementos del arreglo se encuentran dispersos en forma


aleatoria.

C = n * (n -1) = 500 (500 –1 ) = 124,750 Comparaciones


2 2
Mmed= 0.75*(n – n ) = 0.75 * ( 5002 – 500) = 187,125 Movimientos
2

c) Si los elementos se encuentran en orden inverso.

C = n * (n -1) = 500 (500 –1 ) = 124,750 Comparaciones

34
Departamento de Computación y Simulación de Sistemas

2 2
MMax= 1.5*(n2 – n ) = 1.5 * ( 5002 – 500) = 374,250 Movimientos

ORDENACIÓN POR INSERCIÓN DIRECTA


El método de ordenación por inserción directa es que generalmente utilizan
los jugadores de cartas cuando ordenan estás, de allí que también se
conozca con el nombre de método de la baraja.

La idea central de este algoritmo consiste en insertar un elemento del arreglo


en la parte izquierda del mismo, que ya se encuentra ordenado. Este proceso
se repite desde el segundo hasta el n-ésimo elemento.

Ejemplo:
Supóngase que se desea ordenar las siguientes claves del arreglo A
utilizando el método de inserción directa.

A 15 67 08 16 44 27 12 35

Las comparaciones que se realizan son las siguientes:

PRIMERA PASADA

A[2] < A[1] ( 67 < 15) No hay intercambio

A 15 67 08 16 44 27 12 35

SEGUNDA PASADA

A[3] < A[2] ( 08 < 67) Si hay intercambio A[3] = 67 A[2] = 08


A[2] < A[1] ( 08 < 15) Si hay intercambio A[2] = 15 A[1] = 08

A 08 15 67 16 44 27 12 35

TERCERA PASADA

A[4] < A[3] ( 16 < 67) Si hay intercambio A[4] = 67 A[3] = 16


A[3] < A[2] ( 16 < 15) No hay intercambio
A[2] < A[1] ( 15 < 08) No hay intercambio

A 08 15 16 67 44 27 12 35

Después de la cuarta pasada el arreglo queda de la siguiente forma:


A 08 15 16 44 67 27 12 35

Después de la quinta pasada el arreglo queda de la siguiente forma:


A 08 15 16 27 44 67 12 35

35
Departamento de Computación y Simulación de Sistemas

Después de la sexta pasada el arreglo queda de la siguiente forma:


A 08 12 15 16 27 44 67 35

Después de la séptima pasada el arreglo queda de la siguiente forma:


A 08 12 15 16 27 35 44 67

ANÁLISIS DE EFECIENCIA DE METODO DE INSERCIÓN DIRECTO

El número mínimo de comparaciones y movimientos entre claves se produce


cuando los elementos del arreglo ya están ordenados.

Cmin = n – 1

El número máximo de comparaciones y movimientos entre los elementos del


arreglo se produce cuando los elementos del arreglo están en orden inverso.
Por este procedimiento se tiene que en la primera pasada se realiza una
comparación; en la segunda pasada se llevaron a cabo dos comparaciones,
en la tercera pasada tres comparaciones y así sucesivamente hasta n –1
comparaciones entre los elementos.
Cmax = 1 + 2 + 3....... + (n –1 ) = n * (n – 1)
2
que es igual a:

Cmax = (n2 – n)
2

El número de comparaciones promedios se cuando los elementos aparecen


en el arreglo en forma aleatoria. Este puede ser calculado mediante la suma
de las comparaciones mínimos y máximas divididas entre dos(2).

Por lo tanto:

Cmed = ( (n - 1) + ( n2 – n) / 2 ) / 2

Cmed = ( n2 + n – 2) / 4

Respecto a número de movimientos, si el arreglo está ordenado no se realiza.

Por lo tanto:
Mmin = 0

El número máximo de movimientos se presenta cuando el arreglo está en


orden inverso. De uno (1) a (n-1)

Mmax = 1 + 2 + 3 +.....+ (n -1) = n * (n - 1 ) /2

que es igual a:

Mmax = ( n2 – n ) / 2

36
Departamento de Computación y Simulación de Sistemas

El número de movimientos en promedio se realiza cuando los elementos se


encuentran en el arreglo en forma aleatoria, se calcula como la suma de los
movimientos mínimos y máximos divididos entre dos(2).

Por lo tanto:

Mmed = ( 0 + ( n2 – n ) / 2) /2

Que es igual a:

Mmed = ( n2 – n ) / 4

Ejemplo:
Si se tiene que ordenar un arreglo que contiene 500 elementos cuanto se
será el numero de comparaciones y movimientos a realizar si:

a) El arreglo está ordenado

Cmin = 499 Comparaciones Mmin = 0

b) El arreglo se encuentra en forma aleatoria

Cmed = 62, 624 Comparaciones en promedio


Mmed = 62,325 Movimientos en promedio

c) El arreglo se encuentra en forma inversa


Cmax = 124,750 Comparaciones
Mmax = 124,750 Movimientos

ORDENAMIENTO POR SELECCIÓN DIRECTA

El método de ordenamiento por selección directa es más eficiente que los


métodos estudiados anteriormente.

Aunque su comportamiento es mejor que los anteriores y es de fácil


comprensión y programación no es recomendable utilizarlo cuando el
número de elementos del arreglo es medio o grandes. La idea básica de este
algoritmo consiste en buscar el menor elemento del arreglo y colocarlo en la
primera posición. Luego se busca el segundo elemento más pequeño del
arreglo y se coloca en la segunda posición. El proceso continua hasta que
todos los elementos del arreglo hayan sido ordenados.

El método se basa en los siguientes principios:

 Seleccionar el menor elemento del arreglo


 Intercambiar dicho elemento con el primero
 Repetir los pasos anteriores con los (n –1 ), ( n – 2) elementos y así
sucesivamente hasta que sólo quede el elemento mayor.

37
Departamento de Computación y Simulación de Sistemas

Ejemplo
Supóngase que se desea ordenar las siguientes claves del arreglo A
utilizando el método de selección directa.

A 15 67 08 16 44 27 12 35

Las comparaciones que se realizan son las siguientes.

PRIMERA PASADA

Menor A[1] (15)


Menor < A[2] (15 < 67) Si se cumple
Menor < A[3] (15 < 08) No se cumple
Menor A[3] (08) A[3] = A[1] ; A[1] = Menor
Menor < A[4] (08 < 16) Si se cumple
Menor < A[5] (08 < 16) Si se cumple
Menor < A[6 (08 < 16) Si se cumple
Menor < A[7] (08 < 16) Si se cumple
Menor < A[8] (08 < 16) Si se cumple
A 08 67 15 16 44 27 12 35

A 08 12 15 16 44 27 67 35

A 08 12 15 16 44 27 67 35

A 08 12 15 16 44 27 67 35

A 08 12 15 16 27 44 67 35

A 08 12 15 16 27 35 67 44

A 08 12 15 16 27 35 44 67

ANÁLISIS DE EFICIENCIA DEL METODO DE SELECCIÓN DIRECTA

El análisis del método de selección directa es relativamente simple. Debe


tenerse en cuenta que el número de comparaciones entre los elementos es
independiente de la disposición inicial de los mismos arreglos.

En la primera pasada realizan (n -1) comparaciones, en la segunda pasada


(n –2) comparaciones y así sucesivamente hasta 2 y 1 comparaciones en la
penúltima y última pasada respectivamente.

Por lo tanto:

C = (n –1 ) + ( n – 2) + ......+ 2 + 1 = n * (n – 1)
2
C = n2 – n
2

38
Departamento de Computación y Simulación de Sistemas

respecto al número de intercambio siempre será n-1 a excepción de que se


tenga incorporado en el algoritmo alguna técnica para prevenir el intercambio
de un elemento consigo mismo.

Por lo tanto:

M=n–1

EJEMPLO:
Se tiene que ordenar un arreglo que contiene 500 elementos

C = 124,750 comparaciones
M = 499 Movimiento

Los métodos logarítmicos más conocidos son:


 Quicksort
 Heapsort

ORDENACIÓN POR EL METODO QUICKSORT


El método de ordenación quicksort es actualmente el más eficiente y veloz
de los métodos de ordenación interna. Conocido también con el nombre de
método rápido y de ordenación por partición. Es una mejora sustancial del
método de intercambio directo que recibe el nombre de “quicksort por la
velocidad con que ordena los elementos del arreglo.

La idea central de este algoritmo consiste en los siguiente:

 Se toma un elemento “X” de una posición cualquiera del arreglo.


 Se trata de ubicar a “X” en la posición correcta del arreglo, de forma
tal que todas los elementos que se encuentran a la izquierda sean
menores o iguales. “X” y todas los elementos que se encuentran a la
derecha sean mayores o iguales a “X”.
 Se repiten los pasos anteriores pero ahora los conjunto de datos que
se encuentran a la izquierda y ala derecha de la posición correcta de
“X” en el arreglo.
 El procedimiento termina cuando todos los elementos se encuentran
en su posición correcta en el arreglo.

Debe seleccionarse entonces un elemento X cualquiera. En este caso se


seleccionara A[1]. Se empieza a recorrer el arreglo de derecha a izquierda
comparando si los elementos son mayores o iguales a X. Si un elemento no
cumple con esta condición, se intercambian los mismos y almacenamos en

39
Departamento de Computación y Simulación de Sistemas

una variable la posición del elemento intercambiado. Se inicia nuevamente el


recorrido pero ahora de izquierda a derecha comparando si los elementos son
menores o iguales a X. Si el elemento no cumple con esta condición,
entonces se intercambian los mismos y se almacenan en otra variable la
posición del elemento intercambiado. Se repiten los pasos hasta que el
elemento X encuentra su posición correcta en le arreglo.

EJEMPLO
Suponga que se desea ordenar los elementos que se encuentran en una
arreglo A utilizando el método de quicksort.

A 15 67 08 16 44 27 12 35

X= 15

A 12 67 08 16 44 27 15 35

A 12 67 08 16 44 27 15 35

A 12 15 08 16 44 27 67 35

A 12 15 08 16 44 27 67 35

A 12 08 15 16 44 27 67 35

X = 12 X = 44

A 08 12 15 16 35 27 67 44

A 08 12 15 16 35 27 44 67

X = 35

A 08 12 15 16 27 35 44 67

ANÁLISIS DE EFICIENCIA DEL METODO QUICKSORT

Este método es la optimización del método de intercambio directo. Debido a


que se propone como solución que el X se seleccione arbitrariamente o bien
entre una muestra relativamente pequeña de elementos del arreglo. También
es aconsejable la no utilización del elemento central del arreglo para el
proceso.

40
Departamento de Computación y Simulación de Sistemas

En este caso, el peor caso ocurre cuando los elementos del arreglo ya se
encuentran ordenados, o bien cuando los mismos se encuentran en orden
inverso.

Si se escoge arbitrariamente el primer elemento, entonces se particionar el


arreglo en dos mitades, una de cero(0) y otra de (n -1).

Si se escoge el segundo elemento del conjunto de datos que se analizarán,


entonces se particionará el arreglo en dos nuevos conjuntos, nuevamente
uno de (n -1) y otro de (n – 2) elementos.

Cmax = n + (n-1) + (n – 2) + ......+ 2 + 1 + (-1) = n * (n –1) - 1


2
Cmax = n2 - n - 1
2

ORDENACION POR EL METODO DEL MONTICULO(HEAPSORT)


El método de ordenación heapsort es también conocido del montículo. Es el
más eficiente de los métodos de ordenación que trabaja con árboles.

La idea central de este algoritmo consiste en lo siguiente:


 Construir un montículo
 Eliminar la raíz del montículo en formas repetidas.

Para referencia ir a construcción de árbol en montón.

Para representar un montículo en un arreglo lineal debe tenerse en cuenta


que para todos los nodos “n” lo siguiente:
 El nodo “n” se almacena en la posición “k” correspondiente del
arreglo.
 El hijo izquierdo del nodo “n” se almacena en la posición ( 2 * k).
 El hijo derecho del nodo “n” se almacena en la posición (2 * k + 1)

A 67 36 60 28 21 56 44 27 16 15 08 35

Para recordar: la inserción de un elemento en un montículo se lleva a cabo de


la siguiente manera:
 Se inserta el elemento en la primera posición disponible.
 Se verifica si es mayor que el padre de este. Si se cumple esta
condición, entonces se efectúa el intercambio. Si no se cumple esta
condición, entonces el algoritmo se detiene y el elemento queda
ubicado en su posición correcta en el montículo.
Ejemplo
Supóngase que se desean insertar las siguientes claves en el montículo que
se encuentra vacío.

41
Departamento de Computación y Simulación de Sistemas

Claves 15 60 08 16 44 27 12 35

a) inserción : clave 15
15

A 15

b) Insertar :clave 60
15 60

60 15

A 15 60

A 60 15

MONTÍCULO FINAL
A 60 44 27 35 16 08 12 15

ELIMINACIÓN DE UN MONTÍCULO
El proceso para obtener los elementos ordenados se efectúa eliminando la
raíz del montículo en forma repetida. Los pasos necesarios para lograr la
eliminación de la raíz del montículo son las siguientes:

 se reemplaza la raíz con el elemento que ocupa la última posición


del montículo.
 Se verifica si el valor de la raíz es menor que el valor más grande
de sus hijos. Si se cumple la condición, entonces se efectúa el
intercambio, si no se cumple la condición, entonces el algoritmo se
detiene y el elemento queda ubicado en la posición correcta en el
montículo.

Ejemplo:
Supóngase que se desea eliminar la raíz del montículo presentado en el
arreglo en formas repetidas.

A 67 56 60 44 21 28 36 15 35 16 13 08 27 12 07 10

Para poder ordenar un arreglo utilizando el método del montículo cabe aclarar
que al reemplazar la raíz por el último elemento del montículo, esta se coloca
en la posición de este. Es decir, la primera vez en la posición n, la segunda
vez en la posición (n -1), la tercera vez en la posición (n - 2) y así
sucesivamente hasta que quede colocada en las posiciones dos(2) y luego en
la uno(1).

A 67 56 60 44 21 28 36 15 35 16 13 08 27 12 07 10
Primera Pasada
A 60 56 36 44 21 28 12 15 35 16 13 08 27 10 07 67
Segunda Pasada

42
Departamento de Computación y Simulación de Sistemas

A 56 44 36 35 21 28 12 15 07 16 13 08 27 10 60 67
Tercera Pasada
A 44 35 36 15 21 28 12 10 07 16 13 08 27 56 60 67

Y así sucesivamente....

ANÁLISIS DE EFICIENCIA DEL METODO HEAPSORT


El análisis del método del montículo como todos los métodos logarítmico es
complejo. Debe tenerse en cuenta tanto la fase de construcción del montículo
como la fase donde se eliminan repetidamente la raíz del mismo, para
finalmente obtener el arreglo ordenado. Es un método muy rápido, sobre todo
para los valores grandes de “n”. n = cantidad de nodos

PARA TODOS LOS ALGORITMOS DE ORDENAMIENTO

El tiempo de ejecución para cada caso referente al ordenamiento es


proporcional:

Intercambio Directo : n2 ; O(n2)

Inserción Directa : n2 ; O(n2)


Selección Directa : n2 ; O(n2)
Quicksort : (n * log n) ; O(n * log n)
En el peor de los casos : n2 ; O(n2)
Heapsort : (n * log n) ; O(n * log n)

Ejercicio.
Si queremos ordenar un arreglo de 500 elementos demuestre cual de los
cinco método es más eficiente y porque en cuanto al tiempo de ejecución de
cada uno de ellos.

43

Vous aimerez peut-être aussi