From bb012cecb5cfb147befef86bfa2bdbc338e3af4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Portas=20L=C3=B3pez?= <81629707+TeenBiscuits@users.noreply.github.com> Date: Tue, 7 May 2024 13:11:22 +0200 Subject: [PATCH 1/5] Desbloqueo Tema 7 y 8 --- docs/pro.tree | 3 --- docs/topics/00-Inicio/Apuntes.topic | 3 +-- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/docs/pro.tree b/docs/pro.tree index b9bbe18..3342580 100644 --- a/docs/pro.tree +++ b/docs/pro.tree @@ -42,11 +42,8 @@ SPDX-License-Identifier: GPL-3.0-only - - diff --git a/docs/topics/00-Inicio/Apuntes.topic b/docs/topics/00-Inicio/Apuntes.topic index 2e513cd..80e8ff8 100644 --- a/docs/topics/00-Inicio/Apuntes.topic +++ b/docs/topics/00-Inicio/Apuntes.topic @@ -43,8 +43,7 @@ - Tema 7 y 8 - Árboles Binarios de Búsqueda ABB y Equilibrados AVL - + From dcd6dd840d7582017f5fbc79341989840bfd1d74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Portas=20L=C3=B3pez?= <81629707+TeenBiscuits@users.noreply.github.com> Date: Tue, 7 May 2024 13:32:18 +0200 Subject: [PATCH 2/5] Update Tema-7-y-8-Arboles-Binarios-de-Busqueda.md --- ...Tema-7-y-8-Arboles-Binarios-de-Busqueda.md | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/docs/topics/03-Apuntes/Pro-2/Tema-7-y-8-Arboles-Binarios-de-Busqueda.md b/docs/topics/03-Apuntes/Pro-2/Tema-7-y-8-Arboles-Binarios-de-Busqueda.md index f9f776d..156a922 100644 --- a/docs/topics/03-Apuntes/Pro-2/Tema-7-y-8-Arboles-Binarios-de-Busqueda.md +++ b/docs/topics/03-Apuntes/Pro-2/Tema-7-y-8-Arboles-Binarios-de-Busqueda.md @@ -35,12 +35,34 @@ descripción gráfica. Operaciones explicadas de forma gráfica e implementadas. --- title: Árbol binario de búsqueda (ABB) --- -flowchart +flowchart TB k(((k))) --> A[/claves < k\] & B[/claves > k\] ``` -| Pros | Contras | -|------------------------------------------------------------|------------------------------------------------------------------------------------------| -| Eficiencia del proceso de búsqueda en árboles equilibrados | Si los nodos se añaden en un orden aleatorio habrá que equilibrarlo | -| | Si los nodos se añaden en un orden determinado el árbol degenerará en una lista ordenada | +### Pros y contras + +- Eficiencia del proceso de búsqueda en árboles equilibrados +- Si los nodos se añaden en un orden aleatorio habrá que equilibrarlo + ```mermaid + --- + title: Árbol sin equilibrar + --- + flowchart TB + k[[6]] --> 1[[1]] & 8[[8]] + 1 --> 0[[0]] & 2[[2]] + 2 --> 3[[3]] --> 4[[4]] + 8 --> 7[[7]] + ``` +- Si los nodos se añaden en un orden determinado el árbol degenerará en una lista ordenada + ```mermaid + --- + title: Árbol degenerado en lista + --- + flowchart TB + k[[4]] --> 3[[3]] & NULL1[[NULL]] + 3 --> 2[[2]] & NULL2[[NULL]] + 2 --> 1[[1]] & NULL3[[NULL]] + ``` + + From 4cea8b3dfd23c3ee9c28bdcf1f470c5cfb65e811 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Portas=20L=C3=B3pez?= <81629707+TeenBiscuits@users.noreply.github.com> Date: Mon, 13 May 2024 19:34:23 +0200 Subject: [PATCH 3/5] Borrador Tema 7 y parte Tema 8 --- docs/code/Ejemplos/Tema_7/findKey.c | 2 + docs/code/Ejemplos/Tema_7/insertKey.c | 2 + docs/code/Ejemplos/Tema_7/removeKey.c | 2 + ...Tema-7-y-8-Arboles-Binarios-de-Busqueda.md | 182 +++++++++++++++++- src/Ejemplos/Tema_7/findKey.c | 2 + src/Ejemplos/Tema_7/insertKey.c | 2 + src/Ejemplos/Tema_7/removeKey.c | 2 + 7 files changed, 192 insertions(+), 2 deletions(-) create mode 100644 docs/code/Ejemplos/Tema_7/findKey.c create mode 100644 docs/code/Ejemplos/Tema_7/insertKey.c create mode 100644 docs/code/Ejemplos/Tema_7/removeKey.c create mode 100644 src/Ejemplos/Tema_7/findKey.c create mode 100644 src/Ejemplos/Tema_7/insertKey.c create mode 100644 src/Ejemplos/Tema_7/removeKey.c diff --git a/docs/code/Ejemplos/Tema_7/findKey.c b/docs/code/Ejemplos/Tema_7/findKey.c new file mode 100644 index 0000000..8aebdb2 --- /dev/null +++ b/docs/code/Ejemplos/Tema_7/findKey.c @@ -0,0 +1,2 @@ +// EN CONSTRUCCIÓN +// COLABORA https://github.com/TeenBiscuits/Pro2324 \ No newline at end of file diff --git a/docs/code/Ejemplos/Tema_7/insertKey.c b/docs/code/Ejemplos/Tema_7/insertKey.c new file mode 100644 index 0000000..8aebdb2 --- /dev/null +++ b/docs/code/Ejemplos/Tema_7/insertKey.c @@ -0,0 +1,2 @@ +// EN CONSTRUCCIÓN +// COLABORA https://github.com/TeenBiscuits/Pro2324 \ No newline at end of file diff --git a/docs/code/Ejemplos/Tema_7/removeKey.c b/docs/code/Ejemplos/Tema_7/removeKey.c new file mode 100644 index 0000000..8aebdb2 --- /dev/null +++ b/docs/code/Ejemplos/Tema_7/removeKey.c @@ -0,0 +1,2 @@ +// EN CONSTRUCCIÓN +// COLABORA https://github.com/TeenBiscuits/Pro2324 \ No newline at end of file diff --git a/docs/topics/03-Apuntes/Pro-2/Tema-7-y-8-Arboles-Binarios-de-Busqueda.md b/docs/topics/03-Apuntes/Pro-2/Tema-7-y-8-Arboles-Binarios-de-Busqueda.md index 156a922..271865f 100644 --- a/docs/topics/03-Apuntes/Pro-2/Tema-7-y-8-Arboles-Binarios-de-Busqueda.md +++ b/docs/topics/03-Apuntes/Pro-2/Tema-7-y-8-Arboles-Binarios-de-Busqueda.md @@ -37,7 +37,6 @@ title: Árbol binario de búsqueda (ABB) --- flowchart TB k(((k))) --> A[/claves < k\] & B[/claves > k\] - ``` ### Pros y contras @@ -51,7 +50,7 @@ flowchart TB flowchart TB k[[6]] --> 1[[1]] & 8[[8]] 1 --> 0[[0]] & 2[[2]] - 2 --> 3[[3]] --> 4[[4]] + 2 --> NULL[[NULL]] & 4[[4]] 8 --> 7[[7]] ``` - Si los nodos se añaden en un orden determinado el árbol degenerará en una lista ordenada @@ -65,4 +64,183 @@ flowchart TB 2 --> 1[[1]] & NULL3[[NULL]] ``` +### Operaciones {id=abb-operaciones} + +Basándonos en el [TAD Árbol](Tema-6-Arboles.md#operaciones) definimos las operaciones del árbol de búsqueda a cambiar. + + + +Para más información: [TAD Árbol](Tema-6-Arboles.md#operaciones) +y [](Tema-1-Tipos-Abstractos-de-Datos-TAD.md#especificaci-n-de-un-tad) + + + +#### Generadoras + + +
  • + createEmptyTree \rightarrow Tree
    +
  • +
  • + insertKey(Tree, Key) \rightarrow Tree, bool
    +

    +Objetivo: Insertar un nodo con información en el árbol, en su lugar correspondiente, de acuerdo al valor de una clave
    +Entrada:
    +- Tree: Árbol a modificar
    +- Key: Dato a insertar
    +Salida: Tree: Nuevo árbol que resulta de la inserción y verdadero si se ha podido insertar o si la clave existe, falso en caso contrario.
    +Poscondición: El árbol incorpora un nuevo nodo con los datos si éstos no existían en el árbol +

    + +flowchart TB + Key(Key: 25) + K[[30]] --> A[[20]] & B[[40]] + A --> NULL[[NULL]] & C[[25]] + K -. 25 < 30 .-> A -. 25 > 20 .-> C + + +
  • +
    + +#### Observadoras + + +
  • + leftChild(Tree) \rightarrow Tree
    +
  • +
  • + rightChild(Tree) \rightarrow bool
    +
  • +
  • + root(Tree) \rightarrow Item
    +
  • +
  • + isEmptyTree(Tree) \rightarrow bool
    +
  • +
  • + findKey(Key, Tree) \rightarrow Tree +

    +Objetivo: Devuelve el subárbol cuya raíz contiene la clave
    +Entrada:
    +- Key: Dato a buscar
    +- Tree: Árbol a manipular
    +Salida: Tree: Acceso al árbol cuya raíz contiene la clave, o nulo si éste no existe (el árbol está vacío o no contiene esa clave)
    +

    + +flowchart TB + key(Key: 25) + k[[30]] --> A[[20]] & B[[40]] + A --> D[[15]] & E[[25]] + B --> F[[35]] & G[[45]] + k -. 25 < 30 .-> A -. 25 > 20 .-> E + + +
  • +
    + +#### Destructoras + + +
  • + removeKey(Key, Tree) \rightarrow Tree +

    +Objetivo: Eliminar el nodo cuyo contenido coincide con la clave
    +Entrada:
    +- Key: Clave del nodo a eliminar
    +- Tree: Árbol a modificar
    +Salida: Tree: Nuevo árbol sin el nodo eliminado
    +Precondición: La clave existe en el árbol
    +

    +Se deben tener en cuenta los hijos del nodo a borrar, ya que deben continuar en el árbol. Si el nodo tienen dos hijos, se sustituye por el mayor de los hijos menores (subárbol izquierdo). + +flowchart TB + key(A eliminar: 87) + A[[120]] --> B[[87]] & C[[140]] + B --> D[[43]] & E[[93]] + D --> NULL1(NULL) & F[[65]] + F --> G[[56]] & NULL2(NULL) + + +flowchart TB + key(A eliminar: 87) + A[[120]] --> B[[87]] & C[[140]] + B --> D[[43]] & E[[93]] + subgraph Subárbol izquierdo + D --> NULL1(NULL) & F[[65]] + F --> G[[56]] & NULL2(NULL) + end + + +flowchart TB + key(A eliminar: 87) + A[[120]] --> B[[87]] & C[[140]] + B --> D[[43]] & E[[93]] + subgraph Subárbol izquierdo + D --> NULL1(NULL) & F[[65]] + F --> G[[56]] & NULL2(NULL) + end + F -. el mayor .-> B + + +flowchart TB + key(A eliminar: 87) + A[[120]] --> B[[65]] & C[[140]] + B --> D[[43]] & E[[93]] + subgraph Subárbol izquierdo + D --> NULL(NULL) & G[[56]] + end + + +
  • +
    + +## Árboles Binarios de Búsqueda Equilibrados (AVL) + +Un árbol binario de búsqueda equilibrado es un árbol de búsqueda (_redundante ya lo sé_) en el que, para cada +nodo, se cumple que la diferencia de altura de sus subárboles **nunca es mayor que uno** (las diferencias son en valor +absoluto, intervalo [-1, 1]). + +Estos árboles hacen búsquedas **muy eficientes**, ya que mantienen **una altura mínima** evitando así los [**árboles +degenerados**](#pros-y-contras). + +El **factor de equilibrio** (balance factor) de un nodo se define como la **altura de su subárbol derecho** menos +**altura de su subárbol izquierdo**. Para ser un AVL debes tener un **factor de equilibrio en cada nodo entre [-1, 1]**. + +```tex +bf(N) = hNDch - hNIzq +``` + +```mermaid +--- +title: Árbol AVL Equilibrado +--- +flowchart TB + k(((_-1_))) --> A((_1_)) & B((_0_)) + A --> C((_0_)) & D((_0_)) + D --> F((_0_)) & G((_0_)) + B --> H((_0_)) & I((_0_)) +``` + +```mermaid +--- +title: Árbol ABL No equilibrado +--- +flowchart TB + k(((_-2_))) --> A((_2_)) & B((_0_)) + A --> C(NULL) & D((_0_)) + D --> F((_0_)) & G((_0_)) + B --> H((_0_)) & I((_0_)) +``` + + + +Se denominan AVL en honor a Adelson, Velskii y Landis, que fueron los primeros en proponer este +TAD. [Wikipedia](https://es.wikipedia.org/wiki/Árbol_AVL) + + + +### Operaciones {id=avl-operaciones} + +Respecto a la [especificación del árbol binario de búsqueda ABB](#abb-operaciones) solo cambian las funciones de +inserción y borrados, que también deben **mantener equilibrado el árbol**. diff --git a/src/Ejemplos/Tema_7/findKey.c b/src/Ejemplos/Tema_7/findKey.c new file mode 100644 index 0000000..8aebdb2 --- /dev/null +++ b/src/Ejemplos/Tema_7/findKey.c @@ -0,0 +1,2 @@ +// EN CONSTRUCCIÓN +// COLABORA https://github.com/TeenBiscuits/Pro2324 \ No newline at end of file diff --git a/src/Ejemplos/Tema_7/insertKey.c b/src/Ejemplos/Tema_7/insertKey.c new file mode 100644 index 0000000..8aebdb2 --- /dev/null +++ b/src/Ejemplos/Tema_7/insertKey.c @@ -0,0 +1,2 @@ +// EN CONSTRUCCIÓN +// COLABORA https://github.com/TeenBiscuits/Pro2324 \ No newline at end of file diff --git a/src/Ejemplos/Tema_7/removeKey.c b/src/Ejemplos/Tema_7/removeKey.c new file mode 100644 index 0000000..8aebdb2 --- /dev/null +++ b/src/Ejemplos/Tema_7/removeKey.c @@ -0,0 +1,2 @@ +// EN CONSTRUCCIÓN +// COLABORA https://github.com/TeenBiscuits/Pro2324 \ No newline at end of file From 1e4af707fb7cfecee7ce6ee3c0d4e470f4872828 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Portas=20L=C3=B3pez?= <81629707+TeenBiscuits@users.noreply.github.com> Date: Mon, 13 May 2024 19:54:06 +0200 Subject: [PATCH 4/5] =?UTF-8?q?A=C3=B1adida=20Imagen=20y=20Borrador=20Tema?= =?UTF-8?q?=208=20y=20cambio=20descripci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .reuse/dep5 | 1 + .../Pro-2/Tema-7-y-8/EqInserci\303\263n.png" | Bin 0 -> 13681 bytes .../Tema-7-y-8-Arboles-Binarios-de-Busqueda.md | 11 ++++++++++- 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 "docs/images/Apuntes/Pro-2/Tema-7-y-8/EqInserci\303\263n.png" diff --git a/.reuse/dep5 b/.reuse/dep5 index b80b65e..6e7ff9b 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -44,5 +44,6 @@ License: CC0-1.0 Files: src/Ejemplos/TAD_Rational/* PDFs/* + docs/images/Apuntes/Pro-2/Tema-7-y-8/* Copyright: Facultade de Informatica de A Coruna License: CC-BY-4.0 \ No newline at end of file diff --git "a/docs/images/Apuntes/Pro-2/Tema-7-y-8/EqInserci\303\263n.png" "b/docs/images/Apuntes/Pro-2/Tema-7-y-8/EqInserci\303\263n.png" new file mode 100644 index 0000000000000000000000000000000000000000..04a3e55e70b4cb69f2246bb099656ebbc6a488ff GIT binary patch literal 13681 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 R`-cinR#Hi#O58a3{{p*pzAgX& literal 0 HcmV?d00001 diff --git a/docs/topics/03-Apuntes/Pro-2/Tema-7-y-8-Arboles-Binarios-de-Busqueda.md b/docs/topics/03-Apuntes/Pro-2/Tema-7-y-8-Arboles-Binarios-de-Busqueda.md index 271865f..33becd8 100644 --- a/docs/topics/03-Apuntes/Pro-2/Tema-7-y-8-Arboles-Binarios-de-Busqueda.md +++ b/docs/topics/03-Apuntes/Pro-2/Tema-7-y-8-Arboles-Binarios-de-Busqueda.md @@ -13,7 +13,8 @@ SPDX-License-Identifier: CC-BY-NC-4.0 El TAD Árbol Binario de Búsqueda ABB y el TAD Árbol Binario de Búsqueda AVL, especificación informal, implementación y -descripción gráfica. Operaciones explicadas de forma gráfica e implementadas. +descripción gráfica. Operaciones explicadas de forma gráfica e implementadas. Rotaciones (LL, RR, LR y RL) y factor de +equilibrio. @@ -244,3 +245,11 @@ TAD. [Wikipedia](https://es.wikipedia.org/wiki/Árbol_AVL) Respecto a la [especificación del árbol binario de búsqueda ABB](#abb-operaciones) solo cambian las funciones de inserción y borrados, que también deben **mantener equilibrado el árbol**. +#### Insertar (insertKey) + +Si el árbol está en perfecto equilibrio una inserción no romperá el equilibrio. De no estarlo, una inserción podría +romper el equilibrio. + +![EqInserción.png](EqInserción.png) + +#### Borrar (removeKey) From 6d4293174369d0c81d586e09e8a28da75a1640d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Portas=20L=C3=B3pez?= <81629707+TeenBiscuits@users.noreply.github.com> Date: Mon, 13 May 2024 20:06:50 +0200 Subject: [PATCH 5/5] Borrador Tema 7 y 8 Listo --- ...Tema-7-y-8-Arboles-Binarios-de-Busqueda.md | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/docs/topics/03-Apuntes/Pro-2/Tema-7-y-8-Arboles-Binarios-de-Busqueda.md b/docs/topics/03-Apuntes/Pro-2/Tema-7-y-8-Arboles-Binarios-de-Busqueda.md index 33becd8..c72319d 100644 --- a/docs/topics/03-Apuntes/Pro-2/Tema-7-y-8-Arboles-Binarios-de-Busqueda.md +++ b/docs/topics/03-Apuntes/Pro-2/Tema-7-y-8-Arboles-Binarios-de-Busqueda.md @@ -18,6 +18,8 @@ equilibrio. + + ## TAD Árbol Binario de Búsqueda ABB ### Definición {id=abb-definicion} @@ -245,11 +247,22 @@ TAD. [Wikipedia](https://es.wikipedia.org/wiki/Árbol_AVL) Respecto a la [especificación del árbol binario de búsqueda ABB](#abb-operaciones) solo cambian las funciones de inserción y borrados, que también deben **mantener equilibrado el árbol**. -#### Insertar (insertKey) - -Si el árbol está en perfecto equilibrio una inserción no romperá el equilibrio. De no estarlo, una inserción podría -romper el equilibrio. +Si el árbol está en perfecto equilibrio una inserción o un borrado no romperá el equilibrio. De no estarlo, una +inserción o un borrado podría romper el equilibrio. ![EqInserción.png](EqInserción.png) -#### Borrar (removeKey) +Para solucionar estó debemos emplear [](#rotaciones-para-restaurar-el-equilibrio). + +### Rotaciones para restaurar el equilibrio + +- Rotaciones simples + - Son aquellas que involucran a dos nodos. + - La rotación left-left (LL) y la rotación right-right (RR). +- Rotaciones complejas + - Son aquellas que involucran a tres nodos. + - Tenemos la rotación right-left (RL) y la rotación left-right (LR). + +Ejemplos gráficos: + + \ No newline at end of file