Aálss y Dseño de Algortmos El Problema de Búsqueda Arturo Díaz Pérez Cojutos estátcos Arboles de decsó para búsqueda Cojutos dámcos Arboles de búsqueda bara Aálss del peor caso Aálss del caso promedo Arboles -3 Aálss y Dseño de Algortmos Searchg- Plateameto Búsqueda Dado x determar s x S. Dado x determar la poscó de x, s x S. Dado x determar la R(x), s x S. Característcas del cojuto S. Estátco vs. dámco Ordeado vs. desordeado Llaves duplcadas vs. llaves úcas Aálss y Dseño de Algortmos Searchg-
Cojutos Estátcos Icalmete os cocetraremos e la búsqueda de llaves sobre cojutos estátcos El cojuto de llaves o camba durate la ejecucó Dos algortmos famlares Búsqueda bara Búsqueda secuecal Determaremos que el tempo de ejecucó de cualquer algortmo de búsqueda que depede e comparacoes es e el peor caso Ω(log ) Aálss y Dseño de Algortmos Searchg-3 Búsqueda Secuecal vod BusquedaSecuecal( t A[], t, t x ) { t ; for( ; < ; ) f( A[] x ) E el peor caso O() retur ; retur -; x? El arreglo A puede estar e cualquer orde Aálss y Dseño de Algortmos Searchg-4
Búsqueda Bara vod BusquedaBara( t A[], t, t j, t x) { tk; f( < j ) { k ( j) / ; f( A[k] > x ) retur BusquedaBara( A,, k-, x ); elsef( A[k] x ) retur k; else /*f ( A[k] < x ) */ retur BusquedaBara( A, k, j, x ); else retur -; El arreglo A debe estar ordeado T() c T() T(/) d Aálss y Dseño de Algortmos Searchg-5 Arbol de Decsó para la B. Bara Sea S[] s,..., S[ 7] s 7 Regresa ídce x s 4 < > x s 4 x s 6 < > < > x s x s 6 3 x s x s 5 7 < > < > < > < > F F F 3 F F 5 F F 7 F Aálss y Dseño de Algortmos Searchg-6 3
Arbol de Decsó para la B. Secuecal x s x s x s 3 F 3 Aálss y Dseño de Algortmos Searchg-7 Arbol de Decsó para la Búsqueda Cada hoja represeta u puto e el cual el algortmo se detee y reporta u ídce dode x s (x es la llave buscada) o reporta ua falla U árbol de decsó es váldo para buscar ua llave x sobre llaves s para cada reporte co éxto, exste u camo de la raíz a la hoja que reporta el éxto El árbol de decsó es podado s cada hoja es alcazable Cada algortmo que busca ua llave x e u arreglo de llaves tee u árbol de decsó váldo podado correspodete Aálss y Dseño de Algortmos Searchg- 4
Profuddad de u Arbol Baro Recordatoro: S es el úmero de odos e u árbol baro y d es la profuddad, etoces, log d Para que u árbol de decsó váldo para buscar ua llave x sobre llaves dsttas sea podado, el árbol baro debe cosstr de al meos odos Cualquer algortmo determsta que busca medate comparacoes ua llave x e u arreglo de llaves dsttas debe hacer e el peor caso al meos log comparacoes de llaves Aálss y Dseño de Algortmos Searchg-9 Cojutos Dámcos Muchas aplcacoes requere sercoes y supresoes de regstros durate la ejecucó. Las búsquedas realzadas sobre estos cojutos se cooce como búsqueda dámca Ej: Sstemas de reservacoes para aerolíeas Alguas estructuras de datos o so adecuadas para cojuto dámcos Las lstas lgadas o permte hacer búsquedas rápdas Los arreglos so de tamaño fjo Aálss y Dseño de Algortmos Searchg- 5
Arbol de Búsqueda Bara El árbol de búsqueda bara es ua estructura de datos mportate para cojutos dámcos U árbol de búsqueda bara es u árbol baro e dode cada odo es u objeto el cual cotee cuatro campos: hjo zquerdo, hjo derecho, padre y valor M B W A F Y Aálss y Dseño de Algortmos Searchg- Arboles de Búsqueda Bara U árbol de búsqueda bara debe satsfacer la sguetes propedades: S y está e el subárbol zquerdo de x, etoces, llave[y] < llave[x] S y está e el subárbol derecho de x, etoces, llave[y] > llave[x] x < x > x Aálss y Dseño de Algortmos Searchg- 6
Búsqueda Búsqueda( x, k ) beg f x l or k llave[x] the retur x; f( k < llave[x] ) the Búsqueda( left[x] ) else Búsqueda( rght[x] ) ed; Aálss y Dseño de Algortmos Searchg-3 Recorrdo EOrde RecorrdoEOrde( x ) beg f x <> l the beg RecorrdoEOrde( left[x] ); wrtel( x ); RecorrdoEOrde( rght[x] ) ed ed; Aálss y Dseño de Algortmos Searchg-4 7
Isercó B A F B A F E Aálss y Dseño de Algortmos M M W W Y Y IsertaArbol( T, z ) beg y Nl x root[ T ] whle x NIL do beg y x; f key[z] < key [x ] the x left [ x ] else x rght [ x ] ed; p [z] y; f y Nl the root[ T ] z else f key[ z ] < key[ y ] the left [ y ] z else rght [ y ] z ed; Searchg-5 Búsqueda: Peor Caso s s s s s s s < s <... < s s > s >... > s La costruccó del árbol toma ( ) O( ) Aálss y Dseño de Algortmos Searchg-6
Búsqueda: Peor Caso Supoedo que se ha costrudo el árbol co los elemetos, Pregutar por la membresía de u elemeto tomaría. Mejor caso: paso O() Peor caso: pasos O() Caso promedo: / pasos O() Aálss y Dseño de Algortmos Searchg-7 Búsqueda: Caso Promedo Es ecesaro cosderar el promedo de todos los posbles árboles que se puede costrur. Observacoes Las operacoes que preguta por la membresía de, serta o remueve u elemeto toma u tempo proporcoal a la logtud del camo de la raíz al odo correspodete. Así que se tratará de aalzar la logtud de camo promedo e árboles aleatoros. Suposcoes Los árboles se forma úcamete por sercoes Todos los ordeametos posbles de los elemetos sertados so gualmete probables Aálss y Dseño de Algortmos Searchg- 9
Búsqueda: Caso Promedo Sea P() el úmero de odos e promedo e el camo de la raíz a cualquer odo e u árbol co odos P(), P() S a, S,...,S sort s,..., s k, s k a k a elemetos < a -- elemetos > a Aálss y Dseño de Algortmos Searchg-9 Búsqueda: Caso Promedo Observacoes La logtud de camo promedo e el subárbol zquerdo es P() La logtud de camo promedo e el subárbol derecho es P(--) Logtud promedo es ( ) P P( ) Aálss y Dseño de Algortmos ( P( ) ) ( )( P( ) ) P( ) ( - -) P( - -), [ ( ) ( ) ( ) ] ( ), P P P Se puede demostrar que P( ) 4log Searchg-
Aálss y Dseño de Algortmos Searchg- Búsqueda: Caso Promedo Demostracó por duccó Para 4log ) ( P Supogamos que es certa para todos los < ) ( ) ( P P [ ] log 4 log 4 log ) ( log 4 log Aálss y Dseño de Algortmos Searchg- Búsqueda: Caso Promedo Para todo > > / se tee que [ ] log log log log log < Para todo / se tee que log log ) ( P log log ) )( ( log ) ( ) ( P 4 log log log 4 log <
Búsqueda: Caso Promedo Dado que P( ) 4log, se puede probar que P( ) c log para algua costate c > Por lo tato, se dce que P() es u O( log ) Este resultado es váldo para el promedo de la operacó de búsqueda sobre todas las etradas co llaves Aálss y Dseño de Algortmos Searchg-3 Cómo mejorar las cosas? Los resultados se trasforma a cotas para el peor caso cuado el árbol baro está balaceado Otros efoques: Arboles AVL Arboles rojegros Arboles B: ua clase de árboles. Arboles -3: u caso especal Tablas de hash No adecuadas para el problema de ordeameto. Co ua buea fucó de dspersó, la sercó, supresó y búsqueda toma u tempo cas costate Aálss y Dseño de Algortmos Searchg-4
Arboles -3 Arbol -3 Cada odo teror tee dos o tres hjos. Los camos de la raíz a las hojas tee todos la msma logtud. U árbol co cero odos o u odo es u caso especal de u árbol -3. U árbol -3 se utlza para represetar cojutos cuyos elemetos matee u orde leal, '<'. Todos los elemetos se coloca e las hojas; s u elemeto a está colocado a la zquerda de b, etoces, se debe satsfacer que a < b. Aálss y Dseño de Algortmos Searchg-5 Arboles -3 Arbol -3 E cada odo teror se almacea la "llave " del elemeto más pequeño que es u descedete del segudo hjo. S exste u tercer hjo, se almacea també la "llave" del elemeto más pequeño que es u descedete del tercer hjo. U árbol -3 de k veles tee etre k- y 3 k- hojas. Para represetar u cojuto de elemetos se requere al meos log 3 veles y o más de log veles. Aálss y Dseño de Algortmos Searchg-6 3
Arboles -3: Isercó 7 6 5-9 - 5 7 6 9 7 6 Iserta 5-9 Aálss y Dseño de Algortmos 5 7 6 9 Searchg-7 Arboles -3: Isercó 7 6 5-9 5 7 6 9 7 6 Iserta 5 - - - 9 5 7 6 9 Aálss y Dseño de Algortmos Searchg- 4
Arboles -3: Isercó 7 6 5 - - - 9-5 7 6 9 7-6 - Iserta 5 - - - 9 Aálss y Dseño de Algortmos 5 7 6 9 Searchg-9 Arboles -3: Supresó Suprme - - 7-6 - 7 - - 5 - - - 9 5 - - 6-9 - 5 7 6 9 5 7 6 9 Aálss y Dseño de Algortmos Searchg-3 5
Arboles -3: Supresó Suprme 7 - - 7 - - 7 - - 5 - - 6-9 - 5 6-9 - 5 7 6 9 5 6 9 Aálss y Dseño de Algortmos Searchg-3 Arboles -3: Supresó Suprme 7-7 - - 5 6-9 - 5 6-9 - 5 6 9 5 6 9 Aálss y Dseño de Algortmos Searchg-3 6
Arboles -3: Efceca Efceca Claramete la operacó de búsqueda toma u tempo Ω(log 3 ) y O(log ). Las operacoes de sercó y supresó avega de la raíz a las hojas y, e el peor caso, de regreso a la raíz. Así, ambas toma també u tempo Ω(log 3 ) y O(log ). Qué hay acerca del caso promedo? Aálss y Dseño de Algortmos Searchg-33 A-3: Estructuras struct objeto { t llave;. /*Campos adcoales para la defcó del objeto */. ; struct odo teror { t llave, llave; struct odo3 *hjo, *hjo, *hjo3; struct odo3 { t tpo; /* teror, hoja */ uo { struct objeto e; struct odo_teror ; ; ; Aálss y Dseño de Algortmos Searchg-34 7
A-3: Agrega vod agrega( NODO3 *odo, OBJETO x, NODO3 **uevo, t *m ) { NODO3 *uevo; *w; t m; *uevo NULL; f( odo es hoja ) { f( x o es el elemeto e el odo ) { /* Crear u uevo odo aputado por uevo */ /* Copar x e el uevo odo */ *m x.llave; else { /* Sea w el hjo del odo a cuyo subárbol perteece x */ agrega( w, x, &uevo, &m); f( uevo! NULL ) { /*Isertar el aputador uevo etre los hjos de odo a la derecha de w */ f( odo tee cuatro hjos ) { /* Crear u uevo odo aputado por uevo */ /* Pasar el tercero y cuarto hjo de odo a uevo */ /* Ajustar llave y llave e odo y e uevo */ /* Hacer m la llave más chca etre los hjos del uevo odo */ Aálss y Dseño de Algortmos Searchg-35 A-3: Agrega vod AGREGA( OBJETO x, NODO3 *S ) { NODO3 *uevo; t mímo; NODO3 tmp; /* Verfcar s S es vacío o cosste de u solo elemeto. Iclur aquí u procedmeto de sercó adecuado */ agrega( *S, x, &uevo, &mímo ); f( uevo! NULL ) { /* Se crea u uevo odo cuyos hjos será *S y uevo */ tmp *S; *S ( struct odo3 *) malloc ( szeof( struct odo3 ) ); (*S)->llave mímo; (*S)->hjo tmp; (*S)->hjo uevo; (*S)->hjo3 NULL; Aálss y Dseño de Algortmos Searchg-36
A-3: Borra t borra( NODO3 *odo, OBJETO x ) { t solo_uo, borrado; NODO3 *w; borrado ; f( los hjos de odo so hojas ) { f( x está etre las hojas ) { /* Qutar x */ /* Correr las hjos de odo a la derecha de x ua poscó a la zquerda */ f( odo tee solo u hjo ) borrado ; else { /* Sea w el hjo de odo que puede teer a x como descedete */ solo_uo borra( w, x ); f( solo_uo ) { f( w es el prmer hjo de odo ) { f( y, el segudo hjo de odo, tee 3 hjos ) { /* Hacer que el prmer hjo de y sea el segudo hjo de w */ else { /* hacer el hjo de w, el prmer hjo de y */ /*Qutar w de etre los hjos de odo */ f( odo tee ahora u hjo ) borrado ; Aálss y Dseño de Algortmos Searchg-37 A-3: Borra... else f ( w es el segudo hjo de odo ) { f( y, el prmer hjo de odo, tee 3 hjos ) { /* Hacer que el tercer hjo de y sea el prmer hjo de w*/ else { f( z, el tercer hjo de odo, exste y tee 3 hjos ) { /*Hacer que el prmer hjo de z sea el segudo hjo de w */ else { /*Hacer que el hjo de w sea el tercer hjo de y */ /*Qutar w de etre los hjos de odo */ f( odo tee ahora u solo hjo ) borrado else f( w es el tercer hjo del odo ) { f( y, el segudo hjo de odo, tee 3 hjos ) { /* Hacer que el tercer hjo de y, sea el prmer hjo de w */ else { /*Hacer que el hjo de w sea el tercer hjo de y */ /* Qutar w de etre los hjos del odo */ retur borrado; Aálss y Dseño de Algortmos Searchg-3 9