tema 2 busqueda_ordenacion_grupo_21
DESCRIPTION
Transparencias de búsqueda y ordenación.TRANSCRIPT
![Page 1: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/1.jpg)
Análisis y Diseño de Software
Departamento de Ingeniería de Sistemas Telemáticoshttp://moodle.dit.upm.es
Tema 2. Búsqueda y Ordenación
Carlos A. Iglesias <[email protected]>
G21
![Page 2: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/2.jpg)
Búsqueda y Ordenación 2
Teoría
Ejercicio práctico en el ordenador
Ampliación de conocimientos
Lectura / Vídeo / Podcast
Práctica libre / Experimentación
Legenda
![Page 3: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/3.jpg)
Búsqueda y Ordenación 3
Bibliografía
● Data Structures & Algorithms in Java, Robert Lafore, 2nd Edition, SAMS, 2002
● Capítulos 3, 7
●http://www.informit.com/store/product.aspx?isbn=0672324539
![Page 4: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/4.jpg)
Búsqueda y Ordenación 4
Biblografía
● The Art of Computer Programming: Sorting and Searching, v.3, Donald E. Knuth, 3rd edition, 1998
![Page 5: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/5.jpg)
Búsqueda y Ordenación 5
Bibliografía
● Applets de visualización http://www.informit.com/store/product.aspx?isbn=0672324539
● http://www.sorting-algorithms.com/
● http://math.hws.edu/eck/jsdemo/sortlab.html
![Page 6: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/6.jpg)
Búsqueda y Ordenación 6
Temario
● Introducción a búsqueda y ordenación
● Búsqueda– Búsqueda lineal
– Búsqueda binaria
●Ordenación– Clasificación
– Algoritmos: selección, inserción, quicksort
● Colecciones ordenadas
● Inserción ordenada
![Page 7: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/7.jpg)
Búsqueda y Ordenación 7
Objetivos
● Entender qué son los algoritmos, por qué son importantes, y cómo se pueden comparar
● Entender los problemas de ordenación y búsqueda
● Entender algunos algoritmos de ordenación y búsqueda, sus propiedades, y cómo se implementan
![Page 8: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/8.jpg)
Búsqueda y Ordenación 8
Buscar... ordenar...
![Page 9: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/9.jpg)
Búsqueda y Ordenación 9
“La búsqueda es una herramienta básica que cada programador debería conocer para utilizar en un gran número de ocasiones” Donald Knuth, “El Arte de Programación de Ordenadores”, Vol. 3, 1973.
Búsqueda
![Page 10: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/10.jpg)
10
Búsqueda
●int busca(int val, int [] tabla)– Devuelve i tal que x== tabla[i]
– -1 si no lo encuentra
●Búsqueda lineal– Sobre cualquier array
– Recorremos el array hasta que lo encontramos
●Búsqueda binaria– Sobre arrays ordenados
![Page 11: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/11.jpg)
11
Pruebas funcionales
● Comprobamos que un método / clase / … funciona como es esperado
● Probamos casos de diferentes clases de equivalencia: representantes de casos diferentes (válidos, inválidos, ...)
● Probar casos límite de cada clase de equivalencia: 0, 1, n, n+1
● Usamos JUnit para hacer pruebas funcionales unitarias
![Page 12: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/12.jpg)
12
Pruebas de prestaciones● Medimos recursos que
consume nuestra implementación
● Nos permite comparar qué implementación (que funciona) es mejor, y en qué condiciones es razonable usarla
● Medimos (p.ej. tiempo o memoria o …) antes y después de ejecutar la función
![Page 13: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/13.jpg)
13
Ejercicio
● Programa SearchTest
● P.ej.– Pruebas sobre un
array [1, 2, 3, 4, 5]
![Page 14: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/14.jpg)
14
Búsqueda lineal
● Buscamos hasta encontrarlo
● Ejercicio. Implementar
● int buscaLineal (int val, int [] tabla)– Devuelve i tal que x== tabla[i]
– -1 si no lo encuentra
● ¿Cuántas comparaciones haremos en media?
● Se dice que tiene complejidad O(n)
![Page 15: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/15.jpg)
15
Vamos a medir...
● Test de prestaciones– Método para crear un array de tamaño n de longs
aleatorios• private long [] fillRandomArray(long n)
– Método que mida tiempos, buscando un valor aleatorio en un array de tamaño n, y que lo busque muchas veces (1M)• private long calculateTimes(Search s, int n)
– Método que imprima los tiempos, probando para diferentes tamaños de array (100, 500, 1000, ...)• private void showTimes(Search s)
![Page 16: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/16.jpg)
16
Adivina un número entre 0 y 50 ...
¿Quépreguntaríamos?
![Page 17: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/17.jpg)
17
Búsqueda binaria – Arrays.binarySearch()
●Si sabemos que está ordenado,
– Dividimos el array por su elemento medio.
– Comparamos con el elemento del centro. Si coincide, terminamos. Si el elemento es menor, debe estar en el subarray de la izda, y si es mayor en el de la derecha. Seguimos haciendo esto hasta encontrarlo• Ej. [1,2,3,4,5,6,7,8,9] y busco el 3
• [1,2,3,4]-5-[6,7,8,9] como 3 es menor que 5
• [1]-2-[3 ,4] como 3 es menor que 2 → []-3-[4] → Encontrado
![Page 18: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/18.jpg)
18
Búsqueda binaria - Ejercicios
● Programar versión iterativa● Programar versión recursiva
![Page 19: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/19.jpg)
19
Prestaciones...
● Comparar tiempos de las tres implementaciones:– Búsqueda lineal– Búsqueda binaria iterativa– Búsqueda binaria recursiva
![Page 20: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/20.jpg)
Búsqueda y Ordenación 20
Ordenación
“Pero no puedes comprobar a tiempo todos los carnets de conducir” - objetó Drake. “No lo necesitamos, Paul. Simplemente los ordenamos y buscamos los duplicados”
– Perry Mason, El caso de la Amiga Histérica, 1951
![Page 21: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/21.jpg)
Búsqueda y Ordenación 21
● En cualquier problema con una pequeña base de datos, nos enfrentamos a la ordenación: alfabética, alumnos por curso, pedidos, …
● La ordenación puede ser un paso previo a la búsqueda
Ordenación (Sorting)
![Page 22: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/22.jpg)
Búsqueda y Ordenación 22
¿Por qué estudiamos algoritmos de ordenación?
● Ordenar es muy habitual y puede requerir mucho tiempo (= ¡consumo en un móvil!)
● Se han diseñado algoritmos que permiten optimizar esta tarea
● Vamos a ver– Algoritmos básicos (poco optimizados):
• selección, inserción, burbuja
– Algoritmos más avanzados• Quicksort, búsqueda binaria
![Page 23: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/23.jpg)
Búsqueda y Ordenación 23
El problema...
![Page 24: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/24.jpg)
Búsqueda y Ordenación 24
Algoritmos de ordenación sencillos
● sort(int [] tabla)
● Burbuja– Voy permutando hasta que no hay cambios
● Selección – Voy seleccionando el menor
● Inserción– Voy insertando en su lugar
![Page 25: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/25.jpg)
Búsqueda y Ordenación 25
Algoritmos
![Page 26: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/26.jpg)
Búsqueda y Ordenación 26
Algoritmos básicos: estrategia
● En muchas pasadas– Comparo dos
elementos– Los intercambio si
no están en orden, o copio uno
![Page 27: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/27.jpg)
Búsqueda y Ordenación 27
Ordenación por Burbuja (Bubble Sort)
● Es muuuuuuuuuuuuy lento, pero muy sencillo de entender– Comparamos de dos en 2, e intercambiamos si
no están ordenados– Cuando en una iteración no hay cambios,
hemos terminado– Los más pequeños flotan a la izda
http://en.wikipedia.org/wiki/Bubble_sort
![Page 28: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/28.jpg)
28
Ordenación: burbuja
●Comparamos un elemento con el siguiente, y si es mayor los intercambiamos
●Seguimos comparando con el siguiente, e intercambiando, hasta que en la primera pasada habrá quedado el mayor a la derecha.
●Seguimos haciendo esto hasta que no hay cambios
![Page 29: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/29.jpg)
Búsqueda y Ordenación 29
Invariantes
● Para analizar un algoritmo, podemos fijarnos en los invariantes
● Invariante: condición que se cumple siempre a medida que procede el algoritmo– Facilitan depurar el algoritmo
● Burbuja: en cada pasada, el elemento que queda a la derecha, está ordenado
![Page 30: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/30.jpg)
Búsqueda y Ordenación 30
Programación - Burbuja
?
![Page 31: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/31.jpg)
Búsqueda y Ordenación 31
Análisis complejidad – notación O
● Si analizamos cuántas comparaciones hacemos
● P. ej para n = 10– 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 = 45
● En general, para N:– (N – 1) + (N – 2) + … + 1 = N * (N-1)/2
● Si N es grande, el número será N2
● La notación O : O(N2)
![Page 32: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/32.jpg)
Búsqueda y Ordenación 32
Complejidad intercambios
● Si analizamos intercambios, si suponemos que el conjunto es aleatorio, podemos suponer que sólo estarán desordenados la mitad– Si había N2/2 comparaciones, habría N2/4
intercambios
● Tanto comparaciones como intercambios son O(N2)
![Page 33: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/33.jpg)
Búsqueda y Ordenación 33
Burbuja...
“El algoritmo de ordenación de la burbuja sólo tiene de bonito el nombre”, Donald Knuth, El Arte de la Programación de Ordenadores, vol. 3., 1973.
![Page 34: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/34.jpg)
Búsqueda y Ordenación 34
Burbuja
![Page 35: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/35.jpg)
Búsqueda y Ordenación 35
Danzas húngaras
●Puedes aprender los algoritmos mirando danzas húngaras...
http://www.youtube.com/watch?v=lyZQPjUT5B4
![Page 36: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/36.jpg)
Búsqueda y Ordenación 36
Selección (Selection sort)
● Buscamos el mínimo de la lista
– Lo intercambiamos con el primero
● Buscamos el mínimo del resto de la lista
– Lo intercambiamos con el segundo
…
● En general
– Busco el mínimo entre i y la posición final de la lista
– Intercambio el mínimo con el elemento en la posición i
![Page 37: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/37.jpg)
37
Selección
![Page 38: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/38.jpg)
38
Análisis
● Invariante: los elementos de la izquierda que ya hemos intercambiado, están siempre ordenados
● Complejidad:
– Hacemos las mismas comparaciones que en la burbuja: N * (N – 1) /2 → O(N2)
– Hacemos menos intercambios, menos que N (una pasada) → O(N)
● Para grandes valores de N, pesará más el término de comparaciones, y la complejidad será O(N2)
● Para N pequeño, será más rápido que la burbuja
● En general: no es un algoritmo adecuado
● Puede ser bueno si los tiempos de intercambio son altos
![Page 39: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/39.jpg)
39
Inserción (insertion sort)
● Como con las barajas
● En cada pasada, cogemos un elemento y lo dejamos 'colocado', y vamos a por el siguiente
![Page 40: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/40.jpg)
40
Inserción
![Page 41: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/41.jpg)
41
Análisis
● Invariante: los elementos que ya hemos analizado están ordenados entre sí
● Complejidad: – En la primera pasada, comparamos con 1 carta, en la
segunda con 2, en la tercera con 3, … → 1 + 2 + 3 + … + N – 1 = N * (N – 1) / 2
– En media, compararemos con la mitad de cartas ordenadas → N * (N – 1) / 4 → O(N2)
– Número de copias similar al de comparaciones, pero una copia requiere menos tiempo que un intercambio
– Si los datos ya están ordenados (o casi), sería O(N)
![Page 42: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/42.jpg)
42
Estabilidad
● Se dice que dos algoritmos son estables si mantienen el orden original, y sólo cambian el orden si hace falta
● P. ej. tenemos alumnos ordenados por apellidos, y queremos ordenarlos por notas
● Burbuja y selección son estables
● Selección es inestable, aunque se puede hacer una implementación estable
![Page 43: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/43.jpg)
43
Quicksort(Hoare, 1960)
● Sigue estrategia “divide y vencerás”
● Pasos – Toma un elemento (pivote de la lista)– Partición: Reordena → elementos menores a
la izda de pivote, mayores a la derecha, el pivote queda en su sitio
– Recursión: ordena sublista de menores y de mayores
![Page 44: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/44.jpg)
44
QuickSort
● Divide y vencerás
<= p > pp
<= p > pp <= p > pp
<= p > p
se ordenan los casos triviales, y queda ordenado el conjunto
<= p > p <= p > p <= p > p
![Page 45: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/45.jpg)
45
Implementación
![Page 46: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/46.jpg)
46
Análisis
● Invariante: – la parte izda < pivote– la parte dcha > pivote
● Complejidad:– En la mayor parte de los casos es el más
rápido: O(n * log(n))
![Page 47: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/47.jpg)
47
Análisis complejidad
Mejor Medio PeorSelección O (n2) O (n2) O (n2)Inserción O (n) O (n2) O (n2)
Burbuja O (n) O (n2) O (n2)Quick sort O (n log n) O (n log n) O (n2)
![Page 48: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/48.jpg)
48
● Tiempo en ms, en Pentium 100 con 16MRam
Comparación
N selección inserción burbuja QuickSort Quick + Insert1 0 0 0 0 02 0 0 0 0 05 0 0 0 0 0
10 0 0 0 0 020 0 0 0 0 050 0 0 6 0 0
100 5 0 11 0 0200 22 11 39 0 6500 109 61 236 11 11
1.000 417 253 956 27 282.000 1.654 1.005 3.817 55 555.000 10.309 6.207 23.898 165 159
10.000 41.375 24.816 96.042 352 33620.000 165.710 99.152 381.415 807 758
![Page 49: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/49.jpg)
49
Comparación
050.000
100.000150.000
200.000250.000
300.000350.000
400.000450.000
100
200
500
1.00
02.
000
5.00
0
10.0
00
20.0
00
L
T (
ms
)
burbuja
selección
inserción
QuickSort
Quick + Insert
![Page 50: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/50.jpg)
50
Caso mejorN selección inserción burbuja QuickSort Quick + Insert
1 0 0 0 0 02 0 0 0 0 05 0 0 0 0 0
10 0 0 0 0 020 0 0 0 0 050 0 0 0 0 0
100 6 0 0 0 0200 17 0 0 0 0500 115 0 0 6 5
1.000 473 0 0 17 162.000 1.890 0 0 39 275.000 11.820 6 11 109 83
10.000 47.428 22 11 242 18120.000 189.140 39 27 522 390
![Page 51: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/51.jpg)
51
Caso mejor
100
500
2.00
0
10.0
00
inserción
Quick + Insert0
200
400
600
T (m
s)
L
inserción
burbuja
Quick + Insert
QuickSort
![Page 52: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/52.jpg)
52
Ordenar objetos en Java
● En Java para ordenar, usamos al interfaz Comparable
● int c = a.compareTo(b)
● Orden:
– c < 0 → a < b
– c == 0 → a == b
– c > 0 → a > b
● Al implementar Comparable, tenemos que cumplir:
– x.compareTo(y) == 0 ↔ x.equals(y)
– Transitividad. Si x.compareTo(y) > 0 && y.compareTo(z) > 0 → x.compareTo(z) > 0
– Si x.compareTo(y) == 0 → signo(x.compareTo(z)) == signo(y.compareTo(z)), para todo z
interface Comparable<T> { int compareTo(T o);}
![Page 53: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/53.jpg)
53
Ejemplo
public class Persiona implements Comparable {private String nombre;private String apellido;int edad;
public int compareTo(Persona otra) {int c1 = apellido.compareTo(otra.apellido);if (c1 != 0) { return c1;}int c2 = nombre.compareTo(otra.nombre);if (c2 !=0) {return c2;}return otra.edad – edad;
}}
![Page 54: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/54.jpg)
54
Inserción: búsqueda + ordenación
● Si vamos a insertar y buscar objetos comparables, podemos...
● Inserción ordenada + búsqueda binaria● Inserción (como venga) + búsqueda lineal● Inserción + ordenación + búsqueda binaria●¿qué hacemos?
• → según lo que tarde cada operación
![Page 55: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/55.jpg)
55
Inserción ordenada
● Si sabemos que el array ya está ordenado...
●Hay variantes como 'binary insertion sort' que hace una búsqueda binaria (en vez de lineal) para determinar dónde insertar
![Page 56: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/56.jpg)
56
Ordenación perezosa (lazy sorting)
● Puede ser interesante ordenar sólo cuando hace falta (dependerá de cómo sea de costoso!)
● Insertar sin preocuparnos del orde
●Ordenar al sacar un elemento
dato[pos++] = nuevoDato;ordenado = false;
if (!ordenado) { sort(datos, 0, pos); ordenado = true;}return binarySearch(datos, dato);
![Page 57: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/57.jpg)
Búsqueda y Ordenación 57
Resumen
● Tenemos diferentes algoritmos para ordenar y buscar
● Las pruebas de prestaciones nos permiten medirlos– Es difícil (elementos externos como la máquina
o GC en Java)
● Hemos visto dos algoritmos de búsqueda: lineal y binaria (para arrays ordenados)
![Page 58: Tema 2 busqueda_ordenacion_grupo_21](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b205cd8b42a4e048b47e2/html5/thumbnails/58.jpg)
Búsqueda y Ordenación 58
Resumen
● Los algoritmos sencillos de ordenación (burbuja, inserción, selección) tienen complejidad media O(N2)
● Quicksort tiene complejidad O(nlog(n)) y puede ser inestable, según la implementación