TeoriaSemana1-2.ppt

34
Búsqueda y ordenación Programación II 7-8 de enero de 2009

Transcript of TeoriaSemana1-2.ppt

Bsqueda y ordenacinProgramacin II7-8 de enero de 2009FuncionesUn concepto undamenta! en este curso es !a funcinUna uncin no s!o resue!"e un pro#!ema espec$ico% sino una c!ase de pro#!emas gen&ricos'(emp!o)*sumar !os nmeros enteros + y , -espec$ico.*sumar !os nmeros enteros a y b -gen&rico.FuncionesUna uncin tiene una entrada y una salida/a entrada es una !ista de "aria#!es que especiica e! tipo de cada "aria#!e/a sa!ida es un "a!or de un tipo determinado'(emp!o en 0)int sumar(int a, int b)FuncionesUna uncin de#e reso!"er correctamente e! pro#!ema para cua!quier "a!or de !as "aria#!es de entradaPor !o tanto% tiene que deta!!ar e! proceso comp!eto que !!e"a a !a so!ucinUna uncin que no produce ningn resu!tado se !!ama accin'(emp!osint sumar(int a, int b) {int resultado = a + b;return resultado;}void mostrar(int x) {printf("El valor es %d\n", x); }/!amar a uncionesPara reso!"er un pro#!ema espec$ico de! tipo resue!to por una uncin% se llama/!amar a una uncin consiste en especiicar !os "a!ores de entrada) int suma = sumar(5, );mostrar(!);1! !!amar a una uncin se e(ecuta su proceso con !os "a!ores especiicadosPseudocdigo'! pseudocdigo es un !engua(e gen&rico para escri#ir unciones2o corresponde a ningn !engua(e de programacin -como 0 o 3a"a.'n cam#io% est4 compuesto por pa!a#ras m4s cercanas a! !engua(e natura!5amos a usar e! pseudocdigo para escri#ir unciones'(emp!osfun"ion #umar(a$natural, b$natural) devuelve naturalvariable resultado$natural;resultado a + b;devuelve resultado;ffun"iona""ion %ostrar(x$natural)// Mostrar el valor de x en la pantalla fa""ionInterpretar programas /a programacin no s!o consiste en escri#ir programas6am#i&n es necesario poder interpretar programas de otros programadores*uti!i7ar e! cdigo en su programa*adaptar e! cdigo a pro#!emas parecidos*ayudar en e! proceso de depuracin*"eriicar que !a so!ucin es correctaBsqueda lineal Bsqueda lineal con marcador Bsqueda binariaBsqueda binaria simplifcadaEsquemas sencillos de ordenacinAlgoritmo de la Burbuja: Bubble Sort Algoritmo de Insercin: Insertion SortAlgoritmo de Seleccin: Selection SortMtodos de Bsqueda y OrdenacinLos problemas ms comunes en la informtica son la bsquedala ordenacin! "mero de preguntas diarias en #oogle: $%% millones &'%%()*or lo tanto+ la efciencia de la bsqueda es importanteLa ordenacin consiste en ordenar los elementos de un conjunto con el fn de acelerar la bsquedaMtodos de Bsqueda y OrdenacinEncontrar un elemento determinado dentro de una coleccin dada!La bsqueda se reali,a sobre una estructura de datos de tama-o fjoconocido+ por ejemplo+ un .ector!Los algoritmos sir.en para /acer bsquedas sobre cualquier tipo de datos+ siempre que sea posible reali,ar comparaciones &0igualdad1+ 0menor que1) sobre este tipo!2*orqu3 se llama lineal4Bsqueda linealBsqueda lineal5funcion BusquedaLineal &6: .ector de natural 7' elem+n : natural ) de.uel.e entero8 .ariable i : natural 7$ i 9 5 7: mientras & & i n )&6;i< elem) ) /acer( i 8 i =57> fmientras? si & i n ) entonces@ de.uel.e i 75% sino55 de.uel.e -575' fsi58 AuncionBsqueda linealLa instruccin mientras lle.a una doble condicin: mientras - - i n . y -59i: e!em. . ;acerBomprobar que la doble condicin se satisface para cada .alor de la .ariable i es inefciente Cna manera de e.itar la doble condicin es introducir un marcadorBsqueda lineal con marcador5funcion BusquedaLinealConMarcador &6: .ector de natural 7'elem+n : natural ) de.uel.e entero8 .ariable i : natural 7$ i 8 5 7: 6;n=5< 8 elem 7( mientras &6;i< elem) /acer>i 8 i =57? fmientras@ si & i D n=5 ) entonces5% de.uel.e E5755 sino5' de.uel.e i758 fsi5$ AuncionLa bsqueda lineal es la primera idea que ocurre para el problema de la bsqueda!Sin embargo+ su efciencia puede ser mejorado de forma considerable!*ara /acerlo es necesario suponer que los elementos del .ector est3n ordenados!Suponemos que el .ector esta ordenado de forma ascendente &de menor a maor)!Bsqueda binariaSi el .ector est ordenado &de manera ascendente o descendente)+ es posible aplicar bsqueda binaria! La idea es /acer ser.ir la propiedad adicional del .ector para acelerar el proceso de bsqueda:5) Fi.idir el .ector en dos partes iguales! ') Si el elemento en el centro del .ector es maor que el elemento buscado+ buscar en la primera mitad!8) Si el elemento en el centro del .ector es menor que el elemento buscado+ buscar en la segunda mitad!Bsqueda binaria5funcion BusquedaBinaria &6: .ector de natural 7 elem+n : natural ) de.uel.e entero' .ariableE+F+medio : natural 78encontrado : booleano 7$ E 8 5 7: F 8 n 7( encontrado :D falso 7> mientras & &E F)no&encontrado) ) /acer? medio 8 &E=F) G '7@ si &6;medio