Este documento presenta un libro sobre fundamentos de programación. El libro introduce conceptos como algoritmos, análisis de eficiencia, notaciones de orden como O grande, y estructuras de control como ciclos y recursión. El objetivo es que los estudiantes aprendan conceptos prácticos de programación de una manera experimental mediante ejercicios y laboratorios.
El documento presenta una serie de boletines de ejercicios de programación en Java que abordan temas como variables, condicionales, bucles, tablas y funciones. Cada boletín contiene varios ejercicios resueltos de manera didáctica sobre un tema concreto para ayudar al aprendizaje de la programación a través de la práctica.
Este documento describe la metodología de aprendizaje basada en ejemplos y proyectos de una institución de formación. Se propone el uso de clases basadas en problemas y proyectos que los estudiantes deben resolver, lo que permite trabajar en necesidades reales. La institución ofrece cursos en programación Java, C/C++, bases de datos, desarrollo web y jQuery, con énfasis en aprender resolviendo problemas y desarrollando proyectos.
El lenguaje de programaciã³n prolog jaume i castellã³nnjrr
Este documento presenta los fundamentos del lenguaje de programación PROLOG. Introduce los conceptos básicos de PROLOG como hechos, preguntas y reglas, y explica la sintaxis del lenguaje. También describe el entorno de programación ECLiPSe que se utilizará para los ejemplos y ejercicios. El objetivo general es proporcionar una introducción al paradigma de programación lógica a través del lenguaje PROLOG.
Este documento presenta un prefacio para un libro sobre el lenguaje de programación PROLOG. Explica que el libro ha sido escrito basándose en 8 años de experiencia enseñando PROLOG a estudiantes de ingeniería informática. También describe la estructura del libro, incluyendo 9 capítulos que cubren los fundamentos de PROLOG, aplicaciones como bases de datos y sistemas expertos, y proyectos de programación. El prefacio concluye expresando la esperanza de que el lector encuentre el aprendizaje de PROLOG intelectualmente
Este documento es un prefacio a un libro sobre el lenguaje de programación Prolog. Explica que el libro ha sido escrito como resultado de 8 años de experiencia enseñando Prolog a estudiantes de ingeniería informática. El prefacio describe brevemente los fundamentos lógicos de Prolog y su enfoque declarativo para resolver problemas. También presenta la estructura y contenido del libro, el cual está dirigido a estudiantes y lectores interesados en aprender Prolog y sus aplicaciones en inteligencia artificial.
Este documento presenta información sobre Prolog, un lenguaje de programación lógica basado en la lógica de predicados. Explica que Prolog fue creado en la década de 1970 y se utiliza principalmente para procesamiento de información simbólica y sistemas de inteligencia artificial. Luego resume algunas características clave de Prolog como su énfasis en la especificación declarativa de problemas y su capacidad para resolver consultas de manera procedural. Finalmente, menciona algunas aplicaciones comunes de Prolog como el desarrollo de sist
Este documento presenta el syllabus de la asignatura de Cálculo Diferencial de la Universidad Técnica de Manabí. Incluye información sobre los datos generales del curso, la descripción, objetivos, resultados de aprendizaje y métodos de evaluación. El curso se enfoca en desarrollar habilidades como determinar dominios, rangos, límites, derivadas y extremos de funciones a través de ejercicios y software matemático.
El c++ por la práctica, introducción al lenguaje y su filoso prevjtk1
Este documento presenta un libro sobre programación en C++ dirigido a personas sin experiencia previa en programación. El libro utiliza un enfoque práctico mediante fichas de trabajo que contienen ejemplos y ejercicios de programación en lugar de un texto tradicional. El objetivo es familiarizar al lector con la programación en C++ de una manera práctica y gradual.
El documento presenta una serie de boletines de ejercicios de programación en Java que abordan temas como variables, condicionales, bucles, tablas y funciones. Cada boletín contiene varios ejercicios resueltos de manera didáctica sobre un tema concreto para ayudar al aprendizaje de la programación a través de la práctica.
Este documento describe la metodología de aprendizaje basada en ejemplos y proyectos de una institución de formación. Se propone el uso de clases basadas en problemas y proyectos que los estudiantes deben resolver, lo que permite trabajar en necesidades reales. La institución ofrece cursos en programación Java, C/C++, bases de datos, desarrollo web y jQuery, con énfasis en aprender resolviendo problemas y desarrollando proyectos.
El lenguaje de programaciã³n prolog jaume i castellã³nnjrr
Este documento presenta los fundamentos del lenguaje de programación PROLOG. Introduce los conceptos básicos de PROLOG como hechos, preguntas y reglas, y explica la sintaxis del lenguaje. También describe el entorno de programación ECLiPSe que se utilizará para los ejemplos y ejercicios. El objetivo general es proporcionar una introducción al paradigma de programación lógica a través del lenguaje PROLOG.
Este documento presenta un prefacio para un libro sobre el lenguaje de programación PROLOG. Explica que el libro ha sido escrito basándose en 8 años de experiencia enseñando PROLOG a estudiantes de ingeniería informática. También describe la estructura del libro, incluyendo 9 capítulos que cubren los fundamentos de PROLOG, aplicaciones como bases de datos y sistemas expertos, y proyectos de programación. El prefacio concluye expresando la esperanza de que el lector encuentre el aprendizaje de PROLOG intelectualmente
Este documento es un prefacio a un libro sobre el lenguaje de programación Prolog. Explica que el libro ha sido escrito como resultado de 8 años de experiencia enseñando Prolog a estudiantes de ingeniería informática. El prefacio describe brevemente los fundamentos lógicos de Prolog y su enfoque declarativo para resolver problemas. También presenta la estructura y contenido del libro, el cual está dirigido a estudiantes y lectores interesados en aprender Prolog y sus aplicaciones en inteligencia artificial.
Este documento presenta información sobre Prolog, un lenguaje de programación lógica basado en la lógica de predicados. Explica que Prolog fue creado en la década de 1970 y se utiliza principalmente para procesamiento de información simbólica y sistemas de inteligencia artificial. Luego resume algunas características clave de Prolog como su énfasis en la especificación declarativa de problemas y su capacidad para resolver consultas de manera procedural. Finalmente, menciona algunas aplicaciones comunes de Prolog como el desarrollo de sist
Este documento presenta el syllabus de la asignatura de Cálculo Diferencial de la Universidad Técnica de Manabí. Incluye información sobre los datos generales del curso, la descripción, objetivos, resultados de aprendizaje y métodos de evaluación. El curso se enfoca en desarrollar habilidades como determinar dominios, rangos, límites, derivadas y extremos de funciones a través de ejercicios y software matemático.
El c++ por la práctica, introducción al lenguaje y su filoso prevjtk1
Este documento presenta un libro sobre programación en C++ dirigido a personas sin experiencia previa en programación. El libro utiliza un enfoque práctico mediante fichas de trabajo que contienen ejemplos y ejercicios de programación en lugar de un texto tradicional. El objetivo es familiarizar al lector con la programación en C++ de una manera práctica y gradual.
Portafolio de evidencias unidad 4 cesar adrian barrios alarconCesar Mcfly
Este documento presenta código de Java que implementa polimorfismo a través de herencia. Define una clase abstracta Empleado y varias subclases concretas como EmpleadoAsalariado y EmpleadoPorComision que redefinen el método ingresos(). También presenta clases EmpleadoBaseMasComision3 y EmpleadoBaseMasComision4 que heredan de EmpleadoPorComision y redefinen ingresos(). El documento pregunta sobre los resultados de ejecutar operaciones en este código y corregir posibles errores.
La tabla de contenidos describe 14 fases de un portafolio para un curso de ingeniería informática. El documento también incluye las misiones y visiones de la Universidad Técnica de Manabí, la Facultad de Ciencias Informáticas y el programa de Ingeniería en Sistemas Informáticos. Finalmente, presenta un syllabus detallado para un curso de cálculo diferencial que incluye objetivos, resultados de aprendizaje y métodos de evaluación.
Este documento describe los conceptos clave del aprendizaje automático. Explica que el aprendizaje automático permite que las aplicaciones se adapten y resuelvan nuevos problemas, más allá de lo programado inicialmente. También describe los tipos principales de aprendizaje: analítico, genético y conexionista. Finalmente, señala que el aprendizaje inductivo busca descripciones generales a partir de ejemplos, a diferencia del deductivo.
Este documento proporciona instrucciones para crear videos tutoriales utilizando el software FastStone Capture 7.1 y Movie Maker. Explica cómo capturar imágenes y videos de la pantalla, agregar leyendas, y editar videos mediante la adición de efectos, transiciones y audio. También describe cómo preparar los archivos de imagen y sonido necesarios antes de comenzar a editar el video en Movie Maker.
Este documento presenta tres preguntas de selección múltiple diseñadas por un estudiante como parte de una tarea sobre programación de computadores. La primera pregunta trata sobre el objetivo principal del tutor en el video. La segunda pregunta trata sobre el orden correcto de los pasos fundamentales para programar. La tercera pregunta define lo que es un algoritmo dentro del área de la computación.
Este documento presenta el código de un programa en Java que invierte cadenas. El programa solicita al usuario ingresar una cantidad de palabras y luego ingresa cada palabra. Las palabras originales se almacenan en una matriz y luego se invierten almacenándolas en otra matriz. Finalmente, el programa imprime las palabras invertidas.
Este documento presenta un manual sobre análisis y diseño de algoritmos. Incluye una introducción general sobre el curso y sus objetivos, así como capítulos sobre conceptos básicos de algoritmos, análisis de eficiencia, estrategias de diseño y ejemplos de algoritmos comunes como ordenamiento, búsqueda y teoría de grafos. El manual provee una guía para el curso y servirá como apoyo complementario a las clases teóricas.
El documento describe varios sistemas de interacción hombre-máquina como cajeros automáticos y máquinas expendedoras de yogurt. Explica cómo los usuarios perciben y actúan sobre estos sistemas, como insertar tarjetas, ingresar claves, seleccionar opciones, extraer dinero u obtener productos. También analiza problemas ergonómicos como la ubicación de botones, tamaño de letras en pantallas, y coherencia entre indicaciones y funciones disponibles.
Educación virtual vs educacion presencialfloresnegras
El documento compara la educación virtual y presencial. La educación virtual permite flexibilidad en el tiempo y lugar de aprendizaje mediante el uso de tecnologías. Sin embargo, puede fomentar la pasividad del estudiante. La educación presencial facilita la interacción entre profesor y estudiantes, pero no es flexible y puede excluir a algunos. Ambos métodos tienen ventajas como desventajas.
El documento define y describe las características de un ensayo. Explica que un ensayo es un escrito breve que presenta una interpretación personal de un tema de una manera libre y subjetiva. Los ensayos pueden ser literarios, científicos o de otro tipo, dependiendo del tema y enfoque. El documento también discute los diferentes tipos de ensayos y ofrece consejos sobre cómo elegir un tema y escribir un ensayo.
Este documento describe los pasos para diseñar un sistema de costos de calidad en una empresa de producción de embutidos. Primero, se debe obtener el compromiso de la gerencia y formar un equipo interdisciplinario. Luego, se identifican y clasifican los costos de calidad, se calculan usando técnicas como partidas contables, y se realiza un seguimiento a través del análisis de datos e informes para tomar acciones de mejora.
Este documento contiene un índice de dos diapositivas con contenido para un ejercicio guiado. La primera diapositiva presenta el contenido inicial y la segunda diapositiva continúa con más contenido para el ejercicio.
Educacion virtual vs educacion presencialfloresnegras
La educación virtual permite ajustar el aprendizaje al horario del estudiante y facilita el acceso a la enseñanza desde cualquier lugar mediante herramientas tecnológicas. Sin embargo, puede conducir a la pasividad del estudiante y presentar dificultades técnicas. La educación presencial fomenta una mayor interacción entre el profesor y los estudiantes, pero requiere horarios y desplazamientos rígidos que no se ajustan a todos. Ambos modelos presentan ventajas y desventajas dependiendo
El documento discute las causas históricas de la discriminación de las mujeres basada en la percepción errónea de que eran menos inteligentes que los hombres. Explica que aunque existen pequeñas diferencias promedio en algunas habilidades cognitivas influenciadas por hormonas, tanto hombres como mujeres son igualmente capaces intelectualmente cuando reciben el mismo entrenamiento y aprendizaje. La inteligencia no es una cualidad simple sino que está compuesta por múltiples habilidades.
La revolución francesa derrocó al antiguo régimen monárquico y estableció una república. Eventos clave incluyen la toma de la Bastilla en 1789 por parte del pueblo de París, la declaración de los Derechos del Hombre y del Ciudadano, y la ejecución del rey Luis XVI en 1793. Napoleón Bonaparte se convirtió en cónsul y luego emperador, poniendo fin al periodo revolucionario pero conservando muchos de sus principios.
Este documento resume la Revolución Francesa entre 1789 y 1799. Comenzó con el pueblo francés rebelándose contra el antiguo régimen y la monarquía debido a la crisis financiera y desigualdad social. Tomaron la Bastilla y declararon una asamblea constituyente. Luego abolieron los privilegios de la nobleza, declararon los derechos humanos y establecieron una monarquía constitucional. Más tarde, la convención proclamó la república y ejecutó al rey. Napoleón llegó al poder a través
Este documento contiene 20 oraciones que incluyen diferentes tipos de oraciones subordinadas sustantivas introducidas por que, quien y lo que. Estas oraciones subordinadas funcionan como sujeto, complemento directo u otros complementos oracionales de las oraciones principales.
Este documento presenta un plan de estudios para Lengua y literatura castellana de 4o de ESO. Incluye 10 temas sobre diferentes aspectos gramaticales como la narración, descripción, diálogo y oraciones. Cada tema cubre conceptos gramaticales específicos y actividades para practicar. Los temas también cubren diferentes movimientos y autores literarios españoles como el Romanticismo, Realismo y generaciones literarias del siglo XX.
El plan de auditoría describe una auditoría de dos días del proceso de distribución de una empresa. Evaluará el cumplimiento de los procedimientos, identificará fallas e incluirá entrevistas, observaciones y revisión de documentos. El equipo auditor verificará que el sistema de gestión cumpla con varias normas incluyendo ISO 9001, ISO 14001, BPM y HACCP.
El documento describe una plataforma llamada Ventureka que pretende conectar emprendedores con inversores de manera más eficiente. La plataforma ofrecerá servicios profesionales para ayudar a los emprendedores a crear startups sólidas y atraer inversores. El modelo de negocio se basa en una membresía gratuita con servicios adicionales de pago. Se espera alcanzar el punto de equilibrio en el tercer año y generar una tasa interna de retorno del 45% para los inversores.
Portafolio de evidencias unidad 4 cesar adrian barrios alarconCesar Mcfly
Este documento presenta código de Java que implementa polimorfismo a través de herencia. Define una clase abstracta Empleado y varias subclases concretas como EmpleadoAsalariado y EmpleadoPorComision que redefinen el método ingresos(). También presenta clases EmpleadoBaseMasComision3 y EmpleadoBaseMasComision4 que heredan de EmpleadoPorComision y redefinen ingresos(). El documento pregunta sobre los resultados de ejecutar operaciones en este código y corregir posibles errores.
La tabla de contenidos describe 14 fases de un portafolio para un curso de ingeniería informática. El documento también incluye las misiones y visiones de la Universidad Técnica de Manabí, la Facultad de Ciencias Informáticas y el programa de Ingeniería en Sistemas Informáticos. Finalmente, presenta un syllabus detallado para un curso de cálculo diferencial que incluye objetivos, resultados de aprendizaje y métodos de evaluación.
Este documento describe los conceptos clave del aprendizaje automático. Explica que el aprendizaje automático permite que las aplicaciones se adapten y resuelvan nuevos problemas, más allá de lo programado inicialmente. También describe los tipos principales de aprendizaje: analítico, genético y conexionista. Finalmente, señala que el aprendizaje inductivo busca descripciones generales a partir de ejemplos, a diferencia del deductivo.
Este documento proporciona instrucciones para crear videos tutoriales utilizando el software FastStone Capture 7.1 y Movie Maker. Explica cómo capturar imágenes y videos de la pantalla, agregar leyendas, y editar videos mediante la adición de efectos, transiciones y audio. También describe cómo preparar los archivos de imagen y sonido necesarios antes de comenzar a editar el video en Movie Maker.
Este documento presenta tres preguntas de selección múltiple diseñadas por un estudiante como parte de una tarea sobre programación de computadores. La primera pregunta trata sobre el objetivo principal del tutor en el video. La segunda pregunta trata sobre el orden correcto de los pasos fundamentales para programar. La tercera pregunta define lo que es un algoritmo dentro del área de la computación.
Este documento presenta el código de un programa en Java que invierte cadenas. El programa solicita al usuario ingresar una cantidad de palabras y luego ingresa cada palabra. Las palabras originales se almacenan en una matriz y luego se invierten almacenándolas en otra matriz. Finalmente, el programa imprime las palabras invertidas.
Este documento presenta un manual sobre análisis y diseño de algoritmos. Incluye una introducción general sobre el curso y sus objetivos, así como capítulos sobre conceptos básicos de algoritmos, análisis de eficiencia, estrategias de diseño y ejemplos de algoritmos comunes como ordenamiento, búsqueda y teoría de grafos. El manual provee una guía para el curso y servirá como apoyo complementario a las clases teóricas.
El documento describe varios sistemas de interacción hombre-máquina como cajeros automáticos y máquinas expendedoras de yogurt. Explica cómo los usuarios perciben y actúan sobre estos sistemas, como insertar tarjetas, ingresar claves, seleccionar opciones, extraer dinero u obtener productos. También analiza problemas ergonómicos como la ubicación de botones, tamaño de letras en pantallas, y coherencia entre indicaciones y funciones disponibles.
Educación virtual vs educacion presencialfloresnegras
El documento compara la educación virtual y presencial. La educación virtual permite flexibilidad en el tiempo y lugar de aprendizaje mediante el uso de tecnologías. Sin embargo, puede fomentar la pasividad del estudiante. La educación presencial facilita la interacción entre profesor y estudiantes, pero no es flexible y puede excluir a algunos. Ambos métodos tienen ventajas como desventajas.
El documento define y describe las características de un ensayo. Explica que un ensayo es un escrito breve que presenta una interpretación personal de un tema de una manera libre y subjetiva. Los ensayos pueden ser literarios, científicos o de otro tipo, dependiendo del tema y enfoque. El documento también discute los diferentes tipos de ensayos y ofrece consejos sobre cómo elegir un tema y escribir un ensayo.
Este documento describe los pasos para diseñar un sistema de costos de calidad en una empresa de producción de embutidos. Primero, se debe obtener el compromiso de la gerencia y formar un equipo interdisciplinario. Luego, se identifican y clasifican los costos de calidad, se calculan usando técnicas como partidas contables, y se realiza un seguimiento a través del análisis de datos e informes para tomar acciones de mejora.
Este documento contiene un índice de dos diapositivas con contenido para un ejercicio guiado. La primera diapositiva presenta el contenido inicial y la segunda diapositiva continúa con más contenido para el ejercicio.
Educacion virtual vs educacion presencialfloresnegras
La educación virtual permite ajustar el aprendizaje al horario del estudiante y facilita el acceso a la enseñanza desde cualquier lugar mediante herramientas tecnológicas. Sin embargo, puede conducir a la pasividad del estudiante y presentar dificultades técnicas. La educación presencial fomenta una mayor interacción entre el profesor y los estudiantes, pero requiere horarios y desplazamientos rígidos que no se ajustan a todos. Ambos modelos presentan ventajas y desventajas dependiendo
El documento discute las causas históricas de la discriminación de las mujeres basada en la percepción errónea de que eran menos inteligentes que los hombres. Explica que aunque existen pequeñas diferencias promedio en algunas habilidades cognitivas influenciadas por hormonas, tanto hombres como mujeres son igualmente capaces intelectualmente cuando reciben el mismo entrenamiento y aprendizaje. La inteligencia no es una cualidad simple sino que está compuesta por múltiples habilidades.
La revolución francesa derrocó al antiguo régimen monárquico y estableció una república. Eventos clave incluyen la toma de la Bastilla en 1789 por parte del pueblo de París, la declaración de los Derechos del Hombre y del Ciudadano, y la ejecución del rey Luis XVI en 1793. Napoleón Bonaparte se convirtió en cónsul y luego emperador, poniendo fin al periodo revolucionario pero conservando muchos de sus principios.
Este documento resume la Revolución Francesa entre 1789 y 1799. Comenzó con el pueblo francés rebelándose contra el antiguo régimen y la monarquía debido a la crisis financiera y desigualdad social. Tomaron la Bastilla y declararon una asamblea constituyente. Luego abolieron los privilegios de la nobleza, declararon los derechos humanos y establecieron una monarquía constitucional. Más tarde, la convención proclamó la república y ejecutó al rey. Napoleón llegó al poder a través
Este documento contiene 20 oraciones que incluyen diferentes tipos de oraciones subordinadas sustantivas introducidas por que, quien y lo que. Estas oraciones subordinadas funcionan como sujeto, complemento directo u otros complementos oracionales de las oraciones principales.
Este documento presenta un plan de estudios para Lengua y literatura castellana de 4o de ESO. Incluye 10 temas sobre diferentes aspectos gramaticales como la narración, descripción, diálogo y oraciones. Cada tema cubre conceptos gramaticales específicos y actividades para practicar. Los temas también cubren diferentes movimientos y autores literarios españoles como el Romanticismo, Realismo y generaciones literarias del siglo XX.
El plan de auditoría describe una auditoría de dos días del proceso de distribución de una empresa. Evaluará el cumplimiento de los procedimientos, identificará fallas e incluirá entrevistas, observaciones y revisión de documentos. El equipo auditor verificará que el sistema de gestión cumpla con varias normas incluyendo ISO 9001, ISO 14001, BPM y HACCP.
El documento describe una plataforma llamada Ventureka que pretende conectar emprendedores con inversores de manera más eficiente. La plataforma ofrecerá servicios profesionales para ayudar a los emprendedores a crear startups sólidas y atraer inversores. El modelo de negocio se basa en una membresía gratuita con servicios adicionales de pago. Se espera alcanzar el punto de equilibrio en el tercer año y generar una tasa interna de retorno del 45% para los inversores.
Arley procedimiento para el diseño de un sistema de costos de calidadcostosyauditorias
El documento describe los pasos para diseñar un sistema de costos de calidad, incluyendo 1) planificación con compromiso gerencial y un equipo de trabajo, 2) ejecución mediante la identificación, clasificación y cálculo de costos de calidad, y 3) seguimiento a través del análisis de datos, informes e identificación de causas para tomar acciones.
Este documento describe el sistema operativo Windows 7. Explica que un sistema operativo es el programa más importante de una computadora y realiza tareas básicas como reconocer el teclado y enviar información a la pantalla. Luego describe las funciones de un sistema operativo como la administración de tareas, usuarios y recursos. Finalmente, detalla las características, ediciones y requisitos de hardware de Windows 7.
1. El documento presenta los orígenes y evolución de la planeación estratégica desde tiempos antiguos hasta la actualidad, incluyendo pensadores como Sun Tzu, Baidaba y Aníbal Barca.
2. Explica que la planeación estratégica se formalizó en las empresas en la década de 1950 para hacer frente a un entorno cambiante y complejo.
3. Destaca que la planeación estratégica es un proceso que permite a las organizaciones prepararse para el futuro y orientar sus esfuerzos hacia metas realistas.
Este documento describe los pasos para diseñar e implementar un sistema de costos de calidad en una organización, incluyendo: 1) definir los objetivos y alcance, 2) identificar los tipos de costos de calidad, 3) calcular los costos de la calidad usando diferentes métodos, y 4) realizar un seguimiento del sistema mediante el análisis de datos e informes periódicos para mejorar continuamente la calidad.
La propuesta busca implementar conceptos aprendidos en una maestría en la asignatura Programación 1 que el autor imparte. La propuesta utilizaría nuevas tecnologías de manera viable considerando las capacidades de los estudiantes y los recursos disponibles. El objetivo es desarrollar destrezas de diseño e implementación de algoritmos usando un lenguaje de programación.
Este documento presenta el programa formativo de la asignatura Fundamentos de Programación dictada en la Universidad Católica de Santa María. Incluye la identificación académica de la asignatura, su lineamiento académico profesional, y la programación por fases de aprendizaje. La asignatura pertenece a la carrera de Ingeniería de Sistemas y busca capacitar a los estudiantes en la resolución de problemas mediante la programación orientada a objetos utilizando Java. El programa se estructura en tres fases que abarcan tem
Se propone desarrollar un Sistema Multiagente de Razonamiento Basado en Casos para asesorar a estudiantes en problemas de lógica de programación, como declaraciones, ciclos y llamadas a funciones. El objetivo principal es ayudar a los estudiantes a aprender lógica de programación de forma más rápida y colaborativa, aliviando la carga de trabajo de los profesores.
Este documento describe el diseño de un software educativo para enseñar genética a estudiantes de un instituto. Incluye una introducción al proyecto, un análisis del problema actual de enseñanza, objetivos, requerimientos y diagramas para el desarrollo del software como casos de uso y clases. El software busca facilitar el aprendizaje de conceptos genéticos a través de actividades interactivas para reemplazar la falta de un laboratorio.
Este documento describe el diseño de un software educativo para enseñar genética a estudiantes de un instituto. Incluye una introducción al proyecto, un análisis del problema actual de enseñanza, objetivos, requerimientos y diagramas para el desarrollo del software como casos de uso y clases. El software busca facilitar el aprendizaje de conceptos genéticos a través de actividades interactivas para reemplazar la falta de un laboratorio.
Este documento presenta el diseño de un proyecto para desarrollar un software educativo para enseñar genética a estudiantes de un instituto. El software utilizará diferentes técnicas como UML, DAO y JDBC para conectarse a una base de datos MySQL y así facilitar el aprendizaje de conceptos genéticos como las leyes de Mendel de manera interactiva.
El documento presenta una serie de boletines de ejercicios de programación en Java que abordan temas como variables, condicionales, bucles, tablas y funciones. Cada boletín contiene varios ejercicios resueltos de manera didáctica sobre un tema concreto para facilitar la comprensión de los conceptos básicos de programación.
El documento presenta una serie de boletines de ejercicios de programación en Java que abordan temas como variables, condicionales, bucles, tablas y funciones. Cada boletín contiene varios ejercicios resueltos de manera didáctica sobre un tema concreto para ayudar al aprendizaje de la programación.
El documento presenta una serie de boletines de ejercicios de programación en Java que abordan temas como variables, condicionales, bucles, tablas y funciones. Cada boletín contiene varios ejercicios resueltos de manera didáctica sobre un tema concreto para facilitar la comprensión de los conceptos básicos de programación.
Este documento presenta un libro titulado "Ejercicios de Programación en Java: Condicionales, Bucles, Tablas y Funciones". El libro contiene seis boletines de ejercicios resueltos sobre diferentes temas de programación en Java como variables, condicionales, bucles, tablas y funciones. Cada boletín se centra en un tema específico y los ejercicios van aumentando gradualmente su dificultad a lo largo del libro. El objetivo del libro es que el lector aprenda conceptos de programación
Este documento presenta el libro "Ejercicios de Programación en Java: Condicionales, Bucles, Tablas y Funciones" que contiene una serie de boletines con ejercicios de programación resueltos en Java para afianzar conocimientos sobre condicionales, bucles, tablas y funciones. El libro incluye una introducción y 6 boletines de ejercicios con dificultad creciente sobre diferentes temas de programación.
Este documento presenta un libro titulado "Ejercicios de Programación en Java: Condicionales, Bucles, Tablas y Funciones". El libro contiene seis boletines de ejercicios resueltos sobre diferentes temas de programación en Java como variables, condicionales, bucles, tablas y funciones. Cada boletín se centra en un tema específico y los ejercicios van aumentando gradualmente su dificultad a lo largo del libro. El objetivo del libro es que el lector aprenda conceptos de programación
Este documento presenta el libro "Ejercicios de Programación en Java: Condicionales, Bucles, Tablas y Funciones" que contiene una serie de boletines con ejercicios de programación resueltos en Java para afianzar conocimientos sobre condicionales, bucles, tablas y funciones. El libro incluye una introducción y 6 boletines de ejercicios con dificultad creciente sobre diferentes temas de programación.
Este documento presenta un libro titulado "Ejercicios de Programación en Java: Condicionales, Bucles, Tablas y Funciones". El libro contiene seis boletines de ejercicios resueltos sobre diferentes temas de programación en Java como variables, condicionales, bucles, tablas y funciones. Cada boletín presenta varios ejercicios sobre un tema específico con el objetivo de que el lector practique y afiance sus conocimientos de programación mediante la resolución de ejercicios.
Este documento presenta un libro titulado "Ejercicios de Programación en Java: Condicionales, Bucles, Tablas y Funciones". El libro contiene seis boletines de ejercicios resueltos sobre diferentes temas de programación en Java como variables, condicionales, bucles, tablas y funciones. Cada boletín presenta varios ejercicios sobre un tema específico con el objetivo de que el lector practique y afiance sus conocimientos de programación mediante la resolución de ejercicios.
Este documento presenta el libro "Ejercicios de Programación en Java: Condicionales, Bucles, Tablas y Funciones" que contiene una serie de boletines con ejercicios de programación resueltos en Java para afianzar conocimientos sobre condicionales, bucles, tablas y funciones. El libro incluye una introducción y 6 boletines de ejercicios con dificultad creciente sobre diferentes temas de programación.
Este documento presenta un libro titulado "Ejercicios de Programación en Java: Condicionales, Bucles, Tablas y Funciones". El libro contiene 6 boletines de ejercicios resueltos sobre diferentes temas de programación en Java como variables, condicionales, bucles, tablas y funciones. Cada boletín aumenta gradualmente la dificultad de los ejercicios. El objetivo del libro es que los lectores aprendan conceptos de programación a través de la práctica de resolver ejercicios paso a paso
Este documento presenta una colección de ejercicios de programación en Java resueltos divididos en boletines temáticos. El primer boletín cubre temas básicos como variables, condicionales y bucles e incluye ejercicios como calcular las soluciones de una ecuación de segundo grado, el área de un círculo y comparar números. Cada ejercicio se explica de forma didáctica paso a paso para facilitar la comprensión de los conceptos de programación.
Este documento presenta información sobre la asignatura Programación I impartida en la Universidad Técnica de Manabí. Incluye la misión y visión de la universidad y facultad, el perfil del docente, y la programación detallada de la asignatura con unidades temáticas, contenidos, estrategias de aprendizaje y criterios de evaluación. La asignatura busca que los estudiantes desarrollen la lógica de programación para resolver problemas utilizando pseudocódigo y diagramas de flujo.
Este documento presenta una colección de ejercicios de programación en Java para practicar conceptos como condicionales, bucles, tablas y funciones. Está dividido en seis boletines que abordan cada tema de forma progresiva mediante la resolución guiada de problemas. El objetivo es que el lector aprenda a programar desarrollando la lógica necesaria independientemente del lenguaje utilizado.
1. Universidad Mayor de San Andr´se
Facultad de Ciencias Puras y Naturales
Carrera de Inform´tica
a
Fundamentos de la Programaci´n
o
Jorge Humberto Ter´n Pomier
a
<teranj@acm.org>
La Paz - Bolivia, Diciembre 2006
3. Prefacio
Motivaci´n
o
Los conceptos presentados se estudian en muchas de las materias del
pregrado de la carrera de inform´tica, con el rigor necesario. Sin embargo,
a
en mi experiencia docente he podido ver que hay muchos estudiantes que
carecen de elementos pr´cticos con los que puedan aplicar directamente los
a
conceptos aprendidos y lo que se pretende es cubrir este vac´ıo.
El presente texto trata de introducir los conceptos de programaci´n, a
o
estudiantes de pregrado con un enfoque nuevo.
Para una adecuada compresi´n de la tem´tica presentada en el libro, el
o a
lector debr´ tener alguna experiencia en el desarrollo de programas. El libro
a
no pretende ense˜ar a codificar programas, sino a resolver problemas.
n
Contenido
Se presentan en el cap´ ıtulo 1, los conceptos de algor´
ıtmica elemental con
el prop´sito de introducir a los estudiantes, al concepto de la eficiencia de los
o
programas.
El cap´
ıtulo dos introduce los conceptos de an´lisis de algoritmos con una
a
serie de ejercicios aplicados. Se incluyen algunos laboratorios que tienen el
prop´sito de que, los estudiantes asimilen estos conceptos en forma experi-
o
mental.
El cap´
ıtulo tres introduce el concepto de la teor´ de n´meros, introdu-
ıa u
ciendo las librer´ de Java. Se muestran ejemplos de n´meros grandes y
ıas u
aplicaciones en la criptograf´ ıa.
El cap´
ıtulo 4 trata de la escritura de programas con miras a la prueba del
c´digo. En este cap´
o ıtulo se introduce un concepto que es el dise˜o por con-
n
iii
4. iv
tratos y la forma de aplicar en Java. Aunque este concepto fue introducido
inicialmente en el lenguaje Eifel, actualmente tiene mucho inter´s en el de-
e
sarrollo de aplicaciones. El texto no trata de trabajar en conceptos de l´gica
o
formal en su totalidad, lo que propone es una introducci´n a estos conceptos
o
para facilitar la prueba del c´digo en forma din´mica.
o a
El cap´
ıtulo 5 complementa el cap´ ıtulo 4 con conceptos de clasificaci´n y
o
b´squeda . Se introducen laboratorios y las bibliotecas Java para clasificar.
u
El cap´ıtulo 6 est´ orientado a explicar como se encara la programaci´n
a o
de problemas de combinatoria b´sica. a
El cap´
ıtulo 7 explica como utilizar las librer´ del lenguaje Java y como
ıas
resolver problemas con pilas, listas enlazadas, conjuntos, ´rboles y colas de
a
prioridad.
EL cap´ ıtulo 8 introduce al estudiante a los problemas de retroceso (bac-
tracking) con problemas t´ ıpicos, como recorrido de grafos y permutaciones.
El cap´
ıtulo 9 introduce a la geometr´ computacional. Muestra como cons-
ıa
truir una librer´ de rutinas b´sicas para desarrollar aplicaciones relacionadas
ıa a
a la geometr´ y muestra las librer´ Java as´ como las posibilidades que se
ıa ıas ı
tienen con las mismas.
El lenguaje que se escogi´ fue el Java, primero porque la formaci´n
o o
est´ orientada a la programaci´n orientada a objetos. Segundo porque el
a o
lenguaje es de amplia utilizaci´n en las empresas y en la educaci´n.
o o
Los enunciados orientados a la programaci´n fueron tomados de los con-
o
cursos de programaci´n, fueron traducidos al espa˜ol manteniendo los datos
o n
de entrada y salida en ingl´s. Esto se hizo para permitir a los interesados
e
resolver los problemas y poder validar sus respuestas con el Juez en L´ ınea
de Valladolid, en su p´gina web http://acm.uva.es. Estos ejercicios llevan
a
adelante el n´mero de problema del Juez en L´
u ınea de Valladolid.
Aplicaci´n en el aula
o
Esta tem´tica puede aplicarse en el transcurso de un semestre en clases
a
te´ricas, pr´cticas y de laboratorio.
o a
Los laboratorios proponen ejercicios que tienen la finalidad de evaluar
experimentalmente la ejecuci´n de los algoritmos. Esto permite que los estu-
o
diantes obtengan una vivencia de los resultados te´ricos.
o
Se puede aplicar en una clase de teor´ de dos per´
ıa ıodos y una segunda
clase que ser´ de ejercicios o laboratorio.
ıa
5. v
Contenido del CD
El CD adjunto contiene los programas presentados en el texto. Hay que
aclarar que todos han sido codificados utilizando el compilador Java 1.5 de
Sun Microsystems. El cap´ ıtulo 4 relacionado a JML fue codificado con la
versi´n 1.4, dado que a la fecha de la redacci´n de la obra no estaba disponible
o o
una versi´n de JML que funcionara con la versi´n 1.5.
o o
Agradecimientos
Quiero agradecer a mi esposa, a mis hijos por los aportes realizados y
finalmente al Dr. Miguel Angel Revilla por dejarme reproducir ejercicios del
Juez en L´ınea.
Lic. Jorge Ter´n Pomier, M.Sc.
a
13. Cap´
ıtulo 1
Algor´
ıtmica elemental
1.1. Introducci´n
o
En este cap´ıtulo empezamos el estudio de los algoritmos. Empezaremos
definiendo algunos t´rminos tales como algoritmo, problema, instancia, efi-
e
ciencia e investigaremos m´todos para probar la eficiencia de los mismos.
e
Existen m´todos formales para realizar pruebas rigurosas sobre la correc-
e
ci´n de los programas ´sta tem´tica est´ fuera del alcance del texto pero
o e a a
ser´ mencionada m´s adelante solo como referencia.
a a
1.2. Algoritmo
Definimos como algoritmo a un conjunto de pasos necesarios para re-
solver un problema ya sea manualmente o por m´todos mecanizados que,
e
son los m´s usuales en la actualidad. El concepto de algoritmos fue definido
a
inicialmente por el matem´tico Persa Al-Khowˆrizmˆ en el siglo diecinueve.
a a ı
La ejecuci´n de un algoritmo no debe incluir procedimientos intuitivos o
o
que requieran creatividad. Por ejemplo, una receta de cocina puede denomi-
narse un algoritmo si contiene las instrucciones precisas para preparar algo,
siempre y cuando no tenga detalles tales como sal al gusto, o cocinar hasta
que est´ suave, que son apreciaciones subjetivas del que prepara la receta.
e
Debemos indicar que los algoritmos deben cumplir un requisito funda-
mental y es que todo algoritmo debe terminar en un n´mero finito de pasos.
u
Si consideramos el sistema operativo veremos que no es un algoritmo porque
no termina nunca, dado que est´ en un ciclo infinito.
a
1
14. 2 1. ALGOR´
ITMICA ELEMENTAL
Podemos citar algunos ejemplos de algoritmos conocidos, el m´todo de
e
multiplicar que aprendimos en la escuela, el algoritmo para verificar si un
n´mero es primo y muchos otros.
u
1.3. Problemas e instancias
Si pensamos los procedimientos para multiplicar n´meros que conocemos
u
veremos que hay varias formas de resolver el problema de multiplicaci´n. o
Tenemos los m´todos que aprendimos en la escuela, m´todos por divisi´n y
e e o
multiplicaci´n por 2 denominado multiplicaci´n a la rusa y otros. ¿Cu´l de
o o a
´stas posibles soluciones hay que implementar? Esta decisi´n corresponde a
e o
un ´rea muy desarrollada en el campo de la inform´tica denominada an´lisis
a a a
de algoritmos.
Una instancia particular ser´ por ejemplo multiplicar el n´mero 123 por
ıa u
el 4567 pero un algoritmo debe ser capaz de funcionar correctamente no solo
en una instancia del m´todo sino m´s bien en todas las instancias posibles.
e a
Para demostrar que un algoritmo es incorrecto, es suficiente demostrar
que es incorrecto para una instancia . As´ como es dif´ probar que un
ı ıcil
teorema es correcto tambi´n es dif´ probar que un algoritmo es correcto.
e ıcil
Existen limitaciones propias de las computadoras que ponen restriccio-
nes a los algoritmos. Estas pueden ser debido al tama˜o de los n´meros,
n u
espacio de memoria o almacenamiento. En el an´lisis de los algoritmos, se
a
trata de analizarlos en forma abstracta inicialmente, pero en el transcurso
del texto tambi´n tocaremos aspectos espec´
e ıficos sobre la implementaci´n y
o
la eficiencia de los mismos.
1.4. Eficiencia
Cuando tenemos que resolver un problema pueden existir muchos algo-
ritmos disponibles. Obviamente quisi´ramos escoger el mejor. De aqu´ nos
e ı
viene la pregunta ¿Cu´l es mejor?
a
Si tenemos un problema sencillo con algunas pocas instancias escogemos,
lo m´s f´cil y nos despreocupados de la eficiencia.
a a
Para analizar ´sto tenemos dos m´todos. El m´todo emp´rico tambi´n
e e e ı e
llamado a posteriori, consiste en programar todos los m´todos y probarlos
e
con diferentes instancias y con la ayuda de la computadora analizamos y
15. 1.4. EFICIENCIA 3
escogemos alguno.
El segundo llamado m´todo apriori es el an´lisis te´rico del algoritmo,
e a o
que con la ayuda de las matem´ticas podemos determinar la cantidad de los
a
recursos requeridos por cada algoritmo en base del tama˜o de las instancias
n
consideradas.
El tama˜o de una instancia normalmente est´ definida por el n´mero de
n a u
bits, en el caso de un grafo por el n´mero de nodos y v´rtices, o en otros
u e
por el n´mero de elementos a procesar. La ventaja del m´todo te´rico es que
u e o
no depende de la computadora, lenguaje de programaci´n o implementaci´n
o o
particular.
En el tratamiento del tema utilizaremos en algunos casos un m´todo e
h´ıbrido donde se determinar´ la eficiencia en forma te´rica y se hallar´n los
a o a
valores num´ricos en forma experimental.
e
Retornando a la pregunta debemos indicar que la eficiencia se mide en
tiempo. Para esto diremos que un programa toma un tiempo del orden t(n)
para una instancia de tama˜o n. M´s adelante trataremos un t´rmino m´s
n a e a
riguroso que es la notaci´n asint´tica.
o o
Si tratamos el tiempo en segundos uno podr´ pensar si tengo una m´qui-
ıa a
na m´s r´pida el tiempo ser´ menor. ¿C´mo es que este m´todo te´rico llega
a a a o e o
a ser efectivo?
Consideremos que el algoritmo toma un tiempo en segundos t1 (n) para
una m´quina en particular y t2 (n) para otra. Para un n´mero n suficiente-
a u
mente grande podemos hallar unas constantes a y b tales que at(n) = bt(n)
esto nos dice que cualquier ejecuci´n del algoritmo est´ acotado por una
o a
funci´n t(n) y existen unas constantes positivas de proporcionalidad que nos
o
dan el tiempo. Esto indica que si cambiamos de equipo podemos ejecutar el
algoritmo 10 o 100 veces m´s r´pido y que este incremento est´ dado solo
a a a
por una constante de proporcionalidad.
La notaci´n asint´tica dice que un algoritmo toma un tiempo del orden
o o
de, en funci´n del tama˜o de la instancia . Existen algoritmos que ocurren
o n
muy frecuentemente y ameritan tener un nombre que a su vez se denominan
tasas de crecimiento.
Se denominan algoritmos:
Constantes los que cuyo tiempo de proceso no depende del tama˜o de
n
la instancia.
Lineales a los que toman tiempos proporcionales a n.
16. 4 1. ALGOR´
ITMICA ELEMENTAL
Cuadr´ticos a los que toman tiempos proporcionales a n2 .
a
C´bicos a los que toman tiempos proporcionales a n3 .
u
Polinomiales o exponenciales a los que toman tiempos proporcionales
a n3 , nk .
Logar´
ıtmicos los proporcionales a log n.
Exponenciales los que toman tiempos proporcionales a 2n .
A´n cuando es deseable siempre un algoritmo m´s eficiente desde el punto
u a
de vista te´rico podemos en muchos casos escoger en la implementaci´n otro,
o o
dado que las constantes ocultas pueden ser muy grandes y no llegar a ser tan
eficientes para las instancias que deseamos procesar. La figura 1.1 representa
las ordenes magnitud de los algoritmos.
1.5. Qu´ considerar y qu´ contar
e e
Consideremos por ejemplo que queremos hallar el m´ximo de tres n´meros
a u
a, b, c. Para resolver ´sto escribimos el siguiente c´digo:
e o
maximo=0
maximo=Max(a,b)
maximo=Max(c,maximo)
Max (a,b)
if a > b
return a
else
return b
Se puede ver que se requieren exactamente dos comparaciones para deter-
minar el valor m´ximo de a, b, c. Si escribi´ramos Max(Max(a,b),c) tambi´n
a e e
se realizar´ dos comparaciones. Este mismo algoritmo lo podemos escribir
ıan
como sigue:
maximo=0
if (a > b)
17. ´ ´
1.5. QUE CONSIDERAR Y QUE CONTAR 5
Figura 1.1: Ordenes de magnitud de algoritmos
if(a > c)
maximo = a
else
maximo = c
else
if b > c
maximo = b
else
maximo = c
Vemos que a´n cuando hemos codificado m´s comparaciones en la ejecu-
u a
ci´n solo se ejecutan dos como el caso anterior. Se hace necesario establecer
o
18. 6 1. ALGOR´
ITMICA ELEMENTAL
que es lo que debemos considerar en los programas, ´sto hace necesario defi-
e
nir, lo que se entiende por operaciones elementales.
1.5.1. Operaciones elementales
Es una operaci´n cuyo tiempo de ejecuci´n est´ acotado por una constante
o o a
que solo depende de una implementaci´n particular como ser la m´quina, el
o a
lenguaje de programaci´n, etc.
o
En el ejemplo que realizamos estaremos interesados en medir el n´mero de
u
comparaciones necesarias para hallar el m´ximo. El resto de las operaciones
a
las consideramos operaciones elementales.
En el caso de la suma de elementos de un vector lo que deseamos medir
es la cantidad de sumas realizadas para resolver el problema y las operacio-
nes de comparaci´n necesarias para implementar una soluci´n, se consideran
o o
operaciones elementales.
1.5.2. An´lisis del mejor caso, caso medio y peor caso
a
El tiempo que toma un algoritmo puede variar considerablemente en fun-
ci´n de diferentes instancias de un mismo tama˜o. Para comprender esto
o n
mejor consideremos el ejemplo del programa de clasificaci´n por inserci´n.
o o
inserci´n(t)
o
for i=1 to n
x= t[i]
j=i-1
while j > 0 and x<t[j]
t[j+1]=t[j]
j=j-1
t[j+1]=x
Consideremos un conjunto A en el cual queremos procesar el algorit-
mo de ordenar. Para ordenar A utilizar´ ıamos inserci´n(A). Si la instancia
o
A est´ previamente ordenada en forma ascendente podemos probar que el
a
tiempo de proceso es el ´ptimo porque solo inserta valores en el vector y no
o
realiza intercambios.
En el caso de que el vector estuviera ordenado en orden descendente por
cada elemento hay que recorrer todo el vector intercambiando los valores.
Este claramente es el peor comportamiento que podemos tener.
19. ´ ´
1.5. QUE CONSIDERAR Y QUE CONTAR 7
Si el vector estuviera ordenado en forma ascendente no realizar´ ning´n
ıa u
intercambio y este es el mejor caso en el que se puede estar.
Sin embargo si el vector estuviera desordenado en forma aleatoria el com-
portamiento se considera del caso medio.
Cuando el tiempo de respuesta de un problema es cr´ ıtico normalmente
analizamos el peor caso que es mucho m´s f´cil de analizar que el caso medio.
a a
Por lo tanto un an´lisis util de un algoritmo requiere un conocimiento a priori
a ´
de las instancias que vamos a procesar.
1.5.3. Ejercicios
1. Si deseamos verificar que un n´mero es primo, explique si lo que se
u
desea contar para hallar la eficiencia del algoritmo es: a) el n´mero de
u
d´
ıgitos b) el n´mero de divisiones que se deben realizar.
u
2. Indique que es lo que deber´ıamos contar en el caso de escribir un al-
goritmo para multiplicar dos n´meros a fin de hallar el n´mero de
u u
operaciones requeridas para completar el algoritmo.
3. Suponiendo que el tiempo de proceso de una instancia es un mili segun-
dos. ¿En qu´ porcentaje se incrementa el tiempo de proceso al doblar el
e
tama˜o de la instancia ? si el algoritmo es a) exponencial, b) logar´
n ıtmi-
co, c) cuadr´tico?
a
1.5.4. Laboratorio
Se quiere analizar el comportamiento del algoritmo de ordenar por el
m´todo de inserci´n en forma experimental. Para esto seguiremos los si-
e o
guientes pasos:
1. Codificar el algoritmo.
2. Crear una instancia ordenada en forma ascendente.
3. Tomar el tiempo de proceso para diferentes tama˜os de instancias.
n
4. Repetir el proceso para una instancia ordenada en forma descendente.
5. Luego para una instancia generada aleatoriamente.
6. Tabular los datos.
20. 8 1. ALGOR´
ITMICA ELEMENTAL
7. Interpretar los resultados.
Para realizar ´ste experimento construimos el siguiente programa Java:
e
import java.util.*;
public class Isort {
/**
* Rutina Principal para la prueba experimental del
* programa de ordenar por el m´todo de inserci´n
e o
*
* @param args
* 0 crear las instancias en forma descendente
* 1 crear las instancias en forma ascendente
* 2 crear las instancias en forma aleatoria
*/
public static void main(String[] args) {
int opcion = Integer.parseInt(args[0]);
int instanciaMaxima = 1000000;
long tiempoInicio, tiempoFin, tiempoTotal;
for (int i = 10; i < instanciaMaxima; i = i * 10) {
Arreglo arreglo = new Arreglo(opcion, i);
tiempoInicio = System.currentTimeMillis();
arreglo.Ordena();
tiempoFin = System.currentTimeMillis();
tiempoTotal = tiempoFin - tiempoInicio;
System.out.println("Tama~o de la instancia " + i
n
+ " Tiempo de proceso " + tiempoTotal);
}
}
}
class Arreglo {
int[] t = new int[100000];
Random generador = new Random();
int n;
21. ´ ´
1.5. QUE CONSIDERAR Y QUE CONTAR 9
Arreglo(int opcion, int n) {
this.n = n;
for (int i = 0; i < n; i++) {
switch (opcion) {
case 0:
t[i] = i;
break;
case 1:
t[i] = 10000 - i;
break;
case 2:
t[i] = generador.nextInt(10000);
}
}
}
void Ordena() {
int x, j;
for (int i = 1; i < n; i++) {
x = t[i];
j = i - 1;
while ((j > 0) && (x < t[j])) {
t[j + 1] = t[j];
j = j - 1;
t[j + 1] = x;
}
}
return;
}
}
El resultado de los tiempos de ejecuci´n, en mili segundos, obtenidos en
o
la prueba del programa se ven en el cuadro 1.1.
Como se ve el peor caso es cuando la instancia que creamos est´ ordenada
a
en forma descendente. El caso medio se da cuando el vector est´ ordenado
a
aleatoriamente. En diferentes ejecuciones del programa veremos que el tiempo
de proceso que se obtiene en el caso medio var´ Esto se debe a que los datos
ıa.
22. 10 1. ALGOR´
ITMICA ELEMENTAL
Tama˜o
n Ordenada Ordenada instancia
Instancia Ascendente Descendente Aleatoria
10 0 0 0
100 0 0 0
1000 0 20 10
10000 0 1722 861
100000 10 237622 110229
Cuadro 1.1: Tiempo de ejecuci´n en milisegundos
o
que se generan no est´n en el mismo orden. Situaci´n que no se da en las
a o
otras instancias generadas. Una buena aplicaci´n de ´ste c´digo se da en los
o e o
casos en que los conjuntos de datos a los que vamos aplicar el m´todo, est´n
e a
casi totalmente ordenados.
23. Cap´
ıtulo 2
An´lisis de algoritmos
a
2.1. Introducci´n
o
Para el an´lisis de los algoritmos es muy importante determinar la eficien-
a
cia de los mismos. Esto se logra a trav´s del c´lculo del tiempo de proceso o
e a
complejidad . Como no existen mecanismos normalizados para el c´lculo de
a
estos tiempos, solo nos referimos al tiempo tomado por el algoritmo multi-
plicado por una constante. A esto denominamos notaci´n asint´tica. Existen
o o
tres conceptos, la notaci´n omega, la notaci´n teta y la notaci´n O grande
o o o
simbolizadas por Ω, θ y O respectivamente. En el texto se enfocar´ al an´li-
a a
sis del tiempo de proceso con la notaci´n O. Se recomienda la bibliograf´
o ıa
[McC01] y [EH96]
2.2. Notaci´n orden de
o
La notaci´n orden de nos permite especificar la magnitud m´xima de
o a
una expresi´n. Sea por ejemplo una funci´n t(n) = 5n2 y podemos pensar
o o
que n es como el tama˜o de una instancia de un algoritmo dado. Ahora
n
supongamos que esta funci´n representa la cantidad de recursos que gasta el
o
algoritmo, ya sea el tiempo de proceso, almacenamiento de memoria u otros.
Las constantes solo representan valores de una implementaci´n dada y no
o
tienen que ver con el tama˜o de la instancia.
n
En este caso decimos que esta funci´n t(n) es del orden n2 dado que
o
solo est´ acotado por una constante. Esto se denomina O grande de t(n) y
a
matem´ticamente lo representamos como O(n2 ).
a
11
24. 12 ´
2. ANALISIS DE ALGORITMOS
2.2.1. Propiedades de O grande de n
Para aclarar lo que representa O grande de n describamos sus propieda-
des:
1. Regla del valor m´ximo. Dadas dos funciones f (n) y g(n) que pertene-
a
cen a los n´meros reales positivos incluyendo el cero
u
O(f (n) + g(n) = max(f (n), g(n))
por ejemplo si se tiene la funci´n t(n) = 5n3 + log n − n aplicando
o
la regla del valor m´ximo tenemos que O(t(n)) = max(5n3 , log n, −n)
a
3
cuyo valor es O(n ).
2. Igualdad de logaritmos. En la notaci´n O la expresi´n
o o
O(loga n) = O(logb n)
que, claramente es incorrecto en las matem´ticas, pero es correcta en
a
la notaci´n O.
o
Esto se demuestra aplicando la propiedad de los logaritmos para el
cambio de base loga n = logb n/logb a. Notamos que el denominador es
una constante y como en la notaci´n O no se escriben las constantes
o
queda demostrado.
3. Propiedad reflexiva. La notaci´n O es reflexiva dado que:
o
f (n) O(f (n))
4. Propiedad transitiva.
Sif (n) O(g(n))yg(n) O(h(n))entoncesf (n) O(h(n)).
5. Propiedades de l´
ımites.
f (n) +
a) si l´ n→∞
ım g(n)
⇒ f (n) O(g(n)) y g(n) O(f (n))
f (n)
b) si l´ n→∞
ım g(n)
= 0 ⇒ f (n) O(g(n)) pero g(n)¬ O(f (n))
c) si l´ n→∞ f (n) = +∞ ⇒
ım g(n)
f (n)¬ O(g(n)) pero g(n) O(f (n))
25. ´ ´
2.3. NOTACION ASINTOTICA CONDICIONAL 13
2.3. Notaci´n asint´tica condicional
o o
Muchos algoritmos son m´s f´ciles de analizar si restringimos nuestra
a a
atenci´n a instancias que cumplen alguna condici´n tales como ser una po-
o o
tencia de 2, ser de un tama˜o determinado. Consideremos por ejemplo, un
n
algoritmo cuyo resultado para n = 1 es t(n) = 1 y para otros valores to-
ma nt(n − 1). Este algoritmo se expresa como una soluci´n recursiva que se
o
escribe como sigue:
1 si n = 1,
T (n) =
nT (n − 1) en otros casos.
en las secciones siguientes estudiamos como resolver ´stas ecuaciones deno-
e
minadas recurrencias.
2.4. Notaci´n omega
o
La notaci´n omega que la representamos por Ω se utiliza para representar
o
la cota inferior de un algoritmo. Por ejemplo el algoritmo de ordenamiento
por inserci´n demora O(n2 ) en el peor caso sin embargo la cota inferior para
o
los programas de clasificaci´n que trabajan unicamente por comparaciones
o ´
es Ω(n log n) por lo tanto podemos decir que no existen algoritmos de clasi-
ficaci´n que en su peor caso sean mejores que Ω(n log n).
o
Sea t(n) Ω(f (n)) si existe una constante real y positiva d tal que la re-
laci´n t(n) ≥ df (n) sea cierta para una cantidad infinita de valores de n, si
o
buscamos que la relaci´n se cumpla para un n´mero finito de valores de n,
o u
entonces f (n) es el l´
ımite inferior del algoritmo.
2.5. Notaci´n teta
o
Cuando analizamos un algoritmo estar´ ıamos muy satisfechos si nuestro
algoritmo estuviera acotado simult´neamente por Ω y O. Por esta raz´n se
a o
introduce la notaci´n θ. Decimos que un algoritmo es en θ(f (n)) o que f (n)
o
es de orden exacto si:
θ(f (n)) = O(f (n)) ∩ Ω(f (n))
26. 14 ´
2. ANALISIS DE ALGORITMOS
Esta notaci´n se utiliza muy poco y como podr´ apreciar tiene un mayor
o a
grado de dificultad. Comunmente se utiliza la notaci´n O y para mostrar la
o
relaci´n contra el mejor algoritmo posible usamos la notaci´n Ω.
o o
2.6. An´lisis de las estructuras de control
a
2.6.1. Secuenciales
Sean p1 y p2 dos fragmentos de un algoritmo y sean t1 y t2 los tiempos que
toman cada uno respectivamente. La regla de secuencias indica que el tiempo
de ejecuci´n de la secuencia p1 ; p2 toma un tiempo t1 + t2 . Por la regla del
o
valor m´ximo el tiempo es (max(O(t1 ), O(t2 )). Este an´lisis considera que
a a
p1 y p2 son independientes. Esto es que, el proceso p2 no depende de los
resultados de p1 .
2.6.2. Ciclos For
Consideremos el programa siguiente
for i = 1 to m
p(i)
En este programa no confundamos m con n que es el tama˜o de una instancia.
n
Si p(i) toma un tiempo constante t y no depende de i entonces este tiempo
se repetir´ m veces y denotamos esto como:
a
m m
t=t 1 = tm = O(m)
i=1 i=1
En un caso mas general donde t(i) no es constante y depende de i deber´
ıamos
calcular el resultado de la siguiente sumatoria:
m
t(i)
i=1
27. ´
2.6. ANALISIS DE LAS ESTRUCTURAS DE CONTROL 15
2.6.3. Llamadas recursivas
El an´lisis recursivo de un algoritmo es normalmente casi directo y una
a
simple inspecci´n normalmente nos da una ecuaci´n de recurrencia que re-
o o
presenta el comportamiento del mismo. Consideremos el problema de buscar
un elemento t en un arreglo a recursivamente
busca (n)
if n =0 return -1
else
if a[n]= t
return n
else
return busca(n-1)
En este algoritmo podemos ver que para los casos en que n es 0 el tiempo
que toma es una constante, cuando encuentra el valor tambi´n el tiempo es
e
una constante. En los otros casos depende del valor n − 1. Esto podemos
representar por una funci´n recurrente de la siguiente forma:
o
−1 si n = 0,
T (n) = 0 si a[n] = t,
T (n − 1) + h(n) en otros casos.
El valor de h(n) es el n´mero de operaciones elementales requeridas en cada
u
recursi´n. Podemos resolver esta recurrencia y demostrar que la soluci´n es
o o
O(n).
2.6.4. Ciclos while y repeat
Los ciclos while y repeat son mucho m´s dif´
a ıciles de analizar porque no
existe una forma de saber cuantas veces se va a ejecutar. Para terminar un
ciclo hay que probar alguna condici´n que nos dar´ un valor de termina-
o a
ci´n.Consideremos el c´digo siguiente :
o o
ejemplo(n)
i=0
while n>1
if par(n)
n=n/2
28. 16 ´
2. ANALISIS DE ALGORITMOS
i=i+1
else
n=3n/2
i=i+1
return i
En este ejemplo no podemos decidir a simple vista cuantas veces se ejecuta
la instrucci´n i = i + 1 se ve que cada vez que n es una potencia de 2 se
o
pasar´ por la parte par(n) y cuya cantidad de veces ser´ el log2 n. ¿Qu´ po-
a a e
demos decir cuando es impar?. ¿El algoritmo termina?. Estas interrogantes
las dejamos para el an´lisis del lector.
a
En muchos casos ser´ necesario aplicar la teor´ de probabilidades para
a ıa
poder determinar las veces que una instrucci´n se ejecuta. Si podemos deducir
o
una recurrencia a partir del algoritmo podemos hallar f´cilmente su O(n).
a
ejemplo(n)
i=0
while n>1
n=n/2
i=i+1
return i
En este ejercicio vemos que los valores que toma n son n, n/2, n/4... por
lo tanto podemos escribir esta recurrencia como
1 si n < 2,
T (n) =
T (n/2) + 1 en otros casos.
y luego de resolverla podemos indicar que el resultado es O(log n). Los
m´todos para resolver recurrencias se explicar´n m´s adelante.
e a a
2.6.5. An´lisis del caso medio
a
Consideremos el algoritmo de ordenar por el m´todo de inserci´n
e o
inserci´n(t)
o
for i=1 to n
x= t[i]
j=i-1
while j > 0 and x<t[j]
29. ´
2.6. ANALISIS DE LAS ESTRUCTURAS DE CONTROL 17
t[j+1]=t[j]
j=j-1
t[j+1]=x
De este algoritmo podemos ver que en el mejor caso, vale decir cuando los
datos vienen ordenados en forma ascendente, el tiempo es lineal y el peor
caso es de orden cuadr´tico que se da en el caso inverso.¿Cu´l es el com-
a a
portamiento en el caso promedio? Para resolver esta interrogante se hace
necesario conocer a priori la funci´n de distribuci´n de probabilidad de las
o o
instancias que, el algoritmo debe resolver. La conclusi´n del an´lisis del caso
o a
medio depende de esta suposici´n.o
Supongamos que todas las permutaciones posibles de las instancias pue-
den ocurrir con la misma probabilidad para determinar el resultado en prome-
dio debemos sumar el tiempo que, toma ordenar cada uno de las n! posibles
instancias. Definamos el rango parcial de T [i] como la posici´n que, ocupar´
o ıa
en el arreglo si estuviera ordenado. Supongamos que 1 ≤ i ≥ n y estamos
ingresando en ciclo while, T [i − 1] contiene los mismos elementos que antes,
dado que T [i] todav´ no se ha insertado. Este rango parcial estar´ entre 1 y
ıa a
i y lo llamaremos k.
La cantidad de veces que los elementos del vector se desplazar´n es i −
a
k + 1 porque los elementos hasta i − 1 ya est´n ordenados. Como tenemos i
a
elementos la probabilidad que i ocurra es 1/i de aqu´ calculamos el tiempo
ı
que toma el ciclo while
i
1 i+1
ci = (i − k + 1) =
i k=1
2
como tenemos n elementos en el ciclo principal debemos sumar los tiempos
de las instrucciones interiores dando
n n n n
i+1 i 1 n2 + 3n
ci = = + =
i=1 i=1
2 i=1
2 i=1
2 4
2.6.6. An´lisis amortizado
a
El an´lisis del peor caso es muchas veces muy pesimista. Supongamos que
a
tenemos un programa con un vector que almacena valores y queremos en-
contrar el valor m´ınimo. Si el vector est´ ordenado devolver el primero toma
a
un tiempo constante. Supongamos que enviamos a esta rutina un n´mero u
30. 18 ´
2. ANALISIS DE ALGORITMOS
y si existe devuelve el valor m´
ınimo y si no existe inserta el valor y luego
devuelve el valor m´ ınimo. ¿Cu´nto tiempo toma el algoritmo? En el peor
a
caso toma el tiempo de insertar y de buscar, sin embargo muchas veces so-
lamente tomar´ el tiempo de buscar. Para entender el tiempo amortizado de
a
este algoritmo podemos pensar que, en cada b´squeda ahorramos un poco
u
para gastarlo cuando tengamos que realizar un inserci´n. Esto nos muestra
o
claramente que el tiempo amortizado depende de la probabilidad de que ten-
gamos inserciones y cual la probabilidad de que tengamos solo b´squedas.
u
La esperanza matem´tica es una buena medida para estos an´lisis.
a a
2.7. Soluci´n de recurrencias
o
Como ya vimos los algoritmos se pueden representar en forma de ecua-
ciones recurrentes aqu´ explicaremos tres m´todos de soluci´n, substituci´n
ı e o o
o adivinaci´n, iterativos y un m´tdo general para casos especiales.
o e
2.7.1. M´todo por substituci´n
e o
El m´todo de substituci´n que bien puede llamarse m´todo por adivi-
e o e
naci´n se basa en adivinar de que forma es la soluci´n, luego aplicamos la
o o
hip´tesis inductiva para valores menores y demostrando que ´sto se cum-
o e
ple, decimos que nuestra suposici´n es correcta. Consideremos el siguiente
o
ejemplo:
1 n = 1,
T (n) = (2.7.1)
2T (n/2) + n otros casos.
La recurrencia 2.7.1 puede escribirse como la ecuaci´n
o
2T (n/2) + n (2.7.2)
Primero buscamos una soluci´n y suponemos que el tiempo asint´tico O(n)
o o
de esta ecuaci´n es O(n log n). Debemos probar que ´sta es una funci´n para
o e o
la cual todos los valores de T (n) son menores con lo cual se demuestra que
es una cota superior.
Suponiendo que esta soluci´n es aplicable a n/2 para una constante arbi-
o
31. ´
2.7. SOLUCION DE RECURRENCIAS 19
traria c en la ecuaci´n 2.7.2 tenemos:
o
n n
T (n) ≤ 2c( log ) + n
2 2
n
= cn log + n
2
= cn log n − cn log 2 + n
= cn log n − cn + n
≤ n log n para c ≥ 1
Con lo cual estar´ probada nuestra suposici´n. Como ver´ en algunas con-
ıa o a
diciones es dif´ de probar esta recursi´n. Por ejemplo, consideremos que
ıcil o
T (1) = 1 reemplazando nuestra hip´tesis se tiene T (1) = c1 log 1 que da
o
T (1) = c0 y para cualquier valor de c vemos que no es posible probar nues-
tra suposici´n por lo que, es usual imponer algunas restricciones tales como
o
probar desde T (2).
Realizar suposiciones acertadas es muy complicado, por lo que se hace
necesario realizar diferentes pruebas con valores m´ximos y m´
a ınimos para
hallar la soluci´n. Lo que estamos realizando es una hip´tesis inductiva y en
o o
muchas ocasiones podemos agregar m´s constantes por ejemplo, T (n) ≤ cn−
a
b, el restar algunas constantes de los t´rminos de menor orden es considerada
e
por muchos como una soluci´n intuitiva.
o
Este m´todo es un problema, la cota superior probada no garantiza que
e
existe otra cota superior que sea menor a la probada. Consideremos por
ejemplo que se hubiese elegido n2 como una cota superior tambi´n se hubiera
e
2
probado cierta porque O(n log(n)) ∈ O(n ).
2.7.2. Cambio de variables
En muchos casos las soluciones tienen formas que no hemos visto antes
por lo que no podemos plantear la soluci´n. Consideremos la ecuaci´n:
o o
√
T (n) = 2T ( n) + log n
Podemos simplificar esta ecuaci´n reemplazando n por 2m que nos da
o
m
T (2m ) = 2T (2 2 ) + log 2m
m
T (2m ) = 2T (2 2 ) + m
32. 20 ´
2. ANALISIS DE ALGORITMOS
ahora reemplacemos T (2m ) por S(m)
m
S(m) = 2S( )+m
2
Esta soluci´n ya la conocemos y sabemos que es O(n log n) entonces reem-
o
plazando en esta respuesta las substituciones que hemos realizado
T (n) = T (2m ) = S(m) = O(m log m) = O(log n log log n).
2.7.3. Ejercicios
1. Muestre que la soluci´n de T (n) = T (n/2) + 1 es O(log n)
o
2. Muestre que la soluci´n de T (n) = T (n/2 + 17) + 1 es O(log n)
o
√
3. Resuelva la recurrencia T (n) = T ( n) + 1 realizando cambio de varia-
bles
2.7.4. M´todo iterativo
e
El m´todo iterativo es mucho mejor porque no requiere adivinanzas que,
e
pueden hacernos suponer verdaderos resultados err´neos. Pero a cambio se
o
requiere un poco m´s de ´lgebra. Consideremos la siguiente recursi´n:
a a o
1 n = 1,
T (n) =
T ( n ) + 1 otros casos.
2
para resolver ´sta vamos comenzar en T (n) y vamos a desarrollar la misma
e
n n
T (n) = T ( ) + 1 reemplazando n por
2 2
n
= T( ) + 2
4
n
= T( ) + 3
8
hasta hallar la forma general
n
= T( k) + k
2
cuando n = 1 termina y por lo tanto T (1) toma la forma de:
n
T (1) = 1 = k
2
33. ´
2.7. SOLUCION DE RECURRENCIAS 21
reemplazando tenemos:
T (n) = 1 + k = 1 + log n
de aqu´ sabemos que el tiempo asint´tico de esta recursi´n es O(log n). Re-
ı o o
solvamos con este m´todo la ecuaci´n 2.7.1
e o
1 n = 1,
T (n) =
2T ( n ) + n otros casos.
2
desarrollando la recursi´n tenemos
o
n
T (n) = 2T ( ) + n
2
n n
= 2(2T ( ) + ) + n
4 2
n n
= 4T ( ) + 2 + n
4 2
n
= 4T ( ) + 2n
4
n n
= 4(2T ( ) + ) + 2n
8 4
n
= 8T ( ) + 3n termina cuando
8
= 2k T (1) + kn
Este algoritmo termina cuando llegamos a T (1); donde toma el valor de 1
cuando n/2k = 1. Despejando el valor de k tenemos k = log n reemplazando:
T (n) = 2k + kn
= n + n log n
= O(n log n)
Ejemplo:
Dar las cotas superiores para T(n) en las siguiente recurrencia. Asumiendo
que T(n) es constante para n ≤ 1.
T (n) = T (n − 1) + n
Soluci´n:
o
Desarrollando la recursi´n tenemos:
o
T (n) = T (n − 2) + (n − 1) + n
= T (n − 3) + (n − 2) + (n − 1) + n
34. 22 ´
2. ANALISIS DE ALGORITMOS
que toma la forma de
n
i
i=1
resolviendo tenemos
n(n + 1)
2
2
por lo que la cota superior es O(n )
2.7.5. Ejercicios
1. Resolver T (n) = 3T (n/2) + n.
2. Resolver T (n) = T (n/3) + T (2n/3) + n.
3. Resolver T (n) = T (n − a) + T (a) + n
2.7.6. Teorema master
Existen muchas recursiones que tienen la forma
n
T (n) = aT ( ) + f (n) (2.7.3)
b
La ecuaci´n 2.7.3 es un caso t´
o ıpico de soluciones que aplican la t´cnica divide
e
y vencer´s donde a representa el n´mero de llamadas recursivas T (n/b) el
a u
tama˜o de las llamadas y f (n) el trabajo realizado en cada recursi´n. Esta
n o
ecuaci´n nos da las siguientes soluciones:
o
si f (n) = nlogb a− , ≥ 0 ⇒ O(nlogb a ),
si f (n) = nlogb a
⇒ O(nlogb a log n),
si f (n) = nlogb a+ , ≥ 0 ⇒ O(f (n)),
para polinomios donde
T (n) = (2.7.4)
f (n) = cnk se simplifica
si a > bk
⇒ O(nlogb a ),
si a = bk
⇒ O(nk log n),
si a < bk ⇒ O(nk )
La demostraci´n del teorema se puede consultar en la bibliograf´ [GB96]
o ıa
citada al final del texto.
Resuelva los siguientes ejercicios utilizando el teorema master:
35. ´
2.7. SOLUCION DE RECURRENCIAS 23
1.
n
T (n) = 2T ( ) + n
2
En este caso vea que a = 2, b = 2, k = 1 y f (n) = nk aplicando el
teorema estamos en el caso a = bk por lo que la soluciones es T (n) =
O(nk log n) = O(n log n)
2.
T (n) = 9T (n/3) + n
Veamos a = 9, b = 3, k = 1 por lo que a ≥ bk entonces la soluci´n es
o
log3 9
n = O(n2)
3.
T (n) = T (2n/3) + 1
Veamos a = 1, b = 2/3, k = 0 por lo que a = bk entonces la soluci´n es
o
O(nk log n) = O(log n)
Ejercicios
Resolver utilizando el teorema master.
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´n general de recurrencias lineales
o
Las recurrencias de la forma
a0 tn + a1 tn−1 + .... + ak tn−k = f (n) (2.7.5)
se denominan: ecuaci´n l´
o ıneal, homog´nea y de coeficientes constantes. Cuan-
e
do f (n) es 0 se denomina homog´nea y en otros casos no homog´nea. Una
e e
buena descripci´n de como resolver estas recurrencias pueden ver en los libros
o
de Grimaldi [Gri77] y Knuth [RLG94]
36. 24 ´
2. ANALISIS DE ALGORITMOS
Soluci´n de recurrencias homog´neas
o e
La soluci´n de una ecuaci´n t(n) puede representarse como la combinacion
o o
lineal de funciones por ejemplo c1 f (n) + c2 g(n).Consideremos la expresi´n
o
p(x) = a0 xk + a1 xk−1 + .... + ak = 0
La soluci´n trivial es cuando x = 0 no es de inter´s. Esta ecuaci´n se denomi-
o e o
na ecuaci´n caracter´
o ıstica o polinomio caracter´
ıstico. Recordando el ´lgebra,
a
un polinomio de orden k tiene exactamente k ra´ ıces y puede factorizarse
como
k
p(x) = (x − ri )
i=1
donde ri son las soluciones de p(x) = 0. Cualquier ri es una soluci´n a ´ste
o e
polinomio por lo que tambi´n son una soluci´n a t(n) porque cualquier com-
e o
binacion lineal tambien conforma una soluci´n, por lo que podemos concluir
o
que
k
n
t(n) = (ci ri )
i=1
las soluciones se dan para cualquier constante que se escoja, siempre que las
ra´ sean distintas.
ıces
Ejemplo
Consideremos la secuencia de Fibonacci:
n si n = 0, n = 1,
f (n) =
f (n − 1) + f (n − 2) otros casos.
reescribimos esta ecuaci´n para satisfacer la ecuaci´n 2.7.5
o o
f (n) − f (n − 1) − f (n − 2) = 0
Esta ecuaci´n tiene un polinomio caracter´
o ıstico
x2 − x − 1 = 0
que tiene como soluci´n las ra´
o ıces
√ √
1+ 5 1− 5
r1 = y r2 =
2 2
37. ´
2.7. SOLUCION DE RECURRENCIAS 25
entonces la soluci´n general es
o
n n
f (n) = c1 r1 + c2 r2
ahora utilizando las condiciones iniciales podemos hallar las constantes c1 , c2
c1 + c2 = 0
r1 c 1 + r2 c 2 = 1
resolviendo obtenemos
1 1
c1 = √ y c2 = − √
5 5
reemplazando en la ecuaci´n obtenemos
o
√ √
1 1+ 5 n 1− 5 n
f (n) = √ [( ) −( ) ]
5 2 2
Solucici´n de recurrencias no homog´neas
o e
La recurrencias de la forma
a0 tn + a1 tn−1 + .... + ak tn−k = bn p(n) (2.7.6)
b es una constante
p(n) es un polinomio en n de grado d.
Consideremos la recurrencia siguiente:
t(n) − 2t(n − 1) = 3n (2.7.7)
en este caso b = 3 y p(n) = 1 es un polinomio de grado 0, para resolver
este problema primero lo convertimos a un problema familiar, la recurrencia
homog´nea. Multiplicamos por tres la ecuaci´n 2.7.7
e o
3t(n) − 6t(n − 1) = 3n+1 (2.7.8)
ahora cambiemos n − 1 por n
3t(n − 1) − 6t(n − 1) = 3n (2.7.9)
38. 26 ´
2. ANALISIS DE ALGORITMOS
restando 2.7.7 de 2.7.8 tenemos una ecuaci´n homog´nea
o e
t(n) − 5t(n − 2) + 6t(n − 2) = 0 (2.7.10)
el polinomio caracter´
ıstico es
x2 − 5x + 6 = (x − 2)(x − 3)
por lo que, las soluciones son de la forma
t(n) = c1 2n + c2 3n
Sin embargo no es cierto que cualquier constante arbitraria producir´ la a
soluci´n correcta porque la ecuaci´n 2.7.7 no es la misma que la 2.7.10.
o o
Podemos resolver la ecuaci´n original en base de t(0) y t(1). La funci´n
o o
original implica que t1 = 2t0 + 3 por lo que, las ecuaciones a resolver son:
c1 + c2 = t(0)
2c1 + 3c2 = 2t(0) + 3
de donde obtenemos c1 = t(0) − 3 y c2 = 3. Resolviendo esto tenemos
t(n) = (t(0) − 3)2n + 3n+1
que es independiente de la soluci´n inicial t(n) O(3n )
o
39. 2.8. EJERCICIOS RESUELTOS 27
2.8. Ejercicios resueltos
1. ¿Cu´nto tiempo toma el siguiente algoritmo?
a
l=0
for i=1 to n
for j=1 to n^2
for k=1 to n^3
l=l+1
Soluci´n:
o
Recordando que los ciclos for son las sumas de los tiempos individuales
de los procedimientos interiores podemos escribir
n n2 n3
T (n) = ( ( 1))
i=1 j=1 k=1
n n2
= ( n3 )
i=1 j=1
n
3 2
=n n
i=1
= n n n = n6
3 2
2. ¿Cu´nto tiempo toma el siguiente algoritmo?
a
l=0
for i=1 to n
for j=1 to i
for k=1 to j
l=l+1
Soluci´n:
o
40. 28 ´
2. ANALISIS DE ALGORITMOS
En este caso no todas las sumas son hasta n
n i j
T (n) = ( ( 1))
i=1 j=1 k=1
n i
= ( j)
i=1 j=1
n
i+1
= i
i=1
2
n
i2 i
= ( + )
i=1
2 2
n n
i2 i
= +
i=1
2 i=1
2
n(n + 1)(2n + 1) n + 1
= +
12 2
2
(n + n)(2n + 1) n + 1
= +
12 2
2n3 + 3n2 + n n + 1
= +
12 2
3
= O(n )
3. Resolver utilizando el teorema master
procedure DC(n)
if n < = 1
DC(n/2)
for j=1 to n^3
x[j]=0
Soluci´n
o
Del an´lisis vemos que
a
1 n = 1,
T (n) = 3
T (n/2) + n otros casos.
De donde tenemos a = 1, b = 2, k = 3 lo que nos lleva al caso 1 < 23
dando como soluci´n O(nk ) = O(n3 ).
o
41. 2.8. EJERCICIOS RESUELTOS 29
4. Resolver utilizando el teorema master
procedure DC(n)
if n < = 1
for i=1 to 8
DC(n/2)
for j=1 to n^3
x[j]=0
Soluci´n
o
Del an´lisis vemos que hay la parte de algoritmo que divide el problema
a
DC(n/2) se procesa 8 veces lo que cambia el problema anterior a
1 n = 1,
T (n) =
8T (n/2) + n3 otros casos.
De donde tenemos a = 8, b = 2, k = 3 lo que nos lleva al caso 8 = 23
dando como soluci´n O(nk log n) = O(n3 log n).
o
5. Dar las cotas superiores para T(n) en las siguientes recurrencias. Asu-
miendo que T(n) es constante para n ≤ 1.
n
T (n) = 2T ( ) + n3
2
Soluci´n:
o
Desarrollando la recursi´n tenemos:
o
n
T (n) = 2T ( ) + n3
2
n n
= 2(2T ( ) + ( )3 ) + n3
4 2
n n3
= 4T ( ) + 2( ) + n3
4 2
n n n3
= 4(2T ( ) + ( )3 ) + 2( ) + n3
8 4 2
n n 3 n3
= 8T ( ) + 4( ) + 2( ) + n3
8 4 2
De aqu´ vemos que para un t´rmino i toma la forma
ı e
i−1
i n n
T (n) = 2 T ( i ) + 2k ( k )3
2 k=0
2
42. 30 ´
2. ANALISIS DE ALGORITMOS
n
T(1) se da cuando 2i = 1 entonces i = log(n)
reemplazando tenemos:
i−1
1 2
T (n) = n + n3 ( )
k=1
2k
i−1
1
= n + n3 ( )
k=1
4k
i−1
1 1 − ( 1 )i−1
4
( )= 1
k=1
4k 1− 4
4 1
= (1 − i−1 )
3 4
4 1 1
= −
3 3 4i−2
4 1 1
= −
3 3 22i−2
4 1 1
= − 2 log(n)−2
3 32
4 1 4
= −
3 3 n2
4 1 4
T (n) = n + n3 ( − )
3 3 n2
4 4
= n + n3 − n)
3 3
por lo que, la cota superior es O(n3 )
6. Dar las cotas superiores para T(n) en las siguientes recurrencias. Asu-
miendo que T(n) es constante para n ≤ 2.
n √
T (n) = 2T ( ) + n
4
Soluci´n:
o
Desarrollando la recursi´n tenemos:
o
n n √
T (n) = 2(2T ( )+ )+ n
42 4
n n √
= 4T ( )+2 + n
42 4
43. 2.8. EJERCICIOS RESUELTOS 31
De aqu´ vemos que para un t´rmino i toma la forma
ı e
i−1
n
i n
T (n) = 2 T ( i ) + 2k ( )
4 k=1
4k
n
t(1) se da cuando 4i = 1 entonces i = log4 (n) adem´s notamos que
a
i i 2
4 = (2 ) reemplazando tenemos:
i−1
i n √
= 2 T (1) + 2k + n
k=1
4k
i−1
n √ n
= + n+ 2k
2 k=1
2k2
i−1
n √ √
= + n+ n
2 k=1
n √ √
= + n + (i − 1) n
2
n √ √
= + n + (log4 (n) − 1) n
2
n √ √ √
= + n + log4 (n) n − n
2
√
por lo que la cota superior es O(log(n) n).
7. Dar las cotas superiores para T(n) asumiendo que T(n) es constante
para n ≤ 2. √
T (n) = 2T ( n) + 1
Soluci´n:
o
Desarrollando la recursi´n tenemos:
o
1
T (n) = 2T (n 2 ) + 1
1 2
= 4T (n( 2 ) ) + 2 + 1
1 3
= 8T (n( 2 ) ) + 4 + 2 + 1
que toma la forma de
k=i−1
1
i ( 2 )i
T (n) = 2 T (n )+ 2k
k=0
1
i ( 2 )i
= 2 T (n ) + 2i − i
44. 32 ´
2. ANALISIS DE ALGORITMOS
1 i
cuando n( 2 ) = 2 estamos en T(2) que es constante
1
( )i log(n) = log(2) = 1
2
2i = log(n)
T (n) = log(n)T (2) + log(n) − 1 = 2 log(n) − 1
la cota superior es O(log n)
2.9. Ejercicios
1. Resolver las siguientes recurrencias utilizando el teorema master, ve-
rificar con el m´todo de substituci´n y desarrollando la recurrencia.
e o
Asuma que T(1)=1.
a) T (n) = 2T ( n ) + log(n)
2
b) T (n) = 3T ( n ) + log(n)
3
c) T (n) = 4T ( n ) + log(n)
4
d ) T (n) = 2T ( n ) + n2
2
e) T (n) = 2T ( n ) + n3
2
f ) T (n) = 2T ( n ) + n4
2
√
g) T (n) = (n)T ( n) + n
2. Hallar el O(n) del siguiente programa de b´squeda binaria.
u
int l,u,m;
l=0; u=n-1;
while(l<u) {
m=(l+u)/2
if (a[mid]< x)
l=m+1
else
if (a[mid]> x)
l=m-1
else
45. 2.9. EJERCICIOS 33
return ("hallado")
}
return ("no existe">)
3. Hallar el O(n) del siguiente programa para hallar el m´ximo com´n
a u
divisor. Sugerencia escribir el tama˜o de la instancia en cada iteraci´n
n o
y aproximar a una serie arm´nica.
o
mcd(m,n) {
while (n> 0){
resto=m%n
m=n
n=resto
}
return (m)
}
4. Hallar el O(n) del siguiente programa de exponenciaci´n.
o
pot(x,n) {
if (n=0)
return 1
if (n==1)
return x
if (par(n))
return (pot(x*x,n/2))
else
return (pot(x*x,n/2)*x)
}
5. Realizar una prueba experimental para comprobar las cotas superiores
de los programas anteriormente propuestos.
6. Codificar el programa de b´squeda binaria en forma recursiva y hallar
u
el O(n)
7. Se tienen dos programas A y B cuyo tiempo de ejecuci´n es 150 log(n)
o
2
milisegundos y 150n respectivamente. Indique que programa es mejor
para n < 100,n < 1, 000, n > 10, 000