Está en la página 1de 581
FUNDAMENTOS DE ALGORITMIA G. Brassard / P. Bratley Départament d’informatique et de recherche opérationelle Université de Montréal Traducci6n: Rafael Garefa-Bermejo Facultad de Fisicas Universidad de Salamanca Revisién técnica: Narciso Marti Facultad de Mateméticas Universidad Complutense de Madrid Ricardo Pefia Escuela Superior de Informatica Universidad Complutense de Madrid Luis Joyanes Aguilar Facultad de Informatica Universidad Pontificia de Salamanca en Madrid PRENTICE HALL Madrid * México * Santafé de Bogoté * Buenos Aires ¢ Caracas * Lima * Montevideo San Juan * San José * Santiago * Sao Paulo * White Plains Contenido PROLOGO.... PROLOGO A LA EDICION EN ESPANOL 1, PRELIMINARES . 1.1 IntRopucciOn.. 1.2 {Qué ES UN ALGORITMO’ 1.3 NOTACION PARA LOS PROGRAMAS.. 14 Enteros, reales e intervalos 1.4.4 Funciones y relaciones 14.5 Cuantificadores ... 14.6 Sumas y producto: 14.7 Miscelanea.... . 1,5 TECNICA DE DEMOSTRACION 1: CONTRADICCION... 1.6 TECNICA DE DEMOSTRACION 2: INDUCCION MATEMATICA., 1.6.1 El principio de induccién matemitica. 1.6.2 Unasunto completamente distinto... 1.6.3 Induccién matematica generalizada 1.6.4 Inducci6n constructiva 1.7 RECORDATORIOS. 1.7.1 Limites. 1.7.2 Series sencillas 1.7.3 Combinatoria basica 1.74 Probabilidad elemental 1.8 PROBLEMAS.... 1.9 REEERENCIAS Y TEXTOS MAS AVANZADOS: viii Fundamentos de Algoritmia 2 ALGORITMIA ELEMENTAL BEBEEBBE 28 29 2.10 3 NOTACION ASINTOTICA. 31 3.2, 33 3A 35 3.6 3.7 38 4 ANALISIS DE ALGORITMOS.. al 42 43 INTRODUCCION PROBLEMAS Y EJEMPLARES ERICIENCIA DE LOS ALGORITMOS.. ANALISIS DE «CASO MEDIO» Y DE «CASO PEOR> ..... QUE ES UNA OPFRACION ELEMENTAL?... POR Qu HAY QUE BUSCAR LA EFICIENCIA 2.7.3 Multiplicacién de enteros muy grandes. 2.7.4 Célculo del maximo comin divisor. 2.7.5 Céilculo de la sucesién de Fibonacdi.. 2.7.6 Transformada de Fourier {CUANDO QUEDA ESPECIFICADO UN ALGORITWO?.. ‘PROBLEMAS .. [REFERENCIAS ¥ TEXTOS MAS AVANZADOS... INTRODUCCION. ‘UNA NOTACION PARA “EL ORDEN DE” OTRA NOTACION ASINTOTICA .. NOTACION ASINTOTICA CONDICIONAL NOTACION ASINTOTICA CON VARIOS PARAMETROS sesso OPERACIONES SOBRE NOTACION ASINTOTICA ‘PROBLEMAS REFERENCIAS Y TEXTOS MAS AVANZADOS INTRODUCCION... ANALISIS DE LAS ESTRUCTURAS DE CONTROL... 42.1. Secuencias 422 Bucles “para” (desde) 42.3 Llamadas recursivas. 42.4 Bucles “mientras” y “repetir” ‘Uso DB UN BAROMETR( & BRRRBBSVABRIAIGRSA RRERsee 8 eo m1 m2 112 14 16 118 Contenido ix 44° EJEMPLOS ADICIONALES .. sesanonseosnensosnnrnrenneuneynneommenangannett 120 4.5 ANALISIS DEL CASO MEDIO 126 4.6 ANALISIS AMORTIZADO. 127 4.7 RESOLUCION DE RECURRENCIA! 132 47.1 Suposiciones inteligentes. 132, 4.7.2 Recurrencias homogéneas 135 4.7.3. Recurrencias no homogéneas. 140 4.74 Cambios de variable. 148 4.7.5 Transformaciones de intervalo.. 156 4.7.6 Recurrencias asintéticas 157 48 PROBLEMAS 160 4.9 REFERENCIAS Y TEXTOS MAS AVANZADOS... 166 5 ESTRUCTURAS DE DATOS... 167 5.1 MATRICES (ARRAYS), PILAS Y COLA! 167 5.2 170 53 Listas. 171 54 GRAFOS 173 5.5 ARBOLES.. 175 5.6 TABLAS ASOCIATIVAS... 181 5.7 58 59 5.10 5.11 6 ALGORITMOS VORACES.... 211 6.1 DAR LA VUELTA (1) sree 21h 6.2 CARACTERISTICAS GENERALES DE LOS ALGORITMOS VORACES ... 213 6.3 GRAFOS: ARBOLES DE RECUBRIMIENTO MiNIMO ... BERESER x Fundamentos de Algoritmia 662 Planificacién con plazo fijo. 233 6.7 PROBLEMAS versssssssecssssseeuens 242, 6.8 REFERENCIAS Y TEXTOS MAS AVANZADOS...... 245 7 DIVIDE Y VENCERAS. se reoennenes — 247 7.1 INTRODUCCION: MULTIPLICACION DE ENTEROS MUY GRANDES .. 2a7 7.2 BL CASO GENERAL sssesesssssereerinasnscssenatsetens 251 7.3 BUSQUEDA BINARIA. 255 74 ORDENACION ... 257 74.1 Ordenaci6n por fusic . 258 74.2 Ordenacién répida (Quicksort). ersrsansanns . 260 7.5 BUSQUEDA DE LA MEDIANA... 266 7.6 MULTIPLICACION DE MATRICES 272 7.7 EXPONENCIACION.. 274 7.8 ENSAMBLANDO TODAS LA PIEZAS: INTRODUCCION A LA CRIPTOGRAFIA 279 7.9 PROBLEMAS.. 282, 7.10 REFERENCIAS Y TEXTOS MAS AVANZADOS.. 288 8 PROGRAMACION DINAMICA.. 21 8.1 Dos EJEMPLOS SENCILLOS.. 292 811 Calculo del coeficiente binomial... 292, 81.2 Elcampeonato mundial.... 293 8.2 DEVOLVER CAMBIO (2).. 295, 8.3 EL PRINCIPIO DE OPTIMALIDAD.. 298 8.4 EL PROBLEMA DE LA MOCHILA (2). 299 8.5 CAMINOS MINIMOS....... 301 8.6 MULTIPLICACION ENCADENADA DE MATRICES. 304 309 31L 312 8.10 REFERENCIAS Y TEXTOS MAS AVANZADOS 317 9 EXPLORACION DE GRAFOS..... 319 9.1 GRAFOS Y JUEGOS: INTRODUCCION.... 319 9.2 RECORRIDO DE ARBOLES. seanes 326 10 93 94 95 96 97 98 99 9.10 ALGORITMOS PROBABILISTAS 10.1 10.2 103 104 105 106 10.7 108 10.9 Contenido xi 9.2.1 Preacondicionamiento. RECORRIDO EN PROFUNDIDAD: GRAFOS NO DIRIGIDOS. 93.1 Puntos de articulacién. RECORRIDO EN PROFUNDIDAD: GRAFOS DIRIGIDOS, 9.4.1 Grafos aciclicos: ordenacién topolégica . RECORRIDO EN ANCHURA ‘VUELTA ATRAS.. 9.6.1 El problema de la mochila (3) 9.6.2 El problema de las ocho reinas 963 Elcaso general... RAMIFICACION Y PODA 97.1 El problema de la asignacié: 9.7.2 El problema de la mochila (4) 973 Consideraciones generales REFERENCIAS Y TEXTOS MAS AVANZADOS. INTRODUCCION. PROBABILISTA NO IMPLICA INCTERTO. ‘TIEMPO ESPERADO FRENTE A TIEMPO PROMED! ‘GENERACION DE NUMEROS PSEUDOALEATORICS... ALGORITMOS PROBABILISTAS NUMERICOS. 10.5.1 La aguja de Buffon. 10.5.2 Integracién numérica 10.5.3 Conteo probabilista. ALGoRtrMos DE MoNTE CARLO 10.6.1 Verificaci6n de la multiplicacién de matrice 10.6.2 Comprobacién de primalidad.... 10.6.3 ;Puede un nimero ser probablemente primo’ 10.6.4 Amplificacién de la ventaja estocistica...... ALGORIIMOs DE Las VEGAS.... 10.7.1 El problema de las ocho reinas, segunda parte. 10.7.2. Seieccién y ordenacién probabilistas 10.73 Tablas de dispersin universale 10.7.4 Factorizacién de enteros muy grandes. PROBLEMAS REFERENCIAS Y TEXTOS MAS AVANZADOS. 337, xii Fundamentos de Algoritmia TL ALGORITMOS PARALELOS. ..sssteesrremsnereerensertesrersnioene 12 ni H2 n3 na4 ILS 116 ns ns 11.10 1 COMPLEJIDAD COMPUTACIONAL... 12.1 12.2 123 124 12.5 UN MODELO PARA LA COMPUTACION PARALELA ..... TECNICAS BASICAS...w. meee 11.2.1 Cémputo con un rbol binario completo... 11.2.2 Duplicacién de punteros ‘TRABAJO Y EFICIENCIA... Dos RJEMPLOS DE TEORIA DE GRAFOS.. 114.1 Caminos minimos 11.42 Componentes conexos EVALUACION DE EXPRESIONES EN PARALELO. REDES DE ORDENACION EN PARALELO.... 11.6.1 El principio cero-uno... 116.2 Redes de fusién en paralelo. 11.6.3 Redes de ordenacién mejorada: ORDENACION EN PARALELO.. 17.1 Preliminare: 117.2 La idea clave. 11.7.4 Un esbozo de los detalles. INTRODUCCION: UN EJEMPLO SENCILLO... ARGUMENTOS DE LA TEORIA DE LA INFORMACION.. 12.2.1 La complejidad de la ordenacién..... 12.2.2 La complejidad, al rescate de la algoritmia ARGUMENTOS DEL ADVERSARIO... 12.3.1 Biasqueda del maximo en un vector. 12.3.2 Comprobacién de la conectividad de un grafo. 12.3.3 La mediana, segunda parte REDUCCIONES LINEALES. 12.4.1 Definiciones formales 12.4.2 Reducciones entre problemas matriciales .. 124.3 Reducciones entre problemas de caminos minimos. INTRODUCCION A LA NP-COMPLETITUD.......... Contenido xiii 12.5.1 12.5.2 125.3 1254 Algunas demostraciones de NP-completitud 12.5.5 Problemas NP-dificiles 1256 i 12.6 UN 200 DB CLASES DE COMPLEJIDAD 12.7 PROBLEMAS..... 12.8 REFERENCIAS Y TEXTOS MAS AVANZADOS..... 13 ALGORITMOS HEURISTICOS Y APROXIMADOS... 13.1 Aucorrrmos HEURISTICOS.. 13.14 Coloreado de un grafo. 13.2 ALGORITMOS APROXIMADOS. 13.2.1 El viajante métrico. 13.2.2 El problema de Ja mochila ( 13.23 Lienado de cajas 13.3 PROBLEMAS DE APROXIMACION CON DIFICUTAD NP... 133.1 Problemas de aproximacién con dificultad absoluta 13.3.2 Problemas de aproximacién con dificultad relativa.... 13.4 LO MISMO, PERO DISTINTO... 13.5 ENFOQUES DE APROXIMACION .... 13.5.1 Lienado de cajas, segunda part 1352 El problema de la mochila (6).. 13.6 PROBLEMAS sessesseon 13.7 REFERENCIAS Y TEXTOS MAS AVANZADOS REFERENCIAS... 555 NOTAS FINALES.... 569 {NDICE ANALITICO. 571 Capitulo Preliminares 1.1 INTRODUCCION En este libro hablaremos de algoritmos y de algoritmia. Este capitulo introduc- torio define en primer lugar lo que queremos decir con estas dos palabras. Ilus- traremos esta discusién formal mostrando varias formas de realizar una sencilla multiplicacién. También las tareas de todos los dias poseen profundidades ocul- tas. Ademas aprovecharemos la oportunidad para explicar por qué pensamos que el estudio de los algoritmos es a la vez util e interesante. A continuacién explicaremos la notacién que vamos a utilizar a lo largo de to- do el libro para describir algoritmos. El resto del capitulo consta en esencia de recordatorios de cosas que esperamos que el lector ya haya visto en otros luga- res. Después de una breve revisién de la notacién matematica estandar recorda- remos dos técnicas de demostracién ttiles: la demostracién por contradiccién y Ja demostracién por induccién matematica. A continuacién enumeramos algu- nos resultados acerca de limites, sumas de series, combinatoria elemental y pro- babilidad. Los lectores que ya estén familiarizados con estos temas deberian de leer las Secciones 1.2 y 1.3, y examinar brevemente el resto del capitulo, obviando aquel material que ya les resulte conocido. Es preciso prestar especial atencién a la Sec- cién 1.6.4. Aquellas personas que tengan olvidadas sus matemiticas basicas y sus cien- cias de la computacién, deberfan cuando menos leer los principales resultados que presentamos para refrescar su memoria. Nuestra presentacién es sucinta e informal y no pretende ocupar el puesto de cursos de andlisis elemental, de cAl- culo ni de programaci6n, La mayoria de los resultados que damos se necesitaran posteriormente en el libro; a la inversa, en los capitulos posteriores intentaremos no utilizar resultados que vayan mis alla de las bases que se han reunido en es- te capitulo. 2. Preliminares Capitulo 1 1.2 ZQUE ES UN ALGORITMO? Un algoritmo, nombre que proviene del matematico persa del siglo IX al- Khowéarizmi, es sencillamente un conjunto de reglas para efectuar algun cal- culo, bien sea a mano 0, mas frecuentemente, en una m4quina. En este libro nos preocupan fundamentalmente los algoritmos que van a ser utilizados en una computadora. Sin embargo, también podrian incluirse otros métodos sis- tematicos para calcular un resultado; los métodos que aprendimos en la es- cuela para sumar, multiplicar y dividir nimeros, son también algoritmos, por ejemplo. Muchos monaguillos ingleses, aburridos por platicas poco intere- santes, pasan el tiempo calculando la fecha de Pascua y empleando el algo- ritmo que se emplea en el Devocionario Anglicano. El algoritmo mas famoso de la historia procede de un tiempo anterior al de los antiguos griegos: se tra- ta del algoritmo de Euclides para calcular el maximo comin divisor de dos enteros. La ejecucién de un algoritmo no debe de implicar, normalmente, ninguna de- cisién subjetiva, ni tampoco debe de hacer preciso el uso de la intuicién ni de la creatividad. Por tanto se puede considerar que una receta de cocina es un algo- ritmo si describe precisamente la forma de preparar un cierto plato, proporcio- nandonos las cantidades exactas que deben de utilizarse y también instrucciones detalladas acerca del tiempo que debe de guisarse. Por otra parte, si se incluyen nociones vagas tales como «salpimentar a su gusto» o «guisese hasta que esté medio hecho» entonces no se podria llamar algoritmo. Una aparente excepcion a esta regla es que admitiremos como algoritmos unos procedimientos que efectdan elecciones aleatorias acerca de lo que hay que hacer en una situacién dada. El Capitulo 10 en concreto trata de estos algoritmos probabilistas. Lo importante aqui es que el término «aleatorio» no quiere decir ar- bitrario; por el contrario, utilizamos valores seleccionados de tal manera que la probabilidad de seleccionar cada uno de los valores es conocida y esta controla- da. Una instruccién tal como «seleccionar un ntimero entre 1 y 6» si no se da nin- gan detalle mas, no es admisible en un algoritmo. Sin embargo, seria aceptable decir «seleccionar un nimero entre 1 y 6 de tal manera que todos los valores ten- gan la misma probabilidad de ser seleccionados». En este caso, cuando se ejecu- te el algoritmo manualmente, quiz4 decidamos obedecer esta instruccién tirando un dado sin cargar; en una computadora, podriamos implementarlo utilizando un generador de numeros pseudoaleatorios. Cuando se utiliza un algoritmo para calcular la respuesta de un problema concreto, lo normal es suponer que las reglas nos darn, si se aplican correcta- mente, la respuesta correcta. Un conjunto de reglas que calcula que 23 veces 51 es 1.170 no suele ser es titil en una prdctica general. Sin embargo en algunas cir- cunstancias, estos algoritmos aproximados pueden resultar atiles. Si deseamos calcular la raiz cuadrada de 2, por ejemplo, ningun algoritmo nos podra dar una respuesta exacta en notaci6n decimal, por cuanto la representacién de v2 es infi- nitamente larga y no se repite. En este caso, nos conformaremos con que el al- Secei6n 1.2 4Qué es un algoritmo? 3 goritmo nos pueda dar una respuesta que sea tan precisa como nosotros decida- mos: 4 digitos de precision, o 10 digitos o los que queramos. Lo que es mas importante, como veremos en el Capitulo 12, es que hay pro- blemas para los cuales no se conocen algoritmos practicos. Para tales problemas, la utilizacién de uno de los algoritmos disponibles para encontrar la respuesta exacta requeriré en la mayoria de los casos un tiempo excesivo: por ejemplo, al- gunos siglos. Cuando esto sucede, nos vemos obligados, si es que necesitamos disponer de alguna clase de solucién al problema, a buscar un conjunto de re- glas que creamos que nos van a dar una buena aproximacién de la respuesta co- rrecta, y que podremos ejecutar en un tiempo razonable. Si podemos demostrar que la respuesta computada mediante este conjunto de reglas no es excesiva- mente errénea, tanto mejor. En algunas ocasiones ni siquiera esto es posible, y solamente podremos fiarnos de nuestra buena suerte. Este tipo de procedimien- to, basado fundamentalmente en el optimismo y frecuentemente con un apoyo te6rico minimo, se denomina un algoritmo heuristico o simplemente una heuristi- ca, Obsérvese una diferencia crucial entre los algoritmos aproximados y la heu- ristica: con los primeros podemos especificar el error que estamos dispuestos a aceptar; con la segunda no podemos controlar el error, pero quiz4 seamos capa- ces de estimar su magnitud. En los doce primeros capitulos de este libro, a no ser que el contexto indique claramente Jo contrario, suponemos que un algoritmo es un conjunto de reglas para calcular la respuesta correcta a algun problema. Por otro lado el Capitulo 13 trata en su totalidad de algoritmos aproximados y de heuristica. ' Ahora se puede definir la Algoritmia simplemente como el estudio de los al- goritmos. Cuando nos disponemos a resolver un problema, es posible que haya toda una gama de algoritmos disponibles. En este caso, es importante decidir cual de ellos hay que utilizar. Dependiendo de nuestras prioridades y de los If- mites del equipo que esté disponible para nosotros, quiz4 necesitemos seleccio- nar el algoritmo que requiera menos tiempo, 0 el que utilice menos espacio, 0 el que sea mas facil de programar y asi sucesivamente. La respuesta puede depen- der de muchos factores, tales como jos nimeros implicados, la forma en que se presenta el problema, 0 la velocidad y capacidad de almacenamiento del equipo de computacién disponible. Quizés suceda que ninguno de los algoritmos dis- ponibles sea totalmente adecuado, asi que tendremos que disefiar un algoritmo nuevo por nuestros propios medios. La Algoritmia es la ciencia que nos permi- te evaluar el efecto de estos diferentes factores externos sobre los algoritmos dis- ponibles, de tal modo que sea posible seleccionar el que ms se ajuste a nuestras circunstancias particulares; también es la ciencia que nos indica la forma de di- sefar un nuevo algoritmo para una tarea concreta. Consideremos la aritmética elemental como ejemplo. Supongamos que tene- mos que multiplicar dos enteros positivos utilizando nada mas que papel y 14- piz. Si nos han educado en Norteamérica, lo mas probable es que se multiplique sucesivamente el multiplicando por cada una de las cifras del multiplicador, to- madas de derecha a izquierda, y que se escriban estos resultados intermedios 4 Preliminares Capitulo 1 uno tras otro, desplazando cada linea un lugar a la izquierda, y que finalmente se sumen todas estas filas para obtener la respuesta. Por tanto para multiplicar 981 por 1.234 se construiré una disposicién de nimeros como la de Ia figura 1.1(a). Si, por otra parte, le han educado a uno en Inglaterra, es mas probable que trabajemos de izquierda a derecha, dando lugar a la distribucién que se muestra en la figura 1.1(b). 981 981 1234 _ 1234 3924 981 2043 1962 1962, 2943, 981 3924 1210554 1210554 (@) (b) Figura 1.1, Maltiplicacién (a) americana (b) inglesa Estos dos algoritmos para la multiplicacién son muy similares: son tan pare- cidos, de hecho, que nos referiremos a ellos como el algoritmo «clasico» de la multiplicacion, sin preocuparnos por cudl de ellos queremos decir. En la figura 1.2 se ilustra un tercer algoritmo distinto para hacer lo mismo. 981 1.234 1.234 490° 2.468 245 4,936 4.936 122 9.872 61 19.744- 19.744 30 39.488 15 78.976 78.976 7 157.952 157.952 3 315.904 315.904 1 631.808 631.808 1.210.554 Figura 1.2. Multiplicacién 4 la russe Se escriben el multiplicando y el multiplicador uno junto a otro. Se hacen dos columnas, una debajo de cada operando, repitiendo la regla siguiente hasta que el naimero de la columna izquierda sea un 1: se divide el ndmero de la columna de la izquierda por 2, ignorando los restos y se duplica el niimero de la colum- na de la derecha sumdndolo consigo mismo. A continuaci6n se tachan todas las filas en las cuales el ntimero de la columna izquierda sea par, y finalmente se su- Seccion 1.2 Qué es un algoritmo? 5 man los nimeros que quedan en la columna de la derecha. La figura ilustra la forma de multiplicar 981 por 1.234. La respuesta obtenida es: 1.234 + 4,936 + 19.744 + 78.976 + ... + 631.808 = 1.210.554. Este algoritmo, que algunas veces se llama multiplicacién a Ia russe se parece al que se emplea en el hardware de una computadora binaria. Tiene la ventaja de que no es preciso memorizar ninguna tabla de multiplicacién. Lo unico que hay que saber es sumar, y también dividir un mamero por dos. Aunque no es el al- goritmo que suele ensefiarse en la escuela, ofrece ciertamente un método alter- nativo de papel y lapiz para multiplicar dos enteros positivos. En las figuras 1.3 y 1.4 se ilustra otro algoritmo distinto para multiplicar dos enteros positivos. Una vez més, ilustraremos el método multiplicando 981 por 1.234. Para este algoritmo, sin embargo, es necesario que el multiplicando y el multiplicador tengan el mismo ndmero de cifras y ademés se necesita que este ntimero sea una potencia de dos, tal como 1, 2, 4, 8, 16, etc. Esto se arregla facil- mente afiadiendo ceros por la izquierda si es necesario: en nuestro ejemplo, afia- dimos nada més un cero a la izquierda del multiplicando, transformandolo en 0981, de tal manera que ambos operandos tengan cuatro cifras. Multiplicar Desplazar Resultado id 09 12 4 108-+ ++ ii) 09 34 2 306- + i iii) 81 12 2 972: iv) 81 34 0 2754 1210554 Figura 1.3. Multiplicacion de 0981 por 1.234 mediante divide y vencerds Ahora para multiplicar 0981 por 1.234 multiplicamos primero la mitad izquier- da del multiplicando por la mitad izquierda del multiplicador (12), y escribimos el resultado (108) desplazado hacia la izquierda tantas veces como cifras haya en el multiplicador: cuatro, en nuestro ejemplo. A continuacién multiplicamos la mi- tad izquierda del multiplicando (09) por la mitad derecha del multiplicador (34), y escribimos el resultado (306) desplazado hacia la izquierda tantas veces como la mitad de las cifras que haya en el multiplicador: dos, en este caso. En tercer lugar multiplicamos la mitad derecha del multiplicando (81) por la mitad izquierda del multiplicador (12), y escribimos el resultado (972) desplazado también hacia la iz- quierda tantas veces como la mitad de las cifras que haya en el multiplicador, y en cuarto lugar multiplicamos la mitad derecha del multiplicando (81) por la mitad derecha del multiplicador (34) y escribimos el resultado (2.754), sin desplazarlo en absoluto. Por ultimo sumamos los cuatro resultados intermedios segtin se mues- tra en la figura 1.3 para obtener la respuesta 1.210.554. 6 Preliminares Capitulo 1 “ Multiplicar —.- Desplazar Resultado i) 0 1 2 0. ii) 0 2 1 0 iii) 9 1 1 9% iv) 9 2 0 18 108 Figura 1.4 Multiplicacién de 09 por 12 mediante divide y vencerés Si se ha seguido el funcionamiento del algoritmo hasta el momento, se vera que hemos reducido la multiplicaci6n de dos nimeros de cuatro cifras a cuatro multi- plicaciones de nameros de dos cifras (09 x 12, 09 x 34, 81 x 12 y 81 x 34), junto con un cierto namero de desplazamientos y una suma final. El truco consiste en obser- , Var que cada una de estas multiplicaciones de nameros de dos cifras se puede efec- tuar exactamente de la misma manera salvo que cada multiplicaci6n de ntiimeros de dos cifras requiere cuatro multiplicaciones de nimeros de una cifra, algunos desplazamientos y una suma. Por ejemplo la figura 1.4 muestra como multiplicar 09 x 12. Calculamos 0 x 1 = 0, desplazado hacia la izquierda dos veces; 0 x 2 = 0, desplazado hacia la izquierda una vez; 9 x 1 = 9, desplazado a la izquierda una vez, y 9x 2 = 18, sin desplazar. Finalmente sumamos estos resultados intermedios para obtener la respuesta: 108. Utilizando estas ideas se podria operar de tal manera que Jas multiplicaciones solamente implicasen a operandos de una cifra. (Aunque he- mos descrito la figura 1.3 antes que la figura 1.4 esto solamente era para simplificar la presentacion. Por supuesto, tenemos que hacer primero las cuatro multiplicacio- nes de nameros de dos cifras, puesto que utilizamos los valores calculados asi cuando se hace la multiplicaci6n de los ntmeros de cuatro cifras.) Este algoritmo tan poco habitual es un ejemplo de la técnica denominada «di- vide y venceras», que estudiaremos en el Capitulo 7. Si le parece improbable que pueda ser mas r4pido que el algoritmo clasico, estar usted en lo cierto, Sin em- bargo, veremos en el Capitulo 7 que es posible reducir la multiplicaci6n de dos né- meros grandes a tres, y no cuatro, multiplicaciones de ntimeros cuyo tamafio es aproximadamente la mitad, junto con un cierto namero de desplazamientos y su- mas. (Si le estimulan los desafios, intente averiguar la forma de hacerlo.) Con esta mejora el algoritmo de multiplicacién por divide y vencer4s se ejecuta més depri- sa en una computadora que con los métodos anteriores siempre que los nameros que haya que multiplicar sean suficientemente grandes. (Se conocen métodos to- davia mas répidos para operandos muy grandes.) No es totalmente necesario que la longitud de los operandos sea una potencia de dos, ni tampoco que tengan la misma longitud. El problema 1.6 muestra un caso en el cual el algoritmo pueda ser util en la practica, aun cuando los algoritmos sean relativamente pequefios, e in- cluso cuando se utilizan cuatro multiplicaciones en lugar de tres. Lo importante de todos estos ejemplos es que, incluso en un aspecto tan sen- cillo como la aritmética elemental, pueden estar disponibles varios algoritmos Para que nosotros efectuemos las operaciones requeridas. Uno puede resultar Secci6n 1.3 Notacién para los programas 7 atractivo por su familiaridad, otro por la naturaleza elemental de los célculos in- termedios implicados y un tercero por su velocidad en una maquina. Al hacer un estudio més formal de las propiedades de los algoritmos (al utilizar la algo- ritmia, en otras palabras) podemos tomar una decisién sabia acerca de la técni- ca que se debe utilizar en cualquier situacién dada. Como veremos, una buena eleccién puede ahorrar a la vez tiempo y dinero; en algunos casos, puede ser la diferencia entre el éxito y el fracaso al resolver algtin problema grande y dificil. La meta de nuestro libro es ensefiar a tomar este tipo de decisiones. 1.3 NOTACION PARA LOS PROGRAMAS Es importante decidir la forma en que vamos a describir nuestros algoritmos. Si intentamos explicarlos en espafiol, descubriremos rapidamente que los lengua- jes naturales no estdn en absoluto adaptados para este tipo de cosas. Para evitar la confusién, en el futuro especificaremos nuestros algoritmos dando el corres- pondiente programa, Suponemos que el lector esta familiarizado con al menos un lenguaje de programaci6n bien estructurado, tal como Pascal. Sin embargo, no nos limitaremos estrictamente a ningtin lenguaje de programaci6n concreto: de esta manera, los aspectos esenciales de un algoritmo no resultarén oscureci- dos por detalles de programacién relativamente poco importantes, y realmente no importa cual sea el lenguaje bien estructurado que prefiera el lector. Hay algunos aspectos de nuestra notacién para los programas que merecen es- pecial atencién. Utilizaremos frases en espafiol en nuestros programas siempre que esto produzca sencillez y claridad. De manera similar, utilizaremos el len- guaje matemitico, tal como el del Algebra y de la teoria de conjuntos, siempre que sea necesario (incluyendo simbolos tales como = y L | que se presentan en la Sec- cién 1.4.7). Como consecuencia, una sola «instruccién» de nuestros programas puede tener que traducirse a varias instrucciones, quizé a un bucle mientras, si es que el algoritmo tiene que implementarse en un lenguaje de programacién con- vencional. Por tanto no se debe esperar ser capaces de ejecutar directamente los algoritmos que presentemos: siempre ser preciso hacer el esfuerzo necesario pa- ra transcribirlos a un lenguaje de programacién «real». Sin embargo, este enfoque es el que mas se ajusta a nuestro objetivo primordial, que es presentar de la forma més clara posible los conceptos basicos que subyacen a nuestros algoritmos. Para simplificar todavia mas nuestros programas, omitiremos casi siempre las declaraciones de magnitudes escalares (enteras, reales 0 booleanas). En aquellos casos en que sea importante, tal como en las funciones y procedimientos recur- sivos, todas las variables que se utilizan se toman implicitamente como variables locales, a no ser que el contexto indique claramente lo contrario. En este mismo ' espfritu de simplificacién se evita la proliferacién de instituciones begin y end que invaden a los programas escritos en Pascal: el rango de instrucciones tales como si, mientras 0 for, asi como otras declaraciones como procedimiento, fun- cién o registro se muestra sangrando las instrucciones en cuestiGn. La instruc- cién devolver marca la finalizacién dindmica de un procedimiento o de una fun- cién, y en este tiltimo caso proporciona ademiés el valor de la funcién. 8 Preliminares Capitulo 1 En los procedimientos y funciones no se declara el tipo de los parémetros, ni tampoco el tipo de los resultados proporcionados por una funcién, a no ser que tales declaraciones hagan que el algoritmo sea mas facil de entender. Los pardmetros escalares se pasan por valor, lo que significa que son tratados como variables locales dentro del procedimiente o la funcién, a no ser que se decla- ren como pardmetros var, en cuyo caso se pueden utilizar para proporcionar un valor al programa llamante. En contraste, los parémetros tipo matriz se pasan por referencia, lo cual significa que toda modificacién efectuada dentro del pro- cedimiento o funcién se verdn reflejados en la matriz que realmente se pase en Ja instruccién que haga la Iamada. Por ultimo, supondremos que el lector est4 familiarizado con los conceptos de recursividad, registro y puntero. Estos dos uiltimos se denotan exactamente como en Pascal, salvo por la omisién de begin y end en los records. En par- ticular, los punteros se denotan con el simbolo «T». Para finalizar esta seccién, véase un programa para multiplicar @ Ia russe. Aqui el simbolo «+» denota la divisién entera: cualquier posible resto se des- carta. Compérese este programa con la descripcién informal en espafiol del mis- mo algoritmo en la Seccién 1.2. ;Cudl prefiere usted? funcién rusa(m, n) resultado —~ 0 repetir si m es impar entonces resultado — resultado +n me m+2 nent+n hasta que m=1 devolver resultado 14 NOTACION MATEMATICA Esta seccién revisa la notacién matematica que utilizaremos a lo largo del libro. Nuestra revision es sucinta, por cuanto suponemos al lector familiarizado con la mayor parte de ella. Sin embargo, recomendamos leerla al menos de forma ré- pida porque presentamos la mayoria de los simbolos que se van a utilizar, y al- gunos de ellos (tales como [i.jl, V, 3, Ig, Lx, = y R®) no gozan de aceptacion universal. 1.4.1 Calculo proposicional Existen dos «valores de verdad», verdadero y falso. Una variable booleana (0 proposi- cional) solamente puede tomar uno de estos dos valores. Si p es una variable boo- leana, escribimos p es verdadero, o bien simplemente p , para indicar p = verdadero. Esto es generalizable a todas las expresiones arbitrarias cuyo valor sea booleano. Sean p y q dos variables booleanas. Su conjuncién pq, 0 p y q es verdadero si y s6- lo si p y q son verdaderos. Su disyuncién p v q, 0 p 0 q es verdadero si y sélo si al Seccién 1.4 Notacién matematica 9 menos uno de entre p 0 q es verdadero. (En particular, la disyuncién de p y q es ver- dadera cuando tanto p como q son verdaderos.) La negacién de p que se denota co- mo =p 0 «no p», es verdadero si y sdlo si p es falso. Si la verdad de p implica la de q escribiremos p =2q, que se lee si p entonces q. Si la verdad de p es equivalente a la de q, lo cual significa que son ambos o bien verdadero o bien falso, entonces es- cribimos p + 4. Podemos construir f6rmulas booleanas a partir de variables boo- leanas, constantes (verdadero y falso), conectivas (a, v, 7, >, +) y paréntesis de la forma evidente. 1.4.2 Teoria de conjuntos Aun cuando revisemos aqui los principales simbolos que se utilizan en la teoria de conjuntos, suponemos que el lector ya est4 familiarizado con la nocién de conjunto. Por tanto en Io que sigue no se proporciona una definicién formal. A todos los efectos practicos, resulta suficiente pensar que un conjunto es una co- leccin no ordenada de elementos distintos. Un conjunto se dice finito si contiene un mimero finito de elementos; en caso contrario el conjunto es infinito. Si X es un conjunto finito, |X|, la cardinalidad de X denota el ntimero de elementos que hay en X. Si X es un conjunto infinito podemos escribir que la cardinalidad de X es infinita. El conjunto vacfo, que se denota como g, es el conjunto tinico cuya cardinalidad es 0. La forma mas sencilla de denotar un conjunto es rodear la enumeracién de esos elementos entre llaves. Por ejemplo, {2,3,5,7}, denota el conjunto de name- tos primos de una sola cifra. Cuando no puede surgir ninguna ambigiiedad, se permite el uso de puntos suspensivos, tal como en «N= {0,1,2,3, ...} es el conjun- to de numeros naturales». Si X es un conjunto, x eX significa que x pertenece a X. Escribiremos que x ¢ X cuando x no pertenezca a X. La barra vertical «| » se lee en la forma «tal que» y se utiliza para definir un conjunto describiendo la propiedad que cumplen todos sus miembros. Por ejemplo, {n | 1 € N yn es impar} denota el conjunto de todos los miimeros naturales impares. Hay otras notaciones alternativas mas sencillas para el mismo conjunto que son {2 € N |n es impar] 0 incluso (2n + 1 | ne N}. Si X e Y son dos conjuntos, X < Y significa que todos los elemento de X perte- necen también a Y; y se lee «X es un subconjunto de Y». La notacién X c Y signifi- ca que X c Y y ademas que hay por lo menos un elemento de Y que no pertenece a X; se lee «X es un subconjunto propio de Y». Tenga en cuenta que algunos auto- res utilizan c para denotar lo que nosotros denotamos mediante c. Los conjuntos X e Y son iguales, lo cual se escribe X = Y, si y s6lo si contienen exactamente los mismos elementos. Esto es equivalente a decir que X c Y y que Yc X. Si X e Yson dos conjuntos, denotamos su uni6n mediante X UY=|z Iz e Xoze YI, su interseccién como X NY = {z | ze Xyze Y}, y su diferencia como X\W=(zlzeXperoze Y}. Obsérvese en particular que z « X 4 Y cuando z pertenece tanto a X comoa Y. 10 Préfiminares ° “ Capitulo 1 Representamos por (x, y) el par ordenado que consta de los elementos x e y en este orden. El producto cartesiano de X e Y es el conjunto de pares ordenados cu- yo primer componente es elemento de X y cuyo segundo componente es ele- mento de Y; esto es Xx Y = (x,y) | xe Xey € Y}. Las n-tuplas ordenadas para n> 2y el producto cartesiano de mas de dos conjuntos se definen de forma si- milar. Denotaremos X x X por Xy similarmente para X‘, i 2 3. 1.4.3 Enteros, reales e intervalos Denotaremos el conjunto de los nvimeros enteros por Z = {..., -2, -1, 0, 1, 2, ...J, ¥ el conjunto de mimeros naturales como N = (0, 1, 2, ...}, y el conjunto de los ente- tos positivos como N* = (1, 2, 3,...}. A veces ponemos de manifiesto que el 0 no esté incluido en N* haciendo alusién explicita al conjunto de los ntmeros ente- ros estrictamente positivos. En algunas ocasiones aludiremos a los niimeros na- turales con el nombre de enteros no negativos. Indicamos el conjunto de niimeros reales como R, y el conjunto de los niimeros reales positivos como R={xeR|x>0} En algunas ocasiones hacemos hincapié en que 0 no esté incluido en Rt alu- diendo explicitamente al conjunto de mimeros reales estrictamente positivos. conjunto de ntimeros reales no negativos se denota mediante R?° = { x ¢ R |x 20}. Un intervalo es un conjunto de ntimeros reales que yacen entre dos limites. Sean ay b dos nimeros reales tales que a < b. El intervalo abierto (a, b) se representa por: (xeRla1,0>1y mn = 12573] Estos ejemplos afirman que la bien conocida f6rmula para la suma de los n ptimeros enteros es siempre valida (véase la Seccion 1.7.2), que esta suma es también igual a un #? sélo para un valor entero positivo de n, y que 12.573 es un entero compuesto, respectivamente. Se puede utilizar una alternancia de los cuantificadores en una sola expresién. Por ejemplo: (ne N)GmeN)[m>n] dice que para todo ntimero natural existe otro ntimero natural mayor todavia. Cuan- do se utiliza la alternancia de cuantificadores, el orden en el cual se presentan los cuantificadores es importante. Por ejemplo, la afirmacién G me Nv ne N) [m># J es evidentemente falsa: significaria que existe un entero m que es mayor que todos los nimeros naturales (incluyendo el propio m). Siempre y cuando el conjunto X sea infinito, resulta util decir que no so- lamente existe un x « X tal que la propiedad de P (x) es cierta, sino que ade- mas existen infinitos de ellos. El cuantificador apropiado en este caso es 3. Por ejemplo, ( 4 n < N) [n es primo]. Obsérvese que 4 es més fuerte que J pe 10 mas débil que V. Otro cuantificador util, mds fuerte que 3 pero todavia mas débil que V, es ¥ , que se usa cuando una propiedad es valida en todos los ca- sos salvo posiblemente para un ntimero finito de excepciones. Por ejemplo, ( ne N) [sin es primo, entonces n es impar] significa que los numeros primos siempre son impares, salvo posiblemente por un nimero finito de excepciones, en este caso hay solamente una excepcidn: 2 es a la vez primo y par. Cuando estamos interesados en las propiedades de los nimeros naturales, existe una definicién equivalente para estos cuantificadores, y suele ser mejor pensar en ellos en consecuencia. Una propiedad P de los nimeros naturales es cierta con infinita frecuencia, si, independientemente de lo grande que sea m, existe un 7 2 m tal que P (n) es vAlido. De manera similar, la propiedad P es va- lida para todos los ntimeros naturales salvo posiblemente por un ntimero finito de excepciones si existe un natural m tal que P (n) es vdlido para todos los nti- Secci6n 1.4 Notaci6n matematica 13 meros naturales n = m. En este tltimo caso, diremos que «la propiedad P es cier- ta para todos los enteros suficientemente grandes». Formalmente: qa n&N) [P (n)] es equivalente a (Vm EN) (An 2m) [P (n)] mientras que (¥ EN) [P (n)] es equivalente a (a m EN) (V n= m) [P (n)] El principio de dualidad para los cuantificadores dice que «no es cierto que la propiedad P sea valida para todo x € X si y sélo si existe al menos un x € X pa- ra el cual la propiedad P no es valida». En otras palabras: =~(W x € X) [P (x)] es equivalente a (4 x € X) [> P ()] De manera similar: 7(a x € X) [P (x)] es equivalente a (V x € X) [+ P (x)] El principio de dualidad también es valido para v y ER 1.4.6 Sumas y productos Considérese una funcién f: N - R y un entero n 2 0. (Esto incluye f: N > N co- mo caso especial.) La suma de los valores tomados por f sobre los n primeros nu- meros positivos se denota mediante yy @= fA) + fQ+..+F (0) que se lee «la suma de los f (i) cuando i va desde 1 hasta a » Enel caso en que n = 0, la suma se define como 0. Esto se generaliza en la for- ma evidente para denotar una suma cuando i va desde m hasta n siempre y cuando m sn + 1. En algunas ocasiones resulta atil considerar sumas condicio- nales. Si P es una propiedad de los enteros, pf denota la suma de f (i) para todos los enteros i tal que sea valido P (i). Esta suma puede no estar bien definida si involucra a un nimero infinito de enteros, po- demos incluso utilizar una notacién mixta tal como S £00, ho 14 Preliminares Capitulo 1 que denota la suma de los valores tomados por f para aquellos enteros que se encuentran entre 1 y 7 para los cuales es valida la propiedad P. Si no hay tales enteros, la suma es 0. Por ejemplo, ‘a Li=1434+5+74+9=25. i ‘impar En la Seccién 1.7.2. se puede encontrar mas informaci6n acerca de las sumas. El producto de los valores tomados por f sobre los # primeros enteros positi- vos se denota mediante Il fO= fx f(2)% f(B) x... fle), lo cual se lee «el producto de los f (i) cuando i va desde 1 hasta 7». En el caso n= 0, se define el producto como 1. Esta notacién se generaliza en la misma for- ma que en la notacién del sumatorio. 1.4.7 Miscelanea Si b 1 y x son ntimeros reales estrictamente positivos, entonces log, x, que se lee «el logaritmo en base b de x», se define como el niimero real y tal que bY = x. Por ejemplo, log,, 1.000 = 3. Obsérvese que aun cuando b y x deben ser positives, no existe tal restriccién para y. Por ejemplo, log,, 0,001 = -3. Cuando la base b no esta especificada, interpretamos que se trata de e = 2,7182818..., la base de los llamados logaritmos naturales (algunos autores toman la base 10 cuando no se especifica y denotan el logaritmo natural como «In».) En Algoritmia, la base que se utiliza mds a menudo para los logaritmos es 2, y merece una notacién propia: «lg x» es la abre- viatura de «log, x.» Aun cuando supondremos que el lector est familiarizado con Jos logaritmos, recordemos las identidades logaritmicas mas importantes: Jog, (xy) = log, x + log, y, log, x” = ylog, x, log, x= tes, x log,a y por tiltimo x" = y* Recuérdese también que el «log log n» es el logaritmo del logaritmo de n, pe- To «log? n» es el cuadrado del logaritmo de n. Si x es un numero real, Lx representa el mayor entero que no es mayor que x, y se denomina el suelo de x. Por ejemplo, L3 1/2] = 3. Cuando x es positivo, Lx es el entero que se obtiene descartando la parte fraccionaria de x si es que exis- Seccion 1.5 Técnica de demostracién | 15 te. Sin embargo, cuando x es negativo y no es un entero en si x es mas pequefio que este valor por una unidad. Por ejemplo, |-3'/.) = -4. De manera similar, de- finimos el techo de x, que se denota como Lx], como el menor entero que no es menor que x. Obsérvese que x- 1 0 son enteros, m/n denota como siempre el resultado de divi- dir m por n, lo cual no es necesariamente un entero. Por ejemplo, 7/2 = 3'/.. De- notamos el cociente entero mediante el simbolo « + », por tanto 7 + 2 = 3. For- malmente, m +n ={m/n]. También utilizamos mod para denotar el operador «médulo» que se define como m mod n= m-nx (m+n) En otras palabras, m mod 7 es el resto cuando m es dividido por n. Si m es un entero positivo, denotamos el producto de los m primeros enteros positivos como m!, lo cual se lee factorial de m. Es natural definir 0! = 1. Ahora bien n! =n x (n - 1)! para todos los enteros positivos n. Una aproximacién util del factorial es la que da la formula de Stirling: n 1 = V2n n (n/e)", en donde e es la base de los logaritmos naturales. n Sin y rson enteros tales que 0 1. Ademis esta claro que tiene éxito en n = 0. El principio de induccién matemdtica, que se describe mds adelante, nos permite infe- rir a partir de lo anterior que el algoritmo tiene éxito en todos los 1 2 0. Hay dos formas de comprender por qué se sigue esta conclusién: de forma constructiva y por contra- diccién. Considérese cualquier entero positivo m sobre el cual se desea probar que el al- goritmo tiene éxito. A efectos de nuestra discusién, supongamos que m 2 9 (los valores menores se pueden demostrar facilmente). Ya sabemos que el algoritmo tiene éxito en 4. A partir de la regla general consistente en que debe tener éxito enn siempre que ten- ga éxito en 1-1 para n 21, inferimos que también tendra éxito en 5. Aplicando una vez mis esta regla se muestra que el algoritmo tiene éxito en 6 también. Puesto que tiene éxito en 6, también tiene que tener éxito en 7, y asi sucesivamente. Este razonamiento contintia tantas veces como sea necesario para llegar a la conclusién de que el algorit- mo tiene éxito en m— 1. Finalmente, dado que tiene éxito en m - 1, tiene que tener &<- to en m también. Esté claro que podriamos efectuar este razonamiento de forma expli- cita, sin necesidad de «y asi sucesivamente», para cualquier valor positivo fijo de m. Si preferimos una tinica demostracién que funcione para todos los n > 0 y que no contenga «y asi sucesivamente», debemos aceptar el axioma del minimo entero, que dice que todo conjunto no vacio de enteros positivos contiene un elemento minimo; véase el problema 1.24. Este axioma nos permite utilizar este ntimero mi- nimo como el fundamento a partir del cual demostraremos teoremas. oe Ahora, para demostrar la correccién (exactitud) del algoritmo por contradic- ci6n, supongamos que existe al menos un entero positivo en el cual falla el algo- ritmo. Sea n el menor de estos enteros, que existe por el axioma del minimo ente- ro. En primer lugar, n tiene que ser mayor o igual a 5, puesto que ya hemos verifi- cado que cuadrado (i) = ? cuando i = 1, 2, 3 6 4. En segundo lugar el algoritmo tie- ne que tener éxito en 7 — 1, porque en caso contrario n no seria el menor entero po- sitivo en el cual falla. Pero esto implica por regla general que el algoritmo también tiene éxito en 1, lo cual contradice a nuestra suposicién acerca de la seleccién de n. Por tanto esa n no puede existir, lo cual significa que el algoritmo tiene éxito para todos los enteros positivos. Puesto que también sabemos que el algoritmo tiene éxito en 0, concluiremos que cuadrado (n) = n? para todos Jos enteros de n > 0. Ahora vamos a indicar una versién sencilla del principio de induccién mate- miatica, que es suficiente en muchos casos. En la Seccién 1.6.3 se da una versi6n més potente de este principio. Considérese cualquier propiedad P de los ente- ros. Por ejemplo, P(n) podria ser «cuadrado (n) = 1” o «la suma de los cubos de Secci6n 1.6 Técnica de demostracién 2 23 los n primeros nameros enteros es igual al cuadrado de la suma de esos ente- Tos», 0 «n? < 2», Las dos primeras propiedades son ciertas para todos los n > 0, mientras que la tercera es valida siempre y cuando n 2 10. Considérese también un entero 4, que se conoce con el nombre de base. Si 1, P(a) es cierto 2, P(n) debe de ser cierto siempre que P(n — 1) sea valido para todos los enteros ni >a entonces la propiedad P(n) es valida para todos los enteros n 2 2. Usando este principio, podriamos afirmar que cuadrado (n) = n? para todos los n 2 0, e inmediatamente, demos- trar que cuadrado (0) = 0 = © y que cuadrado (n) = n? siempre que cuadrado (n -1P yn21. Nuestro primer ejemplo de induccién matematica mostraba cémo se puede utilizar de forma rigurosa para demostrar la correccién de un algoritmo. Como segundo ejemplo, vamos a ver cémo las demostraciones mediante induccién matemiatica se pueden transformar a veces en algoritmos. Este ejemplo también es instructivo por cuanto pone de manifiesto la forma correcta de escribir una demostracién por induccién matemiatica. La discusién que sigue hace hincapié en los puntos importantes que son comunes a este tipo de pruebas. Considérese el siguiente problema de embaldosado. Se nos da un tablero divi- dido en cuadrados iguales. Hay m cuadrados por fila y m cuadrados por co- lumna, en donde m es una potencia de 2. Un cuadrado arbitrario del tablero se distingue como especial; véase la Figura 1.5 (a). (a) Tabiero con un cuadrado especial (c) Colocada la primera baldosa (d) Solucién Figura 1.5. El problema de embaldosado 24 Preliminares Capitulo 1 También se nos da un montén de baldosas, cada una de las cuales tiene el as- pecto de un tablero 2 x 2 del cual se ha eliminado un cuadrado, segun se ilustra en la figura 1.5 (b). El acertijo consiste en recubrir el tablero con estas baldosas, para que cada cuadrado quede cubierto exactamente una vez con excepcién del cuadrado especial, que quedaré en blanco. Este recubrimiento se denomina em- baldosado. La figura 1.5 (d) da una solucién del caso dado en la figura 1.5 (a). Teorema 1.6.1 El problema de teselado siempre se puede resolver Demostraci6n. La demostraci6n se hace por induccién matemitica sobre el entero » tal que m=2". © Base: el caso # = 0 se satisface de forma trivial. Aqui m = 1, y el «tablero» 1 x 1 es un nico cuadrado, que es necesariamente especial. Este tablero se recubre sin hacer na~ da! (Si no le gusta este argumento, compruebe el caso siguiente por orden de sencillez: sin=1, entonces m = 2 y todo tablero 2 x 2 del cual se elimine un cuadrado tiene exac- tamente el aspecto de una baldosa, por definicién.) © Paso de induccidn: considérese cualquier n 2 1. Sea m = 2". Astimase la hipétesis de in- duccién, consistente en que el teorema es valido para tableros 2"! x 2". Considérese un tablero m x m, que contiene un cuadrado especial colocado arbitrariamente. Dividase el tablero por cuatro subtableros iguales partiéndolo en dos horizontal y verticalmen- te. El cuadrado especial original pertenece ahora exactamente a uno de los subtable- ros. Coléquese una baldosa en medio del tablero original de tal manera que cubra exactamente un cuadrado de cada uno de los demas subtableros; véase la figura 1.5 (c). Consideremos cada uno de los tres cuadrados asf cubiertos «especial» para el subta- blero correspondiente. Nos quedan cuatro subtableros del tipo 2" x 2""-cada uno de los cuales contiene un cuadrado especial. Por nuestra hipétesis de induccién, cada uno de estos cuatro subtableros se puede recubrir. La solucién final se obtiene combinan- do los recubrimientos de los subtableros junto con la baldosa colocada en la posicién media del tablero original. Puesto que el teorema es verdadero cuando m = 2°, y dado que su validez para m = 2" se sigue de la suposicién de su validez para m = 2"! para todos los n > 1, se sigue del principio de induccién matemética que el teorema es verdadero para todo mt, siempre y cuando m sea una potencia de 2. El lector no deberia tener dificultad para transformar esta prueba de un teore- ma mateméatico a un algoritmo para efectuar el embaldosamiento real (quizé no sea un algoritmo de computadora, pero es al menos un algoritmo adecuado para el «procesamiento a mano»). Este algoritmo de teselado sigue el esquema general conocido con el nombre de divide y vencerds, que ya habiamos encontrado en la Secci6n 1.2 y que estudiaremos detenidamente en el Capitulo 7. Esta situacién no es infrecuente cuando se demuestra constructivamente un teorema por induccién matemiatica. Secci6n 1.6 Técnica de demostracién 2 25 Examinemos ahora con detalle todos los aspectos de una demostraci6n for- malmente correcta por induccién matemiatica, tal como la anterior. Considérese una vez més una propiedad abstracta P de los enteros, un entero a, y sup6nga- se que se desea demostrar que P(n) es valido para todos los n 2 a. Es preciso co- menzar la demostraci6n mediante el caso base, que consiste en demostrar que P(a) es valido. Este caso base suele ser sencillo, y algunas veces incluso trivial, pero resulta crucial efectuarlo correctamente; en caso contrario, toda la «demos- tracién» carece literalmente de fundamento. El caso base va seguido por el paso de induccién, que suele ser mas complica- do. Este deberfa empezar por «considérese cualquier n > a»(o de manera equi- valente «consideremos cualquier n > a + 1»). Deberia continuar con una indica- cién explicita de la hipétesis de induccién, que establece esencialmente que P(n -1) es valido. En este momento queda por demostrar que es posible inferir que P(n) es valido suponiendo valida la hipdtesis de induccién. Por ultimo, se puede insertar una frase adicional tal como la presente al final de la demostra- cién del teorema 1.6.1, pero esto no suele ser necesario. Con respecto a la hipdtesis de induccién, es importante comprender que su- ponemos que P (1 - 1) es valido de forma provisional; no sabemos realmente que sea valido mientras no se haya demostrado el teorema. En otras palabras, el ob- jetivo del paso de induccién es demostrar que la veracidad de P (n) se deduce ldgicamente de la veracidad de P (n — 1), independientemente de si P(n - 1) es valido. De hecho si P (n — 1) no es valido, el paso de induccién no nos permite llegar a ninguna conclusién acerca de la veracidad de P (n). Por ejemplo, considérese la afirmaci6n «n? < 2"», que representaremos me- diante P (a). Para un positivo entero n, resulta sencillo demostrar que n° < 2 x (n - 1) precisamente si 2 5. Considérese cualquier n 2 5 y asumamos provi- sionalmente que P (1 —1) es verdadero. Ahora n'<2x(n-1$ porquen25 < 2x2 por la suposicién consistente en que P (n - 1) es valido = 2" De esta manera se ve que P (n) se sigue légicamente de P (n — 1) siempre que n> 5. Sin embargo, P (4) no es valido (se diria que 4° < 2, lo cual seria decir que 64 < 16) y por tanto no se puede inferir nada con respecto a la veracidad de P (5). Por prueba y error averiguaremos sin embargo que P (10) si es valido (10 = 1000 < 2 = 1024). Por consiguiente es legftimo inferir que P (11) también es valido, y de la veracidad de P (11) se sigue que P (12) también es valido, y asi sucesivamente. Por el principio de induccién matematica, dado que P (10) es va- lido y dado que P (n) se sigue de P (n — 1) siempre que n 2 5, concluimos que n? < 2" es verdadero para todo n > 10. Resulta instructivo observar que P (n) también es valido para 1 = 0 y n = 1, pero no podemos utilizar estos puntos co- mo base de la induccién matematica porque el paso de inducci6n no es aplica- ble para valores tan pequefios de n. 26 Preliminares Capitulo 1 ‘~* Quizé suceda que la propiedad que deseamos demostrar no afecta a todos los enteros mayores o iguales a uno dado. Nuestro acertijo del embaldosado con- cierne solamente al conjunto de enteros que son potencias de 2, En algunas oca- siones, la propiedad no concierne en absoluto a los ntimeros enteros. Por ejem- plo, no es infrecuente en Algoritmia tener la necesidad de demostrar una pro- piedad de los grafos. (Se podria decir, incluso, que nuestro problema del em- baldosado no concierne realmente a los nimeros enteros, sino mas bien a los ta- bleros y a las baldosas, pero esto seria partir un pelo en el aire.) En tales casos, si se ha de utilizar la induccién matemitica sencilla, la propiedad que hay que demostrar deber4 transformarse primeramente en una propiedad del conjunto de todos los ntimeros enteros que no sean menores que un cierto caso base (un enfoque alternativo se ofrece en la Seccién 1.6.3). En nuestro ejemplo de embal- dosado, demostrabamos que P (1) es valido para todas las potencias de 2, de- mostrando que Q (n) es vélido para n 2 0, en donde Q (1) es equivalente a P (2”). Cuando esta transformacién es necesaria, se acostumbra comenzar la demostra- cidn (tal como hicimos) con las palabras «la demostracién es por induccién ma- temitica sobre tal y cual pardmetro». De esta manera se realizan demostraciones acerca del ntimero de nodos de un grafo, acerca de la longitud de una cadena de caracteres, acerca de la profundidad de um 4rbol, y asi sucesivamente. Existe un aspecto de las demostraciones por induccién matematica que la mayoria de los principiantes encuentra sorprendente, si es que no les parece pa- radéjico: ja veces es mds sencillo demostrar una afirmacién mds fuerte que una mds dé- bil! Ilustraremos esto con un ejemplo que ya hemos encontrado. Vimos que re- sulta sencillo conjeturar por induccién (no por induccién matemdtica) que la su- ma de los cubos de los n primeros nimeros enteros siempre es un cuadrado per- fecto, Demostrar esto por induccién matemiatica no es sencillo. La dificultad es- triba en que una hipétesis de induccién tal como «la suma de los cubos de los n—1 primeros nimeros enteros es un cuadrado perfecto» no sirve de gran ayu- da para demostrar que esto también sucede para los n primeros ntimeros ente- Tos porque no dice cudl de los cuadrados es perfecto: en general, no hay ningu- Na raz6n para creer que se obtenga un cuadrado cuando n° se suma con otro cuadrado. Por contraste, resulta mas sencillo demostrar el teorema mas fuerte consistente en que nuestra suma de cubos es precisamente el cuadrado de la su- ma de los n primeros enteros: la hipétesis de induccién es ahora mucho mis sig- nificativa; véase el problema 1.21. 1.6.2 Un asunto completamente distinto E] error mas comun en el disefio de demostraciones mediante induccién mate- miatica se merece una subseccién propia. Consideremos el siguiente teorema ab- surdo. Teorema 1.6.2 Todos los caballos son del mismo color Secci6n 1.6 Técnica de demostracién 2 27 Demostracion. Demostraremos que todo conjunto de caballos contiene solamente caballos del mismo color. En particular esto ser cierto para el conjunto de todos los caballos. Sea H un conjunto arbitrario de caballos. Demostremos por induccién matematica sobre el namero n de caballos que hay en H que son todos ellos del mismo color. 4) Base: el caso n = 0 es trivialmente cierto: si no hay caballos en H entonces son cierta- mente todos del mismo color. (Si no le gusta el argumento, compruebe el siguiente ca- so sencillo: sin = 1, entonces hay un solo cabailo en H, y una vez més es evidentemente cierto que son «todos» del mismo color.) Q Paso de induccién: considérese cualquier nimero n de caballos en H. Llamense estos caballos hy, hy..., h,. Supongamos que la hipétesis de induccién consiste en que todo conjunto de 7 - 1 caballos contiene solamente caballos de un solo color (pero por su- puesto los caballos de un conjunto podrian a priori ser diferentes de los caballos de otro conjunto). Sea H, el conjunto que se obtiene eliminando el caballo h, de H, y definamos H, de forma similar; véase la figura 1.6: Hy hy hy hy hy Hy Ay h, hy h Figura 1.6. Cabalios del mismo color (n = 5) En cada uno de estos dos nuevos conjuntos hay rt - 1 caballos. Por tanto, la hip6tesis de in- duccién es aplicable a ellos. En particular, todos los caballos de H, son del mismo color, di- gamos c,, y todos los caballos de H, son también de un nico (posiblemente distinto) co- lor, digamos c,, Pero ges realmente posible que el color c, sea diferente del color ¢,? Cierta- mente no, el caballo h,, pertenece a los dos conjuntos por tanto ambos, ¢, y c,, deben ser del mismo color que el de dicho caballo! Como todos los caballos de H pertenecen a cualquier H, 0 H, (0 a ambos), concluimos que todos son del mismo color ¢ = ¢, = ¢,. Esto completa el paso de induccién y la demostraci6n por induccién matemiatica. Antes de seguir adelante, encuentre la falacia de la «demostracién» anterior. Si piensa que el problema es que nuestra hipdtesis de induccién («todo conjun- to de n—1 caballos debe de contener solamente caballos de un mismo color») era absurda, jpiénselo de nuevo! Solucién: El problema es que «h, pertenece a ambos conjuntos» no es cierto para n = 2, jpuesto que h, no pertenece a H,! Nuestro razonamiento era impecable para los casos basicos = 0 yn = 1. Ademis, es cierto que nuestro teorema es consecuen- cia valida para los conjuntos de » caballos, suponiendo que sea valido para n — 1, pero solamente cuando n = 3. Podemos pasar de 2. a3 y de 3 a4, y asi sucesivamente, pero no de 1 a 2. Dado que los casos basicos son tinicamente 0 y 1, y puesto que no podemos pasar de 1 a 2, el paso de induccién no puede comenzar. Este pequefio es- lab6n perdido dentro de la demostracién basta para hacerla completamente inadmi- sible. Encontramos una situacién similar al demostrar que 1° < 2”: el paso de induc- cién no era aplicable para n < 5, y por tanto la veracidad de la sfirmation paran=0 y n= Lera irrelevante. La diferencia importante era que ° < 2” es certo para n = 10, y por tanto también lo es para todos los valores mayores de n.

También podría gustarte