Fundamentos-Programacion-ver-2

download Fundamentos-Programacion-ver-2

of 253

Transcript of Fundamentos-Programacion-ver-2

iiUniversidadMayordeSanAndresFacultaddeCienciasPurasyNaturalesCarreradeInformaticaFundamentos de la ProgramacionJorge Humberto Teran Pomier

2oEdici on-Abril20101oEdici on-Diciembre2006Nro.DepositoLegal4-1-116-10PQISBN:978-99954-0-820-6LaPaz-BoliviaPrefacioMotivacionLos conceptos presentados se estudianenmuchas de las materias delpregradodelacarreradeinformatica, conel rigornecesario. Sinembargo,enmi experienciadocentehepodidover quehaymuchos estudiantes quecarecendeelementospr acticosconlosquepuedanaplicardirectamentelosconceptosaprendidosyloquesepretendeescubrirestevaco.El presentetextotratadeintroducirlosconceptosdeprogramaci on, aestudiantesdepregradoconunenfoquenuevo.Paraunaadecuadacompresiondelatematicapresentadaenel libro, ellectordebrateneralgunaexperienciaeneldesarrollodeprogramas.Ellibronopretendeense naracodicarprogramas,sinoaresolverproblemas.ContenidoSepresentanenelcaptulo1,losconceptosdealgortmicaelementalconel proposito de introducir a los estudiantes, al concepto de la eciencia de losprogramas.El captulo2introducelosconceptosdeanalisisdealgoritmosconunaseriedeejerciciosaplicados. Seincluyenalgunoslaboratoriosquetienenelprop ositodeque, losestudiantesasimilenestosconceptosenformaexperi-mental.El captulo 3 introduce el concepto de la teora de n umeros, introduciendolas libreras de Java. Se muestran ejemplos de n umeros grandes y aplicacionesenlacriptografa.El captulo 4 trata de la escritura de programas con miras a la prueba delc odigo.Enestecaptuloseintroduceunconceptoqueeseldise noporcon-iiiivtratosylaformadeaplicarenJava. Aunqueesteconceptofueintroducidoinicialmente en el lenguaje Eifel, actualmente tiene mucho interes en el desa-rrollodeaplicaciones. El textonotratadetrabajarenconceptosdel ogicaformal en su totalidad, lo que propone es una introducci on a estos conceptosparafacilitarlapruebadelcodigo.Elcaptulo5complementaelcaptulo4conconceptosdeclasicaci onyb usqueda.SeintroducenlaboratoriosylasbibliotecasJavaparaclasicar.El captulo6estaorientadoaexplicarcomoseencaralaprogramaci ondeproblemasdecombinatoriab asica.Elcaptulo7explicacomoutilizarlaslibrerasdellenguajeJavaycomoresolverproblemasconpilas, listasenlazadas, conjuntos, arbolesycolasdeprioridad.ELcaptulo8introducealestudiantealosproblemasderetroceso(bac-tracking)conproblemastpicos,comorecorridodegrafosypermutaciones.El captulo 9 introduce a la geometra computacional. Muestra como cons-truir una librera de rutinas b asicas para desarrollar aplicaciones relacionadasalageometraymuestralaslibrerasJavaascomolasposibilidadesquesetienenconlasmismas.Ellenguajequese escogiofue elJava,primeroporquelaformaci onde laUniversidadMayordeSanAndresestaorientadaaestelenguaje. Segundoporque el lenguaje es de amplia utilizaci on en las empresas y en la educacion.AplicacionenelaulaEstatem aticapuedeaplicarseenel transcursodeunsemestreenclaseste oricas,pr acticasydelaboratorio.Los laboratorios proponenejercicios quetienenlanalidaddeevaluarexperimentalmente la ejecuci on de los algoritmos. Esto permite que los estu-diantesobtenganunavivenciadelosresultadoste oricos.Sepuedeaplicarenunaclasedeteoradedosperodosyunasegundaclasequeseradeejerciciosolaboratorio.AgradecimientosQuiero agradecer a mi esposa, a mis hijos por los aportes realizados nal-mente al Dr. Miguel Angel Revilla por dejarme utilizar ejercicios del Juez envLneaenlosejemplosdellibro.Notasdelasegundaedici onLa segunda edici oncorrige varios errores que se detectaronenvarioscaptulos del libro. Sehanmejoradolos ejercicios propuestos presentandounalistam asampliaparacadatema.A solicitud de muchos estudiantes se ha agregado un apendice que explicacomo obtener una cuenta en el Juez en lnea y la forma de resolver un ejercicioen Java. Se explica la forma de realizar la entrada y salida de datos y algunastecnicasparamejorarlaecienciadeunprograma.Los enunciados que guran al nal de captulo del libro se cambiaron porunalistadeproblemasquepuedenresolverseconlosmetodosplanteados.EstosproblemasseencuentranenelsitiodeValladolid.Unaspectoimportanteeslautilizaci ondel sitiohttp://uvatoolkit.com/queproveeayudasmuy utilespararesolverlosproblemasplanteados. Losproblemasal nal decadacaptulosiguenlaclasicacionprovistaenestesitio.ProgramaspresentadosenellibroEllectorpuedeaccederatodoslosprogramaspresentadoseneltextoenelsitiowebhttp://www.icpc-bolivia.edu.bo.HayqueaclararquetodoshansidocodicadosutilizandoelcompiladorJava1.6deSunMicrosystems.Losprogramasfueronrealizadosutilizandoel editorEclipseporlocual deberasersimpleaccederalosprogramas.M.Sc.JorgeTer anPomier.viIndicegeneralPrefacio III1. Algortmicaelemental 11.1. Introducci on. . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2. Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3. Problemaseinstancias . . . . . . . . . . . . . . . . . . . . . . 21.4. Eciencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.5. Queconsideraryquecontar . . . . . . . . . . . . . . . . . . . 51.5.1. Operacioneselementales . . . . . . . . . . . . . . . . . 61.5.2. An alisisdelmejorcaso,casomedioypeorcaso . . . . 61.5.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . 71.5.4. Laboratorio . . . . . . . . . . . . . . . . . . . . . . . . 72. Analisisdealgoritmos 112.1. Introducci on. . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.2. Notaci onordende . . . . . . . . . . . . . . . . . . . . . . . . 112.2.1. PropiedadesdeOgrandeden. . . . . . . . . . . . . . 122.3. Notaci onasintoticacondicional . . . . . . . . . . . . . . . . . 132.4. Notaci onomega. . . . . . . . . . . . . . . . . . . . . . . . . . 132.5. Notaci onteta . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.6. An alisisdelasestructurasdecontrol . . . . . . . . . . . . . . 142.6.1. Secuenciales . . . . . . . . . . . . . . . . . . . . . . . . 142.6.2. CiclosFor . . . . . . . . . . . . . . . . . . . . . . . . . 142.6.3. Llamadasrecursivas . . . . . . . . . . . . . . . . . . . 142.6.4. Cicloswhileyrepeat . . . . . . . . . . . . . . . . . . . 152.6.5. Analisisdelcasomedio. . . . . . . . . . . . . . . . . . 162.6.6. Analisisamortizado. . . . . . . . . . . . . . . . . . . . 172.7. Soluci onderecurrencias . . . . . . . . . . . . . . . . . . . . . 18viiviiiINDICEGENERAL2.7.1. Metodoporsubstituci on . . . . . . . . . . . . . . . . . 182.7.2. Cambiodevariables . . . . . . . . . . . . . . . . . . . 192.7.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . 202.7.4. Metodoiterativo . . . . . . . . . . . . . . . . . . . . . 202.7.5. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . 222.7.6. Teoremamaster. . . . . . . . . . . . . . . . . . . . . . 222.7.7. Soluciongeneralderecurrenciaslineales . . . . . . . . 232.8. Ejerciciosresueltos . . . . . . . . . . . . . . . . . . . . . . . . 272.9. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322.10. Notasobreelcalculointegral . . . . . . . . . . . . . . . . . . 343. Teoraden umeros 353.1. Introducci on. . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.2. VariablesdellenguajeJava. . . . . . . . . . . . . . . . . . . . 353.3. C alculodelm aximocom undivisor . . . . . . . . . . . . . . . 383.3.1. Divisibilidad. . . . . . . . . . . . . . . . . . . . . . . . 393.3.2. AlgoritmosextendidodeEuclides . . . . . . . . . . . . 423.4. Mnimocom unm ultiplo . . . . . . . . . . . . . . . . . . . . . 443.5. Aritmeticamodular. . . . . . . . . . . . . . . . . . . . . . . . 443.5.1. Propiedades . . . . . . . . . . . . . . . . . . . . . . . . 453.5.2. Congruencias . . . . . . . . . . . . . . . . . . . . . . . 463.5.3. Inversomultiplicativo. . . . . . . . . . . . . . . . . . . 463.5.4. Soluciondeecuaciones . . . . . . . . . . . . . . . . . . 463.6. N umerosprimos. . . . . . . . . . . . . . . . . . . . . . . . . . 483.6.1. Generaciondeprimos . . . . . . . . . . . . . . . . . . . 483.6.2. Factorizaci on . . . . . . . . . . . . . . . . . . . . . . . 503.6.3. Pruebadelaprimalidad . . . . . . . . . . . . . . . . . 523.6.4. TeoremadeFermat . . . . . . . . . . . . . . . . . . . . 533.6.5. PruebadeMiller-Rabin. . . . . . . . . . . . . . . . . 533.6.6. Otraspruebasdeprimalidad. . . . . . . . . . . . . . . 543.7. BibliotecasdeJava . . . . . . . . . . . . . . . . . . . . . . . . 543.7.1. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . 553.8. Ejemplosdeaplicacion . . . . . . . . . . . . . . . . . . . . . . 583.8.1. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . 654. Codicaci onconmirasalaprueba 674.1. Introducci on. . . . . . . . . . . . . . . . . . . . . . . . . . . . 674.2. Algunoserroresdeprogramaci on . . . . . . . . . . . . . . . . 68INDICEGENERAL ix4.3. Especicaci ondeprogramas . . . . . . . . . . . . . . . . . . . 724.3.1. Porqueespecicar? . . . . . . . . . . . . . . . . . . . 744.3.2. Queespecicar? . . . . . . . . . . . . . . . . . . . . . 754.3.3. Comoespecicar? . . . . . . . . . . . . . . . . . . . . 764.3.4. Invariantes . . . . . . . . . . . . . . . . . . . . . . . . . 774.3.5. Ejerciciospropuestos . . . . . . . . . . . . . . . . . . . 804.4. Aplicacionesdelasinvariantes . . . . . . . . . . . . . . . . . . 814.4.1. Principiodecorrectitud . . . . . . . . . . . . . . . . . 904.5. Dise noporcontratos . . . . . . . . . . . . . . . . . . . . . . . 914.5.1. Especicaci ondecontratos. . . . . . . . . . . . . . . . 944.5.2. Invariantes . . . . . . . . . . . . . . . . . . . . . . . . . 964.6. Pruebaestatica . . . . . . . . . . . . . . . . . . . . . . . . . . 974.7. Pruebadin amica . . . . . . . . . . . . . . . . . . . . . . . . . 984.7.1. Armaciones . . . . . . . . . . . . . . . . . . . . . . . 985. Aplicacionesdeb usquedayclasicacion 1035.1. Introducci on. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1035.2. Algoritmosdeb usqueda . . . . . . . . . . . . . . . . . . . . . 1035.2.1. Pruebaexhaustiva . . . . . . . . . . . . . . . . . . . . 1075.2.2. Representaciongr acadelab usqueda . . . . . . . . . 1095.3. Clasicaci on. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1145.3.1. ClasicacionenJava . . . . . . . . . . . . . . . . . . . 1155.3.2. Algoritmosdeclasicaci on. . . . . . . . . . . . . . . . 1195.3.3. Laboratorio . . . . . . . . . . . . . . . . . . . . . . . . 1335.3.4. Ejemplodeaplicaci on . . . . . . . . . . . . . . . . . . 1345.3.5. Ejemplo1 . . . . . . . . . . . . . . . . . . . . . . . . . 1345.3.6. Ejemplo2 . . . . . . . . . . . . . . . . . . . . . . . . . 1375.4. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1406. Combinatoriabasica 1416.1. Introducci on. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1416.2. Tecnicasb asicasparacontar . . . . . . . . . . . . . . . . . . . 1416.3. Coecientesbinomiales . . . . . . . . . . . . . . . . . . . . . . 1436.4. Algunassecuenciasconocidas . . . . . . . . . . . . . . . . . . 1456.4.1. N umerosdeFibonacci . . . . . . . . . . . . . . . . . . 1456.4.2. N umerosCatalanes . . . . . . . . . . . . . . . . . . . . 1466.4.3. N umeroEulerianos . . . . . . . . . . . . . . . . . . . . 1476.4.4. N umerosdeStirling . . . . . . . . . . . . . . . . . . . . 150xINDICEGENERAL6.4.5. Particionesenteras . . . . . . . . . . . . . . . . . . . . 1516.4.6. Ejemplodeaplicaci on . . . . . . . . . . . . . . . . . . 1536.5. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1567. Estructurasdedatoselementales 1577.1. Introducci on. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1577.2. Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1577.2.1. Vectoresestaticos . . . . . . . . . . . . . . . . . . . . . 1577.2.2. Vectoresdinamicos . . . . . . . . . . . . . . . . . . . . 1587.3. Pilas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1627.4. Listasenlazadas. . . . . . . . . . . . . . . . . . . . . . . . . . 1667.5. Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1697.6. Clasesmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1717.7. Clasespara arboles . . . . . . . . . . . . . . . . . . . . . . . . 1737.8. Clasesparacolasdeprioridad . . . . . . . . . . . . . . . . . . 1757.9. Ejerciciosparalaboratorio . . . . . . . . . . . . . . . . . . . . 1787.10. EjerciciosparaelJuezdeValladolid. . . . . . . . . . . . . . . 1788. Backtracking 1798.1. Introducci on. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1798.2. Recorridodegrafos . . . . . . . . . . . . . . . . . . . . . . . . 1798.3. Constuirtodoslossubconjuntos . . . . . . . . . . . . . . . . . 1838.4. Construirtodaslaspermutaciones. . . . . . . . . . . . . . . . 1878.5. EjemplodeAplicacion . . . . . . . . . . . . . . . . . . . . . . 1918.6. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1949. Geometracomputacional 1959.1. Introducci on. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1959.2. Geometra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1969.3. LibrerasdeJava . . . . . . . . . . . . . . . . . . . . . . . . . 2029.4. Cercosconvexos. . . . . . . . . . . . . . . . . . . . . . . . . . 2049.5. ClaseJavaparapolgonos . . . . . . . . . . . . . . . . . . . . 2119.6. C alculodelpermetroy areadelpolgono. . . . . . . . . . . . 2129.7. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216A. Fundamentosmatematicos 219A.1. Recordatoriodelogaritmos. . . . . . . . . . . . . . . . . . . . 219A.2. Recordatoriodeseries . . . . . . . . . . . . . . . . . . . . . . 220INDICEGENERAL xiA.2.1. Seriessimples . . . . . . . . . . . . . . . . . . . . . . . 220A.2.2. Seriearitmetica . . . . . . . . . . . . . . . . . . . . . . 220A.2.3. Seriegeometrica . . . . . . . . . . . . . . . . . . . . . . 220A.2.4. Propiedadesdelasumatorias . . . . . . . . . . . . . . 221A.2.5. Seriesimportantes . . . . . . . . . . . . . . . . . . . . 221A.3. Combinatoriabasica . . . . . . . . . . . . . . . . . . . . . . . 222A.3.1. Formulasimportantes . . . . . . . . . . . . . . . . . . 222A.4. Probabilidadelemental . . . . . . . . . . . . . . . . . . . . . . 223A.5. Tecnicasdedemostracion . . . . . . . . . . . . . . . . . . . . 224A.5.1. Demostraci onporcontradicci on . . . . . . . . . . . . . 224A.5.2. Demostraci onporinducci on . . . . . . . . . . . . . . . 224B.ElJuezdeValladolid 227B.1. Comoobtenerunacuenta . . . . . . . . . . . . . . . . . . . . 227B.2. Comoenviarunproblema . . . . . . . . . . . . . . . . . . . . 231B.3. Problemadeejemplo . . . . . . . . . . . . . . . . . . . . . . . 233B.4. Ayudaparacorregirerrores . . . . . . . . . . . . . . . . . . . 236B.5. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237xiiINDICEGENERALCaptulo1Algortmicaelemental1.1. IntroduccionEnestecaptuloempezamosel estudiodelosalgoritmos. Empezaremosdeniendoalgunosterminostalescomoalgoritmo, problema, instancia, e-cienciaeinvestigaremosmetodosparaprobarlaecienciadelosmismos.Existen metodos formales para realizar pruebas rigurosas sobre la correc-ci ondelos programasestatem aticaest afueradel alcancedel textoperoser amencionadam asadelantesolocomoreferencia.1.2. AlgoritmoDenimos comoalgoritmoaunconjuntode pasos necesarios parare-solver unproblemayaseamanualmenteopor metodos mecanizados que,sonlosm asusualesenlaactualidad.Elconceptodealgoritmosfuedenidoinicialmenteporelmatem aticoPersaAl-Khowarizmenelsiglodiecinueve.Laejecuci ondeunalgoritmonodebeincluirprocedimientosintuitivosoquerequierancreatividad.Porejemplo,unarecetadecocinapuededenomi-narseunalgoritmosicontienelasinstruccionesprecisasparaprepararalgo,siempreycuandonotengadetallestalescomosalalgusto,ococinarhastaqueestesuave,quesonapreciacionessubjetivasdelquepreparalareceta.Debemosindicarquelosalgoritmosdebencumplirunrequisitofunda-mental y es que todo algoritmo debe terminar en un n umero nito de pasos.Si consideramos el sistema operativo veremos que no es un algoritmo porquenoterminanunca,dadoqueestaenuncicloinnito.12 1.ALGORITMICAELEMENTALPodemoscitaralgunosejemplosdealgoritmosconocidos, el metododemultiplicarqueaprendimosenlaescuela, el algoritmoparavericarsi unn umeroesprimoymuchosotros.1.3. ProblemaseinstanciasSi pensamos los procedimientos para multiplicar n umeros que conocemosveremos quehayvarias formas deresolver el problemademultiplicaci on.Tenemoslosmetodosqueaprendimosenlaescuela,metodospordivisi onymultiplicaci onpor2denominadomultiplicacionalarusayotros. Cual deestasposiblessolucioneshayqueimplementar?Estadecisioncorrespondeaun area muy desarrollada en el campo de la informatica denominada analisisdealgoritmos.Una instancia particular sera por ejemplo multiplicar el n umero 123 porel 4567 pero un algoritmo debe ser capaz de funcionar correctamente no soloenunainstanciadelmetodosinomasbienentodaslasinstanciasposibles.Parademostrarqueunalgoritmoesincorrecto, essucientedemostrarque es incorrectoparaunainstancia. As comoes difcil probar que unteoremaescorrectotambienesdifcilprobarqueunalgoritmoescorrecto.Existenlimitacionespropiasdelascomputadorasqueponenrestriccio-nes alos algoritmos. Estas puedenser debidoal tama nodelos n umeros,espaciodememoriaoalmacenamiento. Enel an alisisdelosalgoritmos, setratadeanalizarlosenformaabstractainicialmente, peroenel transcursodeltextotambientocaremosaspectosespeccossobrelaimplementaci onylaecienciadelosmismos.1.4. EcienciaCuando tenemos que resolver un problema pueden existir muchos algorit-mosdisponibles.Obviamentequisieramosescogerelmejor.DeahnosvienelapreguntaCualesmejor?Si tenemos un problema sencillo con algunas pocas instancias escogemos,lomasf acilynosdespreocupamosdelaeciencia.Paraanalizarestotenemos dos metodos. El metodoemprico tambienllamadoaposteriori, consisteenprogramartodoslosmetodosyprobarloscondiferentes instancias yconlaayudadelacomputadoraanalizamos y1.4.EFICIENCIA 3escogemosalguno.El segundollamadometodoapriori esel an alisisteoricodel algoritmo,que con la ayuda de las matematicas podemos determinar la cantidad de losrecursosrequeridosporcadaalgoritmoenbasedeltama nodelasinstanciasconsideradas.Eltama nodeunainstancianormalmenteestadenidaporeln umerodebits, enel casodeungrafoporel n umerodenodosyvertices, oenotrospor el n umero de elementos a procesar. La ventaja del metodo te orico es queno depende de la computadora, lenguaje de programacion o implementacionparticular.Enel tratamientodel tema utilizaremos enalgunos casos unmetodohbridodondesedeterminar alaecienciaenformate oricaysehallar anlosvaloresnumericosenformaexperimental.Retornandoalapreguntadebemosindicarquelaecienciasemideentiempo.Paraestodiremosqueunprogramatomauntiempodelordent(n)paraunainstanciadetama non. M asadelantetrataremosunterminom asrigurosoqueeslanotacionasint otica.Si tratamos el tiempo en segundos uno podra pensar si tengo una maqui-na m as r apida el tiempo sera menor. C omo es que este metodo te orico llegaaserefectivo?Consideremosqueel algoritmotomauntiempoensegundost1(n)paraunamaquinaenparticularyt2(n)paraotra. Paraunn umeronsuciente-mentegrandepodemoshallarunasconstantesaybtalesqueat(n) = bt(n)estonos dice que cualquier ejecuci ondel algoritmoest aacotadopor unafunci on t(n) y existen unas constantes positivas de proporcionalidad que nosdaneltiempo.Estoindicaquesicambiamosdeequipopodemosejecutarelalgoritmo10o100vecesm asrapidoyqueesteincrementoest adadosoloporunaconstantedeproporcionalidad.Lanotaci onasintoticadicequeunalgoritmotomauntiempodel ordende, enfunciondel tama nodelainstancia. Existenalgoritmosqueocurrenmuy frecuentemente y ameritan tener un nombre que a su vez se denominantasasdecrecimiento.Sedenominanalgoritmos:Constanteslosquecuyotiempodeprocesonodependedeltama nodelainstancia.Linealesalosquetomantiemposproporcionalesan.4 1.ALGORITMICAELEMENTALFigura1.1:OrdenesdemagnituddealgoritmosCuadr aticosalosquetomantiemposproporcionalesan2.C ubicosalosquetomantiemposproporcionalesan3.Polinomialesoexponencialesalosquetomantiemposproporcionalesan3,nk.Logartmicoslosproporcionalesalog n.Exponencialeslosquetomantiemposproporcionalesa2n.A uncuandoesdeseablesiempreunalgoritmomasecientedesdeel puntode vista teorico podemos en muchos casos escoger en la implementaci on otro,dado que las constantes ocultas pueden ser muy grandes y no llegar a ser tanecientes para las instancias que deseamos procesar. La gura 1.1 representalasordenesdemagnituddelosalgoritmos.1.5.QUECONSIDERARYQUECONTAR 51.5. QueconsideraryquecontarConsideremos por ejemplo que queremos hallar el m aximo de tres n umerosa, b, c.Pararesolver estoescribimoselsiguientec odigo:maximo=0maximo=Max(a,b)maximo=Max(c,maximo)Max (a,b)if a > breturn aelsereturn bSe puede ver que se requieren exactamente dos comparaciones para deter-minarelvalorm aximodea, b, c.SiescribieramosMax(Max(a,b),c)tambienserealizarandoscomparaciones.Estemismoalgoritmolopodemosescribircomosigue:maximo=0if (a > b)if(a > c)maximo = aelsemaximo = celseif b > cmaximo = belsemaximo = cVemos que a un cuando hemos codicado mas comparaciones en la ejecu-ci onsoloseejecutandoscomoelcasoanterior.Sehacenecesarioestablecerque es lo que debemos considerar en los programas, esto hace necesario de-nir,loqueseentiendeporoperacioneselementales.6 1.ALGORITMICAELEMENTAL1.5.1. OperacioneselementalesEs una operacion cuyo tiempo de ejecuci on esta acotado por una constantequesolodependedeunaimplementaci onparticularcomoserlamaquina,ellenguajedeprogramaci on,etc.En el ejemplo que realizamos estaremos interesados en medir el n umero decomparacionesnecesariasparahallarelm aximo.Elrestodelasoperacioneslasconsideramosoperacioneselementales.Enelcasodelasumadeelementosdeunvectorloquedeseamosmedireslacantidaddesumasrealizadaspararesolverelproblemaylasoperacio-nes de comparacion necesarias para implementar una soluci on, se consideranoperacioneselementales.1.5.2. Analisisdelmejorcaso,casomedioypeorcasoEl tiempo que toma un algoritmo puede variar considerablemente en fun-ci ondediferentes instancias deunmismotama no. Paracomprender estomejorconsideremoselejemplodelprogramadeclasicaci onporinserci on.inserci on(t)for i=1 to nx= t[i]j=i-1while j > 0 and x 0) && (x < t[j])) {t[j + 1] = t[j];j = j - 1;}t[j + 1] = x;}// listar(t);return;}10 1.ALGORITMICAELEMENTALTama no Ordenada Ordenada instanciaInstancia Ascendente Descendente Aleatoria10 0 0 0100 0 1 11000 0 10 3310000 1 163 124100000 6 15812 7890Cuadro1.1:Tiempodeejecucionenmilisegundosvoid listar(int[] t) {for (int i = 1; i < n; i++)System.out.print(t[i] + " ");System.out.println();}}Elresultadodelostiemposdeejecuci on,enmilisegundos,obtenidosenlapruebadelprogramasevenenelcuadro1.1.Como se ve el peor caso es cuando la instancia que creamos esta ordenadaenformadescendente. El casomediosedacuandoel vectorest aordenadoaleatoriamente. En diferentes ejecuciones del programa veremos que el tiempode proceso que se obtiene en el caso medio vara. Esto se debe a que los datosquesegenerannoest anenel mismoorden. Situaci onquenosedaenlasotrasinstanciasgeneradas.Unabuenaaplicaci onde estec odigosedaenloscasos en que los conjuntos de datos a los que vamos aplicar el metodo, est ancasitotalmenteordenados.Captulo2Analisisdealgoritmos2.1. IntroduccionPara el analisis de los algoritmos es muy importante determinar la ecien-ciadelosmismos.Estoselograatravesdelcalculodeltiempodeprocesoocomplejidad.Comonoexistenmecanismosnormalizadosparaelc alculodeestostiempos, solonosreferimosal tiempotomadoporel algoritmomulti-plicado por una constante. A esto denominamos notaci on asintotica. Existentresconceptos, lanotaci onomega, lanotaciontetaylanotaci onOgrandesimbolizadaspor,yOrespectivamente.Eneltextoseenfocaraalan ali-sisdel tiempodeprocesoconlanotaci onO. Serecomiendalabibliografa[McC01]y[EH96]2.2. NotacionordendeLanotaci onordende nos permite especicar lamagnitudmaximadeunaexpresi on. Seaporejemplounafunciont(n)=5n2ypodemospensarque nes comoel tama node unainstanciade unalgoritmodado. Ahorasupongamos que esta funcion representa la cantidad de recursos que gasta elalgoritmo, ya sea el tiempo de proceso, almacenamiento de memoria u otros.Lasconstantessolorepresentanvaloresdeunaimplementaciondadaynotienenqueverconeltama nodelainstancia.Eneste casodecimos que estafunci ont(n) es del ordenn2dadoquesoloest aacotadoporunaconstante. EstosedenominaOgrandedet(n)ymatem aticamentelorepresentamoscomoO(n2).1112 2.ANALISISDEALGORITMOS2.2.1. PropiedadesdeOgrandedenParaaclararloquerepresentaOgrandedendescribamossuspropieda-des:1. Regla del valor maximo. Dadas dos funciones f(n) y g(n) que pertene-cenalosn umerosrealespositivosincluyendoelceroO(f(n) + g(n)) = max(f(n), g(n))por ejemplosi setienelafunciont(n) =5n3+ log n naplicandolaregladelvalormaximotenemosqueO(t(n))=max(5n3, log n, n)cuyovaloresO(n3).2. Igualdaddelogaritmos.Enlanotaci onOlaexpresionO(logan) = O(logbn)que, claramenteesincorrectoenlasmatem aticas, peroescorrectaenlanotacionO.Estose demuestraaplicandolapropiedadde los logaritmos paraelcambiodebaselogan=logbn/logba.NotamosqueeldenominadoresunaconstanteycomoenlanotacionOnoseescribenlasconstantesquedademostrado.3. Propiedadreexiva.Lanotaci onOesreexivadadoque:f(n)O(f(n))4. Propiedadtransitiva.Sif(n)O(g(n))yg(n)O(h(n))entoncesf(n)O(h(n)).5. Propiedadesdelmites.a) si lmnf(n)g(n)'+ f(n)O(g(n))yg(n)O(f(n))b) si lmnf(n)g(n)= 0 f(n)O(g(n))perog(n)O(f(n))c) si lmnf(n)g(n)= + f(n)O(g(n))perog(n)O(f(n))2.3.NOTACIONASINTOTICACONDICIONAL 132.3. NotacionasintoticacondicionalMuchos algoritmos sonm as f aciles de analizar si restringimos nuestraatenci onainstanciasquecumplenalgunacondici ontalescomoserunapo-tenciade2, serdeuntama nodeterminado. Consideremosporejemplo, unalgoritmocuyoresultadoparan=1est(n) =1yparaotrosvaloresto-mant(n 1).Estealgoritmoseexpresacomounasoluci onrecursivaqueseescribecomosigue:T(n) =_1 sin = 1,nT(n 1) enotroscasos.enlasseccionessiguientesestudiamoscomoresolverestasecuacionesdeno-minadasrecurrencias.2.4. NotacionomegaLa notaci on omega que la representamos por se utiliza para representarlacotainferiordeunalgoritmo. Porejemploel algoritmodeordenamientopor inserci on demora O(n2) en el peor caso sin embargo la cota inferior paralosprogramasdeclasicaci onquetrabajan unicamenteporcomparacioneses(nlog n)porlotantopodemosdecirquenoexistenalgoritmosdeclasi-caci onqueensupeorcasoseanmejoresque(nlog n).Seat(n)(f(n))si existeunaconstantereal ypositivadtal quelare-laci ont(n) df(n)seaciertaparaunacantidadinnitadevaloresden,sibuscamosquelarelaci onsecumplaparaunn umeronitodevaloresden,entoncesf(n)esellmiteinferiordelalgoritmo.2.5. NotaciontetaCuandoanalizamosunalgoritmoestaramosmuysatisfechossi nuestroalgoritmoestuvieraacotadosimultaneamenteporyO. Porestaraz onseintroducelanotacion.Decimosqueunalgoritmoesen(f(n))oquef(n)esdeordenexactosi:(f(n)) = O(f(n)) (f(n))Estanotaci onseutilizamuypocoycomopodraapreciar tieneunmayorgradodedicultad.Comunmenteseutilizalanotaci onOyparamostrarla14 2.ANALISISDEALGORITMOSrelaci oncontraelmejoralgoritmoposible,paraelcual,usamoslanotaci on.2.6. Analisisdelasestructurasdecontrol2.6.1. SecuencialesSean p1 y p2 dos fragmentos de un algoritmo y sean t1 y t2 los tiempos quetoman cada uno respectivamente. La regla de secuencias indica que el tiempodeejecuciondelasecuenciap1; p2tomauntiempot1 + t2. Porlaregladelvalormaximoel tiempoes(max(O(t1), O(t2)). Esteanalisisconsideraquep1yp2sonindependientes. Estoes que, el procesop2nodependedelosresultadosdep1.2.6.2. CiclosForConsideremoselprogramasiguientefor i = 1 to mp(i)En este programa no confundamos m con n que es el tama no de una instancia.Sip(i)tomauntiempoconstantetynodependedeientoncesestetiemposerepetiramvecesydenotamosestocomo:m

i=1t = tm

i=11 = tm = O(m)En un caso mas general donde t(i) no es constante y depende de i deberamoscalcularelresultadodelasiguientesumatoria:m

i=1t(i)2.6.3. LlamadasrecursivasEl analisisrecursivodeunalgoritmoesnormalmentecasi directoyunasimpleinspecci onnormalmentenosdaunaecuaci onderecurrenciaquere-presenta el comportamiento del mismo. Consideremos el problema de buscarunelementotenunarregloarecursivamente2.6.ANALISISDELASESTRUCTURASDECONTROL 15busca (n)if n =0 return -1elseif a[n]= treturn nelsereturn busca(n-1)Enestealgoritmopodemosverqueparaloscasosenquenes0el tiempoquetomaesunaconstante,cuandoencuentraelvalortambieneltiempoesunaconstante. Enlosotroscasosdependedel valor n 1. Estopodemosrepresentarporunafunci onrecurrentedelasiguienteforma:T(n) =___1 sin = 0,1 sia[n] = t,T(n 1) + h(n) enotroscasos.Elvalordeh(n)eseln umerodeoperacioneselementalesrequeridasencadarecursi on.PodemosresolverestarecurrenciaydemostrarquelasolucionesO(n).2.6.4. CicloswhileyrepeatLoscicloswhileyrepeatsonmuchomasdifcilesdeanalizarporquenoexisteunaformadesabercuantasvecessevaaejecutar.Paraterminarunciclohayqueprobar algunacondicionquenos dar aunvalor determina-ci on.Consideremoselc odigosiguiente:ejemplo(n)i=0while n>1if par(n)n=n/2i=i+1elsen=3n/2i=i+1return i16 2.ANALISISDEALGORITMOSEnesteejemplonopodemosdecidirasimplevistacuantasvecesseejecutalainstrucci oni =i + 1sevequecadavezquenesunapotenciade2sepasar aporlapartepar(n)ycuyacantidaddevecesser aellog2n.Quepo-demosdecircuandoesimpar?. El algoritmotermina?. Estasinterroganteslasdejamosparaelanalisisdellector.Enmuchoscasosser anecesarioaplicarlateoradeprobabilidadesparapoder determinar las veces que una instrucci on se ejecuta. Si podemos deducirunarecurrenciaapartirdelalgoritmopodemoshallarf acilmentesuO(n).ejemplo(n)i=0while n>1n=n/2i=i+1return iEnesteejerciciovemosquelosvaloresquetomansonn, n/2, n/4...porlotantopodemosescribirestarecurrenciacomoT(n) =_1 sin < 2,T(n/2) + 1 enotroscasos.yluegoderesolverlapodemosindicarqueel resultadoesO(log n). Losmetodospararesolverrecurrenciasseexplicar anmasadelante.2.6.5. AnalisisdelcasomedioConsideremoselalgoritmodeordenarporelmetododeinsercioninserci on(t)for i=1 to nx= t[i]j=i-1while j > 0 and x bk O(nlogb a),sia = bk O(nklog n),sia < bk O(nk)(2.7.4)Lademostraci ondel teoremasepuedeconsultar enlabibliografa[GB96]citadaalnaldeltexto.Resuelvalossiguientesejerciciosutilizandoelteoremamaster:1.T(n) = 2T(n2) + n2.7.SOLUCIONDERECURRENCIAS 23Enestecasoveaquea=2, b=2, k=1yf(n) =nkaplicandoelteoremaestamosenelcasoa=bkporloquelasolucionesesT(n)=O(nklog n) = O(nlog n)2.T(n) = 9T(n/3) + nVeamosa=9, b=3, k=1porloquea bkentonceslasoluci onesnlog3 9= O(n2)3.T(n) = T(2n/3) + 1Veamosa = 1, b = 3/2, k= 0porloquea = bkentonceslasoluci onesO(nklog n) = O(log n)EjerciciosResolverutilizandoelteoremamaster.1. T(n) = 4T(n/2) + n.2. T(n) = 4T(n/2) + n2.3. T(n) = 4T(n/2) + n3.2.7.7. Soluci ongeneralderecurrenciaslinealesLasrecurrenciasdelaformaa0tn + a1tn1 + .... + aktnk= f(n) (2.7.5)se denominan: ecuaci on lineal, homogenea y de coecientes constantes. Cuan-dof(n)es0sedenominahomogeneayenotroscasosnohomogenea. Unabuena descripcion de como resolver estas recurrencias pueden ver en los librosdeGrimaldi[Gri77]yKnuth[RLG94]24 2.ANALISISDEALGORITMOSSolucionderecurrenciashomogeneasLa solucion de una ecuaci on t(n) puede representarse como la combinacionlinealdefuncionesporejemploc1f(n) + c2g(n).Consideremoslaexpresionp(x) = a0xk+ a1xk1+ .... + ak= 0La solucion trivial es cuando x = 0 no es de interes. Esta ecuacion se denomi-na ecuaci on caracterstica o polinomio caracterstico. Recordando el algebra,unpolinomiode ordenktiene exactamente kraces ypuede factorizarsecomop(x) =k

i=1(x ri)donderisonlassolucionesdep(x)=0.Cualquierriesunasoluci onaestepolinomio por lo que tambien son una solucion a t(n) porque cualquier com-binacion linealtambienconforma una solucion, por lo que podemos concluirquet(n) =k

i=1(cirni )lassolucionessedanparacualquierconstantequeseescoja,siemprequelasracesseandistintas.EjemploConsideremoslasecuenciadeFibonacci:f(n) =_n sin = 0, n = 1,f(n 1) + f(n 2) otroscasos.reescribimosestaecuacionparasatisfacerlaecuaci on2.7.5f(n) f(n 1) f(n 2) = 0Estaecuaciontieneunpolinomiocaractersticox2x 1 = 0quetienecomosoluci onlasracesr1=1 +52yr2=1 522.7.SOLUCIONDERECURRENCIAS 25entonceslasoluciongeneralesf(n) = c1rn1+ c2rn2ahora utilizando las condiciones iniciales podemos hallar las constantes c1, c2c1 + c2= 0r1c1 + r2c2= 1resolviendoobtenemosc1=15yc2= 15reemplazandoenlaecuaci onobtenemosf(n) =15[(1 +52)n(1 52)n]SolucicionderecurrenciasnohomogeneasLarecurrenciasdelaformaa0tn + a1tn1 + .... + aktnk= bnp(n) (2.7.6)besunaconstantep(n)esunpolinomioenndegradod.Consideremoslarecurrenciasiguiente:t(n) 2t(n 1) = 3n(2.7.7)enestecasob =3yp(n) =1es unpolinomiodegrado0, pararesolvereste problema primero lo convertimos a un problema familiar,la recurrenciahomogenea.Multiplicamosportreslaecuaci on2.7.73t(n) 6t(n 1) = 3n+1(2.7.8)ahoracambiemosn 1porn3t(n 1) 6t(n 2) = 3n(2.7.9)26 2.ANALISISDEALGORITMOSrestando2.7.7de2.7.8tenemosunaecuaci onhomogeneat(n) 5t(n 2) + 6t(n 2) = 0 (2.7.10)elpolinomiocaractersticoesx25x + 6 = (x 2)(x 3)porloque,lassolucionessondelaformat(n) = c12n+ c23nSinembargonoes cierto que cualquier constante arbitrariaproducir alasoluci oncorrectaporque laecuaci on2.7.7noes lamismaque la2.7.10.Podemos resolver laecuacionoriginal enbase de t(0) yt(1). Lafunci onoriginalimplicaquet1= 2t0 + 3porloque,lasecuacionesaresolverson:c1 + c2= t(0)2c1 + 3c2= 2t(0) + 3dedondeobtenemosc1= t(0) 3yc2= 3.Resolviendoestotenemost(n) = (t(0) 3)2n+ 3n+1queesindependientedelasolucioninicialt(n)O(3n)2.8.EJERCICIOSRESUELTOS 272.8. Ejerciciosresueltos1. Cuantotiempotomaelsiguientealgoritmo?l=0for i=1 to nfor j=1 to n^2for k=1 to n^3l=l+1Soluci on:Recordando que los ciclos for son las sumas de los tiempos individualesdelosprocedimientosinteriorespodemosescribirT(n) =n

i=1(n2

j=1(n3

k=11))=n

i=1(n2

j=1n3)= n3n

i=1n2= n3n2n = n62. Cuantotiempotomaelsiguientealgoritmo?l=0for i=1 to nfor j=1 to ifor k=1 to jl=l+1Soluci on:28 2.ANALISISDEALGORITMOSEnestecasonotodaslassumassonhastanT(n) =n

i=1(i

j=1(j

k=11))=n

i=1(i

j=1j)=n

i=1ii + 12=n

i=1(i22+i2)=n

i=1i22+n

i=1i2=n(n + 1)(2n + 1)12+12nn + 12=(n2+ n)(2n + 1)12+n + n24=2n3+ 3n2+ n12+n + n24= O(n3)3. Resolverutilizandoelteoremamasterprocedure DC(n)if n < = 1DC(n/2)for j=1 to n^3x[j]=0Soluci onDelanalisisvemosqueT(n) =_1 n = 1,T(n/2) + n3otroscasos.Dedondetenemosa=1, b=2, k=3loquenosllevaal caso1)3. Hallar el O(n) del siguienteprogramaparahallar el m aximocom undivisor.Sugerenciaescribireltama nodelainstanciaencadaiteraci onyaproximaraunaseriearmonica.mcd(m,n) {while (n> 0){resto=m%nm=nn=resto}return (m)}4. HallarelO(n)delsiguienteprogramadeexponenciacion.pot(x,n) {if (n==0)return 1if (n==1)return xif (par(n))return (pot(x*x,n/2))elsereturn (pot(x*x,n/2)*x)}5. Realizar una prueba experimental para comprobar las cotas superioresdelosprogramasanteriormentepropuestos.6. Codicarelprogramadeb usquedabinariaenformarecursivayhallarelO(n)7. Se tienen dos programas A y Bcuyo tiempo de ejecuci on es 150 log(n)milisegundosy150n2respectivamente.Indiquequeprogramaesmejorparan < 100,n < 1, 000,n > 10, 000Comoeselcomportamientosi150 log(n)cambiapor2000 log(n).34 2.ANALISISDEALGORITMOS2.10. NotasobreelcalculointegralCuando tenemos una sumatoria, desde nuestras clases de calculo, asocia-mos la misma a una integral. Como la sumatoria es acotada, se podra pensarenutilizarunaintegraldenida.Consideremosporejemplolasiguientesumatoriaysuresultado:n

i=0i2=n(n + 1)(2n + 1)6(2.10.1)Si suponemosqueesposiblehallarel resultadointegrandolasumatoriasetienelosiguiente:_i = 0ni2=i33[n0=n33+ c (2.10.2)Claramentelasecuaciones2.10.1y2.10.2sondiferentes.Entoncesparaquepodemosutilizarelc alculointegral?Bien, si queremos obtener la cota superior en la ejecuci on de un algoritmo,debemosobtenero(f(n))delas2.10.1y2.10.2O(n(n + 1)(2n + 1)6) = n3O(n33+ c) = n3Comove, ambosresultadosnosdanlamismacotasuperior. Enel librodematematicasconcretasdeDonaldKnuth[RLG94]sepuedeencontrarunmetodoparahallarelresultadodeunasumaatravesdelcalculo.Captulo3Teoraden umeros3.1. IntroduccionSe hace muy importante la teora de n umeros en el aprendizaje de la pro-gramaci on. Este conocimiento permite comprender los aspectos que hacen alproceso computacional, tales como las capacidades de la m aquina, el tama nom aximo de n umeros que se pueden tratar y como trabajar con n umeros m asgrandes.Eneltratamientodeestecaptulosetomanencuentalosaspectosrela-tivosaltiempodeprocesoparahacerecientelosalgoritmosexpuestos.3.2. VariablesdellenguajeJavaEllenguajedeprogramaci onJavatienevariostiposdevariablesenterasquesemuestranenelcuadro3.1.tipo Nro.Bytes Nro.Bits Rangoden umerospermitidobyte 1bytes 8bits desde (27+ 1) hasta+ 27short 2bytes 16bits desde (215+ 1) hasta+ 215int 4bytes 32bits desde (231+ 1) hasta+ 231long 8bytes 64bits desde (263+ 1) hasta+ 263Cuadro3.1:TiposdevariablesenterasenJavaParaevaluar el tiempodeprocesodelas operaciones desuma, multi-plicaci onydivisi onconstruimosunprogramaquerepitamuchasvecesuna3536 3.TEORIADENUMEROSoperaci on, midiendo el tiempo de ejecuci on. Esto permite determinar cuantotiempo consumen los diferentes tipos de variables y escoger la mas adecuadaparamejorarel tiempodeproceso. El programasiguientenospermiteme-direltiempoquetomalaoperaciondemultiplicarrealizando10.000.000deoperacionesdemultiplicacionparaunavariableentera.public class Tiempos {/*** Programa para medir el tiempo de proceso en* milisegundos de las operaciones elementales* Suma , Multiplicacion y division.* Se construye un ciclo, con una operacion elemental.* El ciclo debe ser lo suficientemente grande y se* imprime el tiempo** @author Jorge Teran* @param args* none*/public static void main(String[] args) {int j = 0;int iteraciones = 10000000;long tiempoInicio, tiempoFin, tiempoTotal;tiempoInicio = System.currentTimeMillis();for (int i = 1; i < iteraciones; i++) {j = j + 1;}tiempoFin = System.currentTimeMillis();tiempoTotal = tiempoFin - tiempoInicio;System.out.println("Tiempo de proceso de la Suma "+ tiempoTotal);tiempoInicio = System.currentTimeMillis();for (int i = 1; i < iteraciones; i++) {j = j * j;}3.2.VARIABLESDELLENGUAJEJAVA 37Operacion tipo Tiempoenmsegpara10.000.000repeticionessuma int 110suma long 190multiplicaci on int 140multiplicaci on long 230divisi on int 771divisi on long 2334Cuadro3.2: Comparacionde los tiempos de ejecuci onde las operacionesb asicastiempoFin = System.currentTimeMillis();tiempoTotal = tiempoFin - tiempoInicio;System.out.println("Tiempo de proceso de la Multiplicacion "+ tiempoTotal);tiempoInicio = System.currentTimeMillis();for (int i = 1; i < iteraciones; i++) {j = j / i;}tiempoFin = System.currentTimeMillis();tiempoTotal = tiempoFin - tiempoInicio;System.out.println("Tiempo de proceso de la Division "+ tiempoTotal);}}Una vez procesado este programa construimos el cuadro 3.2 para compa-rarel tiempodeprocesoparacadatipodevariable. Sepuedeobservarqueunaoperaci ondedivisi ondemoramuchomasqueunaoperaciondemulti-plicaci on. Tambien se observa que las operaciones de tipo longdemoran casieldobledetiempoquelasoperacionesenteras.UnaalternativaenelsistemaoperativoLinuxeseldeutilizarlainstruc-ci ontimeparamedirel tiempodeproceso. Estainstrucci ondelalneadecomandosnosdael tiempodeejecuciontotal del programa, encambio, elmetodomostradonos permitehallar el tiempodeejecuci ondepartes del38 3.TEORIADENUMEROSc odigo.3.3. Calculodelmaximocom undivisorDados dos n umeros enteros se denomina m aximo com un divisor al maxi-mon umeroqueesdivisordeambosn umeros. Comoejemplo, tomemoslosn umeros 20 y 8. Los divisores del n umero 20 son: 20,10, 5,4 y 2. Los divisoresdel n umero8sonel 8, 4y2. Deaqu vemos queel maximocom undivi-sor es el n umero 4. Para resolver adecuadamente este problema se construyeunprograma, inicialmenteconlaideaexplicada, calculamossuO(n)paraposteriormentebuscarunsoluci onmaseciente.Pararealizarunaprimeraaproximacionalasoluciondel problemapro-baremos todos los n umeros hallando el m aximo n umero que divida a ambos.Mcd(int a, int b) {int mcd() {int i;for (i=b; i>1;i--){if (((a%i==0) && (b%i==0))) {break;}}return (i);}}An alisis:Sepuedeapreciarqueprimeroa>bcuandohallamosel primerdivisoreste ya es maximo porque comenzamos en b y vamos restando de uno en uno.Enelpeorcasocuandoelm aximocom undivisores1elalgoritmorealizaelm aximon umerodeoperaciones.ParacalcularelO(n)requerimosresolver1

i=b1 = boseaO(n). Paramejorarestealgoritmosehacenecesarioanalizaralgunaspropiedadesmatem aticas.3.3.CALCULODELMAXIMOCOMUNDIVISOR 393.3.1. DivisibilidadEnlateoraden umeros lanotaci ona[bseleeadividebsignicaqueb = kaparaalg unk > 0.Tambiensedicequebesm ultiplodea.Si a[bdecimosqueaesundivisordebporejemplolosdivisoresde20son:1,2,4,5,10y20.Todo entero a, es divisible por el divisor trivial 1. Los divisores no trivialessedenominanfactores.Cuando un n umero tiene como unico divisor el n umero 1 y a si mismo sedenominan umeroprimo.Teorema1. Paracualquierenteroayunn umeropositivonexistenenteroskyrtal que0 r < nya = qn + rElvalorq= a/n|sedenominacocientedeladivisi onyrdedenominaresiduooresto. El valorrtambienseexpresacomor=a modn. Deestovemosquen[asiysolosia modn = 0Si d[byd[aentoncesdesuncom undivisordeayb. Enestecaso, severicad[(a + b)yenuncasomasgenerald[(xa + yb)sib[aya[bsignicaquea = bsib[asignicaqueb aoquea = 0El maximocom undivisordedosn umerosa, bambosdiferentesacero, sedenominaal divisor com unm as grandedea, b. Selodenominamos comomcd(a, b).Sedenemcd(0, 0) = 0.Algunaspropiedadessonlassiguientes:mcd(a, b) = mcd(b, a)mcd(a, b) = mcd(a, b)mcd(a, b) = mcd([a[ , [b[)mcd(a, ka) = amcd(a, 0) = [a[40 3.TEORIADENUMEROSTeorema2. Si a, bsonn umerosenteros,diferentesdeceroel mcd(a, b)esel elementomaspeque nodel conjunto ax + bydondex, y Z.Demostracion. Seaq= a/s|yseaselenteromaspeque nodelacombina-ci onlinealdeayb.Entoncesa mods = a qs= a q(ax + by)= a(1 qx) + b(qy)Estomuestraquea modsesunacombinacionlineal deayb. El n umerom as peque no que puede dar a mods es 0 dado que a mods < s. Podemoshacerunanalisissimilaryencontrarlomismoparab.Estoindicaques[ayques[bporloquesesundivisorcom undeayb.De ac a vemos que mcd(a, b) s. Dado que el mcd(a, b) > 0 y que s dividea ambosa yb debedividirtambienauna combinaci onlinealdea yb porloque mcd(a, b) s. Si mcd(a, b) s y mcd(a, b) entonces mcd(a, b) = sDeesteteoremapodemosdeducirlassiguientespropiedades:Dadoslosn umerosenterospositivosa, b, nsin[abymcd(a, n) = 1entoncesb[n.mcd(na, nb) = n mcd(a, b)(propiedaddistributiva).Sid[ayd[bentoncesmcd(a, b)[d.Teorema3. (TeoremadeEuclides)Paracualesquieradosenterosnonega-tivosa, bmcd(a, b) = mcd(a, mcd(a modb))Demostracion. Sepuedeescribiracomotb + ryreemplazandosetienemcd(a, b) = mcd(tb + r, b)cualquierdivisorcom undebyadebedividirtb +r.Cualquierdivisordetbtambienesdivisordebqueimplicaquecualquierdivisordebdebedividirar.AhoravamosaaplicarelalgoritmodenominadodeEuclidesparahallarel m aximocom undivisordedosn umeros. Primeramenteescribiremosunafunci onrecursivaparahacerm assimpleelcalculodesucomplejidad.3.3.CALCULODELMAXIMOCOMUNDIVISOR 41Mcd(a,b)if (b==0)return (a)else Mcd(b, a%b)EstarecursionlapodemosescribircomoT(n) =_1 si n = 0,T(nb) + 1 en otros casos.ComovetomalaformadelteoremamasterT(n) = aT(nb) + nkdonde b reduce su tama no en a modb en cada iteraci on por lo que podemosaplicar el teorema y se ve que a = 1, b = a modb, k = 0 donde a = bk. EstonosdicequeeltiempoquetomaalgoritmoensupeorcasoesO(log n).Paraahorrarlamemoriautilizadaporlarecursionsepresentaunasolu-ci onrecursivapublic class Euclides {/*** Programa para hallar el maximo comun divisor* con el metodo de Euclides** @author Jorge Teran*/int a, b;Euclides(int a, int b) {if (a > b) {this.a = a;this.b = b;} else {this.b = b;this.a = a;42 3.TEORIADENUMEROS}}int mcd() {int r = b;while (b > 0) {r = a % b;a = b;b = r;}return (a);}}Semencionanalgunaspropiedadesdelmaximocom undivisor:Propiedadasociativa. mcd(a, b, c) = mcd(a, mcd(b, c))Propiedaddistributiva. mcd(na, nb) = n mcd(a, b)Propiedadidempotente. mcd(a, b) = a)Propiedadconmutativamcd(a, b) = mcd(b, a)Propiedaddeabsorcionmcd(a, mcd(a, b)) = a3.3.2. AlgoritmosextendidodeEuclidesEl algoritmo de Euclides Extendido muestra como calcular los valores x, ydelaexpresi onax + by= mcd(a, b).Conocemosquemcd(a, b) = mcd(b, r)donde:r = a b a/b|suponiendoqueconocemosx

yy

talquerx

+ by

= mcd(b, r) = mcd(a, b)reemplazando(a b a/b|)x

+ by

+ = mcd(a, b)3.3.CALCULODELMAXIMOCOMUNDIVISOR 43reordenandoax

+ b(y

y

a/b|) = mcd(a, b)Vemosquecuandoa = 0elvalordexdebeser0yy= 1Elsiguienteprogramarealizaelcalculodelosvaloresx, y/*Programa para el algoritmo* extendido de Euclides* @author Jorge Teran**/void eMcd (int a, int b){int x, yAnt, r, aIni, bIni, sr,q;aIni = a;bIni = b;x = 1;yAnt = 0;while (b != 0){r = a % b;q=a/b;a = b;b = r;sr = x - yAnt*q;x = yAnt;yAnt = sr;}System.out.print("mcd= "+a);System.out.print(" x= "+x);System.out.println(" y= "+((a-x*aIni)/bIni));}Paraunamayorcomprensi onsemuestraunejemplodeunaejecuci on.Hallemosax +by= mcd(a, b)cona = 97yb = 66.Elcuadro3.3ejemplicalaejecuciondelprograma.Comosevelaecuacionax + by=mcd(a, b)secumpleconlos ultimosvaloresobteniendo97(17) + 662544 3.TEORIADENUMEROSa b q=a/b r mcd sr x y 97*x+66*y97 66 1 31 66 1 0 1 6666 31 2 4 31 -2 1 -1 3131 4 7 3 4 15 -2 3 44 3 1 1 3 -17 15 -22 33 1 3 0 1 66 -17 25 1Cuadro3.3:Pruebadeejecuci ondelalgoritmodeextendidodeEuclides3.4. Mnimocom unm ultiploEl mnimocom unm ultiplo(mcm) de dos n umeros es el n umerom aspeque noqueesdivisibleporambosn umeros.Porejemploelmnimocom unm ultiploentre9y6es18. Parael c alculodel mnimocom unm ultiplonoexisteunalgoritmosimilar al deEuclides quefacilitehallar esten umero.Esten umeroseexpresacomosigue:mcm(a, b) = mink, k > 0 ya[k yb[ksinembargoesposibleprobarquemcd(a, b)mcm(a, b) = abEnelejemplopodemosverqueelmcd(9, 6)es3yque3x18 = 54 = 9x63.5. AritmeticamodularLaaritmeticamodular es unade las aplicaciones m as importantes delateoraden umeros. Estarepresentadaporlafunci on mod. Lafunci onm odulo representa el resto de la divisi on. Por ejemplo a modb signica quequeremoshallarelrestodeabquerepresentamoscomoa modb = a b_ab_(3.5.1)Laaritmeticamodular tambiendeneunsistemadenumeraci on. Veamosporejemplolasecuencia:0 mod3,1 mod3,2 mod3,3 mod3,4 mod3....evaluandotenemos0, 2, 1, 0, 1...queequivalealanumeracionenbase3.3.5.ARITMETICAMODULAR 453.5.1. PropiedadesPresentamosalgunaspropiedadesimportantesdelaaritmeticamodular.Suma(x+y) modm=(x modm+y modm) modm. Por ejemplo(8 + 7) mod3=15 mod3=0ypor lapropiedaddelasuma(8mod3 + 7 mod3) mod3RestaLarestaessololasumaconvaloresnegativosporlosque(x y)modm = (x modmy modm) modm.Multiplicaci onLa multiplicaci onxy modm=(x modm)(y modm)modm. Estosedadebidoaquelamultiplaci onessimplementeunasumarepetida.DivisionNoexisteel inversodelamultiplicacioncomolaconocemosporejemploveamosdx modm=dy modmsepuedepensarquepode-mos simplicar d obteniendo x modm = y modm, que no se cumpleentodosloscasos.Veamosunejemplo62 mod3 = 61 mod3 = 0sisimplicamosel6tenemos2 mod3 = 1 ,= 1 mod3 = 2.Solo es posible realizar estas simplicaciones cuando el mcd(d, m) = 1.Existenmuchas aplicaciones de laaritmeticamodular, por ejemploenelcalendario los das de la semana correponden a una aritmetica modulo 7, lashoras, minutos y segundos corresponden al m odulo 60. Hallar el ultimo dgitodeunn umerodecimalcorrespondeaunaaritmeticamodulo10.El ejemploquesepresentaesextractadode[MAR03]. Hallarel ultimodgito del n umero 2100. Para esto no es necesario hallar el valor del exponenteyluegoobtenerel ultimodgitosepuederesolvercomosigue:23mod10 = 826mod10 = (88) mod10 = 4212mod10 = (44) mod10 = 6224mod10 = (66) mod10 = 6248mod10 = (66) mod10 = 6296mod10 = (66) mod10 = 62100mod10 = 29623 21mod10 = 682 mod10 = 646 3.TEORIADENUMEROS3.5.2. CongruenciasSedicequeaes congruentebm odulomcuando(a b)/m=km. Seescribea b modmEstoequivaleaquea, bsonm ultiplosdemAlgunaspropiedadesdelascon-gruenciasson:Propiedadreexivaa aPropiedadsimetricaa b b aPropiedadtransitivaa b c a cSumaa b yc d (a + c) (b + d) modmMultiplicaciona byc d (ac) (bd) modmconb, centerosPotencias a b an bnmodmSi se quiere conocer si 2n1 es m ultiplo de 3. Es decir que (2n1) mod3 = 0.Podemosaplicarlapropiedaddelapotenciayescribir2 1 mod3dedonde2n (1)nmod3.Porlotantoesm ultiplode3cuandonespar.3.5.3. InversomultiplicativoConsideremosquemcd(a, n) = 1entoncesexistenenterosbyctalesqueba+cn=1. Estose puede escribir comoba 1 modn. De aqu b sedenominainversomultiplicativodea.3.5.4. SoluciondeecuacionesLaecuaciondecongruenciadeprimerordenestadenidacomo:ax b( modm)Estasecuacionestienensolucionsolosi mcd(a, m)[bPararesolverestetipodeecuacionsesiguelasiguienteestrategia.ax b = kmax = b + kmybuscamosunktalquea[(b + km)3.5.ARITMETICAMODULAR 47hallamosxEjemplos:1. Resolver6x 5(mod/3).comomcd(6, 3)=2noesdivisorde5,nosetieneunasoluci on.2. Resolver4x 10(mod/6)4x = 10 + k64x = 10 + 6 con k = 1x = 4sireemplazamoselvalordexencontradotenemos:44 6( mod6)tambien pueden plantearse sistemas de ecuaciones de congruencias, por ejem-plo, si recogemos unacantidaddecajas enlas cuales vienen3equipos ytenemos2equipossueltos.Porotroladosirecibimoslamismacantidaddeequipos,encajasenlascualesvienen5equiposytenemos1equiposuelto.Se desea conocer cuantos equipos se recibieron. Esto se puede escribir como:x 3( mod7) (3.5.2)5x 7( mod12) (3.5.3)silasoluci onde3.5.2esx = 3 + k7paraalg unvalorkpodemosreemplazarxenlasegundaecuaci onobteniendo:5(3 + k7) 7( mod12)15 + 35k 7( mod12)35k 8( mod12)signica que k = 8+12t para alg un t reemplazando en 3.5.2 x = 3+(8+12k)7quedax = 59 + 84tdedondex = 59.48 3.TEORIADENUMEROS3.6. N umerosprimosLa teora de los n umeros primos ha tenido un desarrollo muy intenso conlasaplicacionesdecriptografa.Enestaseccionlededicamosunespecialin-teres debido a las complejidades que lleva este cuando se trabaja con n umerosgrandes.Se dene como primo el n umero entero positivo que es divisible solamentepor 1opor si mismo. Los primeros n umeros primos son2, 3, 5, 7, 11, 19...Comose ve el unicon umeroprimopar es el n umero2. El n umero1noes partedelos n umeros primos, sinembargo, algunos autores amplianladenici onparaincluirlo.Paramuchasaplicacionesesnecesariorealizaruntestdeprimalidadquesignicavericar si el n umeroes primoono. Estose puede realizar pordivisionessucesivassinembargonoesunmetodomuyadecuadocuandosetrataden umerosgrandes.3.6.1. Generaci ondeprimosEs posible probar la primalidad de un n umero n en un tiempo proporcio-nalaO(n)conelsiguientec odigodedivisionessucesivasj = 2;while (j * j = 0; j--)if (pan[j] > pan[max])max = j;if (max != i) {if (max == 0)System.out.print((l + 1 - i) + " ");elseSystem.out.print((l+1-max) + " " + (l+1-i)+ " ");reverso(pan, max);reverso(pan, i);}}System.out.println("0");}}void ver(int[] pan, int l) {//lista los datos instroducidosfor (int i = 0; i < l; i++)System.out.print(pan[i] + " ");System.out.print(pan[l] + "\n");}}Intencionalmentehemosomitidolapartedelalecturadedatosporqueesirrelevanteenlaexplicaciondelprocedimientoderesoluci on.5.3.6. Ejemplo2Otroejemplotpicoes el ejercicio10815, quesereereaconstruir undiccionarioapartirdeuntexto.Andy, tieneunsue no- quiereproducir supropiodiccionario. Estonoesunatareaf acil parael, comoel n umerodepalabrasqueel sabenosonsucientes. Enlugardepensartodaslaspalabraspors mismo, tieneunaidea brillante. De su biblioteca recoge uno de sus libros de cuentos favoritos,138 5.APLICACIONESDEBUSQUEDAYCLASIFICACIONdelaquesecopiatodaslaspalabrasdistintas.Alorganizarlaspalabrasenordenalfabeticoseconstruyeautomaticamente. Porsupuesto, esunatareaque consume tiempo, y aqu es donde un programa de ordenador es muy util.Se le pedira que escriba un programa que enumere todas las palabras en eltexto de entrada. En este problema, una palabra se dene como una secuenciaconsecutiva de caracteres, en may usculas y / o min usculas. Palabras con unasola letra, tambien deben considerarse. Ademas, el programa debe considerariguallasmay usculasymin usculas.Porejemplo,palabrascomoManzana,manzana.oMANZANAsedebeconsiderarsecomolamisma.EntradaEl archivodeentradaesuntextodenom asde5000lneas. Unalneadeentradatienecomomaximo200caracteres.LaentradaterminaconEOF.SalidaLasalidadeberadarlalistadepalabrasqueaparecenenel textodeentrada, cadapalabraenunalnea. Todaslaspalabras debenestar enmin usculas,enordenalfabetico.Ustedpuedeestarsegurodequeeln umerodepalabrasdiferenteseneltextonoexcedede5000.EjemploentradaAdventures in DisneylandTwo blondes were going to Disneyland when theycame to a fork in theroad. The sign read: "Disneyland Left."So they went home.EjemploSalidaaadventuresblondescamedisneylandforkgoinghomeinleft5.3.CLASIFICACION 139readroadsignsothetheytotwowentwerewhenSolucionLascondicionesespecicanquealosumohabran5000lneasde200caracteres. Indicaquenosedebehacer diferenciaentremin usculas ymay usculasyadem assedebeneliminarlossignosdepuntuacion.Paraestotomaremosencuentaalgunosaspectos:En la lectura utilizando la clase Scannercon la opci on .next()se lee lapr oximapalabra.Paraeliminar los caracteres depuntuacionutilizamos unaexpresionregularquenospermiteidenticarloscaracteres,yluegolosreempla-zamospornull.Laexpresi onregulares[.:,;].Paragenerarelresultadopedidoprimeroordenamoslosdatosconlasinstrucci onArrays.sort. Estoconlanalidadde poder imprimir losresultadoseliminandolaspalabrasrepetidas.Elcodigoresultanteeselsiguiente:/** Solucion al ejemplo 10815** @author Jorge Teran*/import java.util.Scanner;import java.util.Arrays;public class P10815 {140 5.APLICACIONESDEBUSQUEDAYCLASIFICACIONpublic static void main(String[] args) {Scanner entrada = new Scanner(System.in);String[] palabras = new String[10000000];int j, i = 0;while (entrada.hasNext()) {palabras[i] = entrada.next().replaceAll("[\".:,;]", "").toLowerCase();i++;}Arrays.sort(palabras, 0, i);String anterior = palabras[0];System.out.println(palabras[0]);for (j = 1; j < i; j++) {if (palabras[j].compareTo(anterior) > 0) {System.out.println(palabras[j]);anterior = palabras[j];}}}}5.4. EjerciciosResuelvalossiguientesejerciciosdelJuezdeValladolid:123,152,156,195,263,264,299,340,400,450,482,555,612,642,755,843, 880, 10008, 10041, 10050, 10062, 10098, 10107, 10125, 10132, 10138,10194, 10202, 10277, 10327, 10420, 10474, 10619, 10698, 10745, 10763, 10785,10810, 10815, 10881, 10905, 11224, 11242, 11321, 11373, 11386, 11389, 11411,11413,11462,11495,11516,11579,11627,11646,11649,11751.Captulo6Combinatoriabasica6.1. IntroduccionLacombinatoriaesladisciplinadelasmatem aticasquesereerealastecnicasdecontar. Enrealidadloquetrataderesponderesalapreguntacu antosson?sintenerquecontarlos.Engeneral las tecnicas de contar proveenunaserie de alternativas almomento de tener que escribir programas complicados que cuenten todos losvaloresypermitentenerexpresiones, quesolucionenel problemaaplicandof ormulassimples.6.2. TecnicasbasicasparacontarEnestaparterecordaremosunaseriedeformulasdelacombinatoriaymostraremos como son aplicadas en la programacion. No desarrollaremos losconceptos matem aticos porquenocorrespondealoqueel textopretende,queesmostrarlaformaderesolverproblemas.RegladelProductoSiunconjuntoAtiene [A[posibilidadesyelBtiene[B[ posibilidadesentoncesexisten [A[ x [B[ formasdecombinarestos.Porejemplosi tengo4tiposdeautom ovilesy3coloressetienen12combinaciones.Estascombinacionespuedenrepresentarseenunama-trizcuadradaalmacenandoencadaceldaunacombinacion.Enelcasode tres conjuntos con una matriz de tres dimensiones, vea que el espacioocupadooelrecorridodeloselementossehacecadavezmasgrande141142 6.COMBINATORIABASICARegladelasumaSi un conjunto A tiene [A[ posibilidades y el Btiene [B[posibilidadesentoncesexisten [A[ +[B[posiblesformasenlasqueAoBpuedenocurrir.Enelejemploanteriorsiunodelosautom oviles,odeloscoloreseserrado,existen4 + 3 = 7posibles temsfallados.Reglainclusionyexclusi onEstaesunareglageneralizadadelasuma.Supongamosquetenemosautomovilesde5coloresyminibusesde6coloresyqueremosconocercu antoscoloresdiferentesexisten.Enestecaso tenemos dos conjuntos que se superponen. Esto signica sumar lacantidaddecoloresdeambosyrestarlosqueseancomunesaambosqueseexpresacomo:[A[ [B[ = [A[ +[B[ [A[ [B[Permutaciones Una permutaci on es un arreglo de ntems donde cada temaparece solo una vez. Existen 3! permutaciones para un conjunto de treselementos. Si los elementos son 123 las permutaciones vienen a ser 123132 231 213 312 321. Para un n arbitrario son n!. hay que observar queamedidaqueaumentanel n umerodepermutacionesaumentamuyr apidamente.Subconjuntos Unsubconjuntoeslaselecci ondealgunoselementosdenposibles tems. Para un conjunto arbitrario existen 2nposibles subcon-juntos,porejemplopara3elementosexisten23subconjuntos, estoes:1,2,3,12,13,23,123yel conjuntovaco. Amedidaquecrecen, r apida-mentesellegaatiemposdeprocesomuygrandes.Cadenas Cuandotratamosconcadenasoseaunasecuenciade temsconrepetici on,setienenmndistintassecuencias.Para3elementosconre-peticionsetienen27casosqueson111, 112, 113, 121, 122, 123, 131,132, 133, 211, 212, 213, 221, 222, 223, 231, 232, 233, 311, 312, 313, 321,322, 323, 331, 332, 333. El n umerocrecem asr apidamenteamedidaquecrecem.Enmuchoscasospodemosencontrarqueloquetenemosesunafunci onbiyectiva oseaunasociaci onunoaunoconotroconjunto. Eneste casopodemos resolver el problema de contar cualquiera de los dos conjuntos. Porejemplosidecimosquecadaplantaestaenunamacetadalomismocontarlasplantasolasmacetas. Si unamacetapudieratenermasdeunaplantaestoyanoescierto.6.3.COEFICIENTESBINOMIALES 1436.3. CoecientesbinomialesLoscoecientesbinomialessereerenacalcular_nk_que es el n umero de formas posibles de escoger k elementos de n posibilidades.Queelementossecuentanm ascomunmente?Comites Cuantasmanerashaydeformaruncomitedekmiembrosconnpersonas.Larespuestasehallaporladenici on.CaminosenunmatrizC uantasmanerashaydeviajardesdelaesquinasuperior hastalaesquinainferior derechaenunamatriz de mxncaminandosolamentehaciaabajoohacialaizquierda?Cadacaminodebeconsistirdem + npasosnhaciaabajoymaladerecha, porloqueexisten:_n + mn_Coecientesde(a + b)nCu al es el coeciente de akbnkclaramente_nk_porquecuentaeln umerodeformasquepodemosutilizarparaescogerkelementosden.TriangulodePascal Para calcular los coecientes binomiales de puederealizarutilizandodirectamentelaf ormula_nk_=n!k!(n k)!Sinembargolosc alculosintermediospuedenhacerqueeltrabajoconn umeros grandes sea inadecuado o de tiempo muy largo, una alternativaesutilizareltri angulodePascal.n p(n) p(n,1) p(n,2) p(n,3) p(n,4) p(n,5) p(n,6)1 12 1 13 1 2 14 1 3 3 15 1 4 6 4 16 1 5 10 10 5 17 1 6 15 20 15 6 1144 6.COMBINATORIABASICALo interesante de este triangulo es que calcula los coecientes binomia-lessintenerquerealizarfactoriales. Paracalcularntomadosdekentiempoconstantepodemosconstruireltri angulodePascal/**Programa para constuir el* triangulo de Pascal* @author Jorge Teran**/public static void triangulo(int[][] x) {// Invariante cada linea debe comenzar con unofor (int i=0;i