ebook img

Problemas y Algoritmos PDF

315 Pages·2011·1.24 MB·Spanish
by  
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Problemas y Algoritmos

Problemas y Algoritmos 8 3 4 7 6 2 9 1 5 9 7 7 7 9 6 6 Por Luis E. Vargas Azcona Algunas imagenes por Roberto L(cid:243)pez 2 Acuerdo de Licencia Esta obra estÆ bajo una licencia Atribuci(cid:243)n-No comercial-Licenciamiento Rec(cid:237)proco 2.5 MØxico de Creative Commons. Eres libre de: copiar, distribuir y comunicar pœblicamente la obra hacer obras derivadas Bajo las condiciones siguientes: Atribuci(cid:243)n. Debes reconocer la autor(cid:237)a de la obra en los tØrminos especi(cid:28)cados por el propio autor o licenciante. No comercial. No puedes utilizar esta obra para (cid:28)nes comerciales. Licenciamiento Rec(cid:237)proco. Si alteras, transformas o creas una obra a partir de esta obra, solo podrÆs distribuir la obra resultante bajo una licencia igual a Østa. Al reutilizar o distribuir la obra, tiene que dejar bien claro los tØrminos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Nada en esta licencia menoscaba o restringe los derechos morales del autor. Los derechos derivados de usos leg(cid:237)timos u otras limitaciones reconocidas por ley no se ven afectados por lo anterior. EstoessolamenteunresumenfÆcilmentelegibledeltextolegaldelalicen- cia.Paraverunacopiadeestalicencia,visitehttp://creativecommons.org/licenses/by- nc-sa/2.5/mx/ o envie una carta a Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA. 3 4 Prefacio El prop(cid:243)sito general de este libro, es el de introducir al lector en la res- oluci(cid:243)n de problemas de programaci(cid:243)n as(cid:237) como en el diseæo de algoritmos. Si bien se presentan algoritmos, el objetivo no es saturar el conocimiento del lector con una gran cantidad de algoritmos sino mostar sus fundamentos, mostrar tambiØn maneras inteligentes de usarlos para resolver problemas, y sobre todo, lograr que el lector sea capaz de diseæar sus propios algoritmos. Muchos libros de algoritmos se limitan a explicar algoritmos sin deten- erse en su fundamento matemÆtico y sin decir las aplicaciones que tiene en soluci(cid:243)n de problemas. Algunos otros si explican el fundamento de los algoritmos, pero resultan inadecuados para estudiantes con poco conocimiento matemÆtico ya que sue- len dar por hecho que el lector ya sabe elementos de teor(cid:237)a de conjuntos y matemÆticas discretas. Este libro estÆ dirigido a estudiantes con gusto de programar y resolver problemas pero que todav(cid:237)a no adquieren las bases matemÆticas necesarias para poder leer libros de algoritmos con su(cid:28)ciente fundamento matemÆtico; por lo que se pretende, no solamente explicar los algoritmos, sino tambiØn darle al lector las herramientas necesarias para entender, analizar y diseæar. Por ello, una gran cantidad de pÆginas se dedican a establecer las bases matemÆticas que sirven como soporte para la resoluci(cid:243)n de problemas de programaci(cid:243)n y tambiØn muchas pÆginas se dedican a explicar de d(cid:243)nde pueden surgir las ideas para diseæar cada algoritmo. EstelibrotambiØnpuedeserleidocomounensayoenelcualdoymipunto de vista acerca de lo que es el estudio de los algoritmos, y c(cid:243)mo los algoritmos y las matemÆticas discretas se entrelazan de tal manera que un problema de algoritmos nos lleva a las matemÆticas discretas y a su vez problemas de matemÆticas discretas nos llevan de regreso a los algoritmos a tal grado que se vuelven imposibles de separar. 5 6 Los temas tratados aqu(cid:237) son indispensables para comprender el gran cam- po de estudio de la soluci(cid:243)n de problemas mediante el uso de las com- putadoras, constituyen los fundamentos de una cantidad interminable de conocimientos y tØcnicas que estan en constante desarrollo por la investi- gaci(cid:243)n en las ciencias de la computaci(cid:243)n. Otra peculiaridad es que a lo largo del libro se muestran implementa- ciones en C++ que no usan memoria dinÆmica ni estructuras, esto es por los siguientes motivos: A veces al tener el pseudoc(cid:243)digo de un algoritmo, no resulta claro c(cid:243)mo implementarlo sin escribir demasiado. Por ello es preferible mostrar al- gunas implementaciones de ejemplo para que el lector conozca al menos una implementaci(cid:243)n corta de cada algoritmo. Muchos elementos del lenguaje C++ son muy conocidos e incluso estan presentes en otros lenguajes con una sintaxis casi idØntica a la de C++, por ello, si se utilizan pocos elementos del lenguaje, es posible que un lector que no estØ familiarizado con este lenguaje pueda igualmente entender los c(cid:243)digos. No estÆ por demÆs decir que este libro fue escrito pensando en par- ticipantes de un concurso llamado olimpiada de informÆtica, en ese concurso los participantes tienen tiempo limitado para implementar y depurar sus programas; las implementaciones son mas fÆciles de depu- rar con memoria estÆtica. Al Estudiante Puede parecer extraæo encontrar un libro de algoritmos con estas carac- ter(cid:237)sticas, ya que dedica muchas pÆginas a los fundamentos matemÆticos y omite varias cosas que varios libros de algoritmos orientados a licenciatura no dejar(cid:237)an pasar por alto, como lo son quicksort, shellsort, listas circulares, listas doblemente ligadas y tablas de dispersi(cid:243)n entre otras cosas. El motivo de esto es simple: este libro no pretende ser una referencia ni mucho menos un repaso de los temas de licenciatura; pretende aportar las herramientas bÆsicas para aplicar la programaci(cid:243)n en la resoluci(cid:243)n de problemas. Por esto mismo puede llegar a ser un recurso valioso ya que permite abor- darlaprogramaci(cid:243)ndesdeunpuntodevistamascreativoymenosrepetitivo, y al mismo tiempo el enfoque a resolver nuevos problemas es la base de la inovaci(cid:243)n. 7 Estelibroestahechoparaleersecasicomosifueraunanovela,uncap(cid:237)tulo tras otro, y si se decide saltarse uno o mas cap(cid:237)tulos se corre el riesgo de que mas adelante no se pueda seguir bien. La diferencia con una novela es la gran cantidad de problemas de ejemplo, los cuales conviene intentar resolver antes de leer la soluci(cid:243)n. Al Instructor La teor(cid:237)a necesaria para leer este libro de principio a (cid:28)n es muy poca, incluso un alumno de preparator(cid:237)a la deber(cid:237)a de saber. Sin embargo, muchos problemas que se mencionan, por su di(cid:28)cultad, estan lejos de ser adecuados para cualquier alumno de preparatoria e incluso pueden darle di(cid:28)cultades a graduados de la universidad; pero resultan bastante adecuados para aquellos que buscan algo mas interesante que problemas de rutina o para quienes se preparan para concursos de programaci(cid:243)n. El libro estÆ escrito de la manera en la que me gustar(cid:237)a presentar los temas si fuera yo el instructor. Es decir, procura motivar todos los conceptos antes de abordarlos for- malmente, intenta nunca dejar huecos, en la teor(cid:237)a; y sobre todo, buscar aplicaciones creativas a cada tema que se aborda evitando decir muy rÆpido la soluci(cid:243)n y dando tiempo para especular. Para resolver un problema, es necesario plantearse un diÆlogo consigo mismodepreguntasyrespuestas.DichodiÆlogotambiØnsedebedepresentar entre alumno e instructor y en muchas partes del libro se intenta plasmar el diÆlogo abordando los razonamientos que podr(cid:237)an llevar al lector a resolver cada uno de los ejemplos. Al Ol(cid:237)mpico Este libro lo escrib(cid:237) pensando principalmente en los ol(cid:237)mpicos, por lo que todo lo que se menciona aqu(cid:237) tiene aplicaci(cid:243)n directa o indirecta con la olimpiada de informÆtica. La olimpiada esta centrada en resolver problemas mediante la progra- maci(cid:243)n y el diseæo de algoritmos; para ello se requieren bases matemÆticas s(cid:243)lidas y un conocimiento profundo(aunque no necesariamente amplio) de los algoritmos. Es por eso que este libro dedica muchas pÆginas a dejar claras las bases matemÆticas y a explorar las propiedades de algoritmos; no s(cid:243)lo en intro- ducirlos. 8 Los ejemplos se deben de intentar resolver por cuenta propia para apren- der de los propios errores e ir desarrollando poco a poco un mØtodo propio para resolver problemas. Si de pronto no logras resolver un ejemplo, puedes empezar a leer la soluci(cid:243)n para darte una idea y continuar por cuenta propia. ˝ndice general I Recursi(cid:243)n 15 1. Inducci(cid:243)n MatemÆtica 19 1.1. Ejemplos de Inducci(cid:243)n . . . . . . . . . . . . . . . . . . . . . . 20 1.2. Errores Comunes . . . . . . . . . . . . . . . . . . . . . . . . . 27 1.3. De(cid:28)nici(cid:243)n de Inducci(cid:243)n . . . . . . . . . . . . . . . . . . . . . . 28 1.4. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 1.4.1. Sumas . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 1.4.2. Tablero de Ajedrez . . . . . . . . . . . . . . . . . . . . 30 1.4.3. Chocolate . . . . . . . . . . . . . . . . . . . . . . . . . 31 1.5. Sugerencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2. De(cid:28)nici(cid:243)n y Caracter(cid:237)sticas de la Recursi(cid:243)n 35 2.1. Factorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.2. Imprimir Nœmeros en Binario . . . . . . . . . . . . . . . . . . 38 2.3. Los Conejos de Fibonacci . . . . . . . . . . . . . . . . . . . . . 39 3. Recursi(cid:243)n con Memoria o Memorizaci(cid:243)n 43 3.1. Mejorando el Rendimiento de Fibonacci . . . . . . . . . . . . 43 3.2. Error Comœn en la Memorizaci(cid:243)n . . . . . . . . . . . . . . . . 45 3.3. Triangulo de Pascal . . . . . . . . . . . . . . . . . . . . . . . . 45 3.4. Teorema del Binomio . . . . . . . . . . . . . . . . . . . . . . . 48 4. Divide y VencerÆs 51 4.1. MÆximo en un Arreglo . . . . . . . . . . . . . . . . . . . . . . 52 4.2. Bœsqueda Binaria . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.3. Torres de Hanoi . . . . . . . . . . . . . . . . . . . . . . . . . . 56 9 10 ˝NDICE GENERAL 5. Bœsqueda Exhaustiva 61 5.1. Cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5.2. Conjuntos y Subconjuntos . . . . . . . . . . . . . . . . . . . . 65 5.3. Permutaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 II AnÆlisis de Complejidad 75 6. TØcnicas BÆsicas de Conteo 79 6.1. Reglas BÆsicas de Conteo . . . . . . . . . . . . . . . . . . . . . 82 6.2. Conjuntos, Subconjuntos, Multiconjuntos . . . . . . . . . . . . 83 6.3. Permutaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 6.4. Combinaciones . . . . . . . . . . . . . . . . . . . . . . . . . . 88 6.5. Separadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 7. Funciones 91 7.1. Las Funciones como Reglas . . . . . . . . . . . . . . . . . . . . 91 7.2. El Concepto Formal de Funci(cid:243)n . . . . . . . . . . . . . . . . . 94 8. AnÆlisis de Complejidad 97 8.1. Un ejemplo no muy computacional . . . . . . . . . . . . . . . 98 8.2. Algunos Ejemplos de Complejidad en Programas . . . . . . . . 99 8.3. Funci(cid:243)n de Tiempo . . . . . . . . . . . . . . . . . . . . . . . . 101 8.4. La Necesidad del S(cid:237)mbolo O . . . . . . . . . . . . . . . . . . . 102 8.5. De(cid:28)nici(cid:243)n de la notaci(cid:243)n O-mayœscula . . . . . . . . . . . . . 105 8.6. Mœltiples Complejidades en Notaci(cid:243)n O-Mayœscula . . . . . . 108 8.7. CuÆndo Un Algoritmo es Factible y CuÆndo Buscar Otro . . . 108 9. Reglas para Medir la Complejidad 111 9.1. Regla de la Suma . . . . . . . . . . . . . . . . . . . . . . . . . 111 9.2. Producto por Constante . . . . . . . . . . . . . . . . . . . . . 114 9.3. Regla del Producto . . . . . . . . . . . . . . . . . . . . . . . . 114 9.4. Complejidad en Polinomios . . . . . . . . . . . . . . . . . . . . 115 9.5. Medir antes de implementar . . . . . . . . . . . . . . . . . . . 116 9.6. Bœsqueda de Cotas Mayores . . . . . . . . . . . . . . . . . . . 118 10.Complejidades Logar(cid:237)tmicas 121 10.1.AnÆlisis de la Bœsqueda Binaria . . . . . . . . . . . . . . . . . 121 10.2.Bases de logaritmos . . . . . . . . . . . . . . . . . . . . . . . . 123 10.3.Complejidades O(NlogN) . . . . . . . . . . . . . . . . . . . . 124

Description:
Problemas y Algoritmos. 4. 7. 2. 6. 9. 5. 1. 8. 3. 9777966. Por Luis E. Vargas Azcona. Algunas imagenes por Roberto López
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.