Académique Documents
Professionnel Documents
Culture Documents
Contenido
Introduccin y Definiciones.
Un tipo especial de rbol: el rbol Trie
El TAD rbol
rboles binarios
Representacin de Tries
Evaluacin de Tries
Introduccin
Introduccin
Estructura rbol:
Almacenando en memoria la
expresin lgica p( f(a, b), a).
a
b
Definiciones bsicas
Grafo
Posee ciclos
Bosque
No conexo
rbol
G es un rbol
Cualquier par de vrtices est conectado por un nico camino
G es conexo pero si se elimina cualquier arista de A, el grafo
es no conexo
G es conexo y tiene |V|-1 aristas
G es acclico y tiene |V|-1 aristas
G es acclico, pero si se aade una arista se forma un ciclo.
Definiciones bsicas
Definiciones bsicas
10
rboles Trie
11
rboles Trie
12
rboles Trie
13
rboles Trie
14
rboles Trie
15
rboles Trie
16
Representacin de tries
17
Representacin de tries
Operaciones:
Inserta (var n: NodoTrie[A]; caract: A; ptr: Puntero[NodoTrie[A]])
Consulta (n: NodoTrie[A]; caract: A): Puntero[NodoTrie[A]]
Anula (var n: NodoTrie[A])
TomaNuevo (var n: NodoTrie[A]; caract: A)
18
Representacin de tries
19
Representacin de tries
-
tipo
NodoTrie[A]= array [A] de Puntero[NodoTrie[A]]
Ventaja: acceso muy rpido a los valores.
Inconveniente: desperdicia muy mucha memoria.
20
Representacin de tries
Inserta (var n: NodoTrie[A]; car: A; ptr: Puntero[NodoTrie[A]])
n[car]:= ptr
Consulta (n: NodoTrie[A]; car: A): Puntero[NodoTrie[A]]
devolver n[car]
Anula (var n: NodoTrie[A])
para i en Rango(A) hacer
n[i]:= NULO
21
Representacin de tries
E
L
22
Representacin de tries
23
Representacin de tries
-
24
Representacin de tries
Consulta (n: NodoTrie[A]; c: A): Puntero[NodoTrie[A]]
tmp:= PunteroA(n)
mientras tmp NULO AND tmpcar < c hacer
tmp:= tmpsig
si tmpcar c entonces devolver NULO
sino devolver tmpptr
25
Representacin de tries
26
Representacin de tries
27
Representacin de tries
Utilizando la representacin de nodos trie (con listas o
con arrays) implementar las operaciones de insercin,
eliminacin y consulta sobre el trie.
pos
Ejemplo. Insertar ELLE.
E
Y
T
i
E
28
A
$
O
$
Representacin de tries
operacin Inserta (var a: ArbolTrie[A]; s: cadena)
var pos: Puntero[NodoTrie[A]]
i:= 1
pos:= a
mientras s[i] $ hacer
si Consulta (pos, s[i]) == NULO entonces
TomaNuevo (pos, s[i])
pos:= Consulta (pos, s[i])
i:= i + 1
finmientras
Inserta (pos, $, pos) // no confundir
29
Representacin de tries
Cmo sera el uso del trie en el corrector interactivo?
30
31
32
n + p Nodos en el rbol
2k1 + k2 bytes por nodo
33
Conclusiones
La estructura es adecuada en aplicaciones donde aparezcan
muchos prefijos comunes.
El tiempo de ejecucin slo depende (casi) de la longitud de las
palabras, independientemente de cuntas hayan!
TAD rbol
34
crearrbol(rbol T)
rbolVaco(rbol T)
vaciarrbol(rbol T)
verrbol(rbol T)
insertar(nodo n, nodo padre, rbol T)
borrar(nodo n, rbol T)
borrarSubrbol(nodo padre, rbol T)
nmeroNodos(rbol T)
profundidad(rbol T)
grado(rbol T)
rboles n-arios
rboles binarios
35
Hijo izquierdo e hijo derecho para cada nodo: memoria dinmica o sobre
vectores.
rbol
36
Informacin estructura,
lista de punteros a hijos,
puntero al padre
37
Opcin 2
//
LISTA NODOS HIJOS
typedef struct // tipo base lista
{
nodo_arbol * hijo;
struct nodo_lista *sig;
}nodo_lista;
typedef struct
{
nodo_lista *inicio;
} lista;
typedef struct // tipo base del rbol
{
tipo1 campo1;; tipoN campoN;
struct nodo_arbol *padre;
lista *hijos;
} nodo_arbol;
38
39
void main() {
nodo n; // un nodo del rbol con 10 hijos
n->hijos=(nodo **) malloc(10*sizeof(nodo *));
}
40
2.
tipoN campoN;
struct nodo *padre;
struct nodo *hijos[n];
}nodo ;
typedef struct
{
nodo *raz;
} arbol;
41
Opcin 2
typedef struct // tipo nodo del rbol
{
tipo1 campo1;
tipoN campoN;
struct nodo *padre;
struct nodo * hijo1,,* hijoN;
}nodo ;
typedef struct
{
nodo *raz;
} arbol;
3
4
5
5
6
7
42
Lista ordenada de
nodos hijos. Cada
elemento de la lista
es el ndice de una
componente del
vector.
43
0
1
2
9
10
3
8
5
44
(subordinado)
45
46
A
B
T= A, B, C, D, E, F, G, H,
47
C
E
48
* No confundir con el
TAD rbol Binario
49
50
51
52
53
54
A
B
55
C
E
D
H
typedef struct
{
tipo1 elem1; tipoN elemN;
struct nodo * hijo_izq, * herm_der;
} nodo;
E
F
typedef struct
{
tipo1 elem1; tipoN elemN;
struct nodo * hijo_izq, * herm_der, * padre;
} nodo;
VER arbol.c
F
56
Raz
B
E
D
F
57
Evidentemente, el nmero de
nodos del rbol queda fijado al
nmero de componentes del vector !!
elem
herm_der
-1
-1
-1
-1
-1
-1
-1
-1
-1
* Como la especificacin
Mirar en arbol.c la
Implementacin con
memoria dinmica, para
ver cmo est definido el
tipo nodo.
58
59
Primero en profundidad:
60
Estrategias combinadas:
rboles binarios
rboles binarios
61
rboles binarios
rboles binarios
62
63
64
65
66
67
68
VER arbolbinario.c
69