PDF de programación - Problemas y Algoritmos de Olimpiada de Informática

Imágen de pdf Problemas y Algoritmos de Olimpiada de Informática

Problemas y Algoritmos de Olimpiada de Informáticagráfica de visualizaciones

Publicado el 18 de Mayo del 2019
2.057 visualizaciones desde el 18 de Mayo del 2019
977,4 KB
219 paginas
Creado hace 14a (23/10/2009)
Problemas y Algoritmos

de Olimpiada de Informática

4

3

2

7

8

9

6

5

1

9 7 7 7 9 6 6

Por Luis E. Vargas Azcona

Algunas imagenes por Roberto López

2

Acuerdo de Licencia

Esta obra está bajo una licencia Atribución-No comercial-Licenciamiento Recíproco
2.5 México de Creative Commons.
Eres libre de:

copiar, distribuir y comunicar públicamente la obra

hacer obras derivadas

Bajo las condiciones siguientes:

Atribución. Debes reconocer la autoría de la obra en los términos especica-
dos por el propio autor o licenciante.

No comercial. No puedes utilizar esta obra para nes comerciales.

Licenciamiento Recíproco. Si alteras, transformas o creas una obra a partir
de esta obra, solo podrás distribuir la obra resultante bajo una licencia igual
a ésta.

Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la
licencia de esta obra.

Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del
titular de los derechos de autor.

Nada en esta licencia menoscaba o restringe los derechos morales del autor.

Los derechos derivados de usos legítimos u otras limitaciones reconocidas por ley no
se ven afectados por lo anterior.
Esto es solamente un resumen fácilmente legible del texto legal de la licencia. Para
ver una copia de esta licencia, visite http://creativecommons.org/licenses/by-nc-
sa/2.5/mx/ o envie una carta a Creative Commons, 171 Second Street, Suite 300,
San Francisco, California 94105, USA.

3

4

Prefacio

El propósito general de este libro, es el de introducir al lector en la resolución de
problemas de programación así como en el diseño de algoritmos.
Si bien se presentan algoritmos, el objetivo no es saturar el conocimiento del lector
con una gran cantidad de algoritmos sino mostar sus fundamentos, mostrar también
maneras inteligentes de usarlos para resolver problemas, y sobre todo, lograr que el
lector sea capaz de diseñar sus propios algoritmos.
Muchos libros de algoritmos se limitan a explicar algoritmos sin detenerse en su fun-
damento matemático y sin decir las aplicaciones que tiene en solución de problemas.
Algunos otros si explican el fundamento de los algoritmos, pero resultan inadecuados
para estudiantes con poco conocimiento matemático ya que suelen dar por hecho
que el lector ya sabe teoría de conjuntos y matemáticas discretas.
Este libro está dirigido a estudiantes con gusto de programar y resolver problemas
pero que todavía no adquieren las bases matemáticas necesarias para poder leer
libros de algoritmos con suciente fundamento matemático; por lo que se pretende,
no solamente explicar los algoritmos, sino también darle al lector las herramientas
necesarias para entender, analizar y diseñar.
Por ello, una gran cantidad de páginas se dedican a establecer las bases matemáticas
que sirven como soporte para la resolución de problemas de programación.
Los temas tratados en este libro son indispensables para comprender el gran campo
de estudio de la solución de problemas mediante el uso de las computadoras, consti-
tuyen los fundamentos de una cantidad interminable de conocimientos y técnicas que
estan en constante desarrollo por la investigación en las ciencias de la computación.
En el libro se muestran implementaciones en C++ que no usan memoria dinámica
ni estructuras, esto es por los siguientes motivos:

A veces al tener el pseudocódigo de un algoritmo, no resulta claro cómo im-
plementarlo sin escribir demasiado. Por ello es preferible mostrar algunas im-
plementaciones de ejemplo para que el lector conozca al menos una implemen-
tación corta de cada algoritmo.

Muchos elementos del lenguaje C++ son muy conocidos e incluso estan pre-
sentes en otros lenguajes, con una syntaxis casi idéntica a la de C++, por ello,

5

6

si se utilizan pocos elementos del lenguaje, es posible que un lector que no esté
familiarizado con este lenguaje pueda igualmente entender los códigos.

No está por demás decir que este libro fue escrito pensando en participantes
de un concurso llamado olimpiada de informática, en ese concurso los parti-
cipantes tienen tiempo limitado para implementar y depurar sus programas y
las implementaciones son mas fáciles de depurar con memoria estática.

Al Estudiante

Puede parecer extraño encontrar un libro de algoritmos con estas características,
ya que dedica muchas páginas a los fundamentos matemáticos y omite varias cosas
que varios libros de algoritmos orientados a licenciatura no dejarían pasar por alto,
como lo son quicksort, shellsort, listas circulares, listas doblemente ligadas y tablas
de dispersión entre otras cosas.
El motivo de esto es simple: este libro no pretende ser una referencia ni mucho menos
un repaso de los temas de licenciatura; pretende aportar las herramientas básicas
para aplicar la programación en la resolución de problemas.
Por esto mismo puede llegar a ser un recurso valioso ya que permite abordar la
programación desde un punto de vista mas creativo y menos repetitivo, y al mismo
tiempo el enfoque a resolver nuevos problemas es la base de la inovación.
Este libro esta hecho para leerse casi como si fuera una novela, un capítulo tras otro,
y si se decide saltarse uno o mas capítulos se corre el riesgo de que mas adelante no
se pueda seguir bien. La diferencia con una novela es la gran cantidad de problemas
de ejemplo, los cuales conviene intentar resolver antes de leer la solución.

Al Instructor

La teoría necesaria para leer este libro de principio a n es muy poca, incluso un
alumno de preparatoría la debería de saber. Sin embargo, muchos problemas que
se mencionan, por si dicultad, estan lejos de ser adecuados para cualquier alumno
de preparatoria e incluso pueden darle dicultades a graduados de la universidad;
pero resultan bastante adecuados para aquellos que buscan algo mas interesante que
problemas de rutina o para quienes se preparan para concursos de programación.
El libro está escrito de la manera en la que me gustaría presentar los temas si fuera
yo el instructor.
Es decir, procura motivar todos los conceptos antes de abordarlos formalmente,
intenta nunca dejar huecos, en la teoría; y sobre todo, buscar aplicaciones creativas
a cada tema que se aborda evitando decir muy rápido la solución y dando tiempo
para especular.

7

Para resolver un problema, es necesario plantearse un diálogo consigo mismo de
preguntas y respuestas. Dicho diálogo también se debe de presentar entre alumno e
instructor y en muchas partes del libro se intenta plasmar el diálogo abordando los
razonamientos que podrían llevar al lector a resolver cada uno de los ejemplos.

Al Olímpico

Este libro lo escribí pensando principalmente en los olímpicos, por lo que todo lo que
se menciona aquí tiene aplicación directa o indirecta con la olimpiada de informática.
La olimpiada esta centrada en resolver problemas mediante la programación y el
diseño de algoritmos; para ello se requieren bases matemáticas sólidas y un conoci-
miento profundo(aunque no necesariamente amplio) de los algoritmos.
Es por eso que este libro dedica muchas páginas a dejar claras las bases matemáticas
y a explorar las propiedades de algoritmos y no solo en introducirlos.
Los ejemplos se deben de intentar resolver por cuenta propia para aprender de
los propios errores e ir desarrollando poco a poco un método propio para resolver
problemas. Si de pronto no logras resolver un ejemplo, puedes empezar a leer la
solución para darte una idea y continuar por cuenta propia.

8

Índice general

I Recursión

13

1. Inducción Matemática

17
1.1. Ejemplos de Inducción . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.2. Errores Comunes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.3. Denición de Inducción . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.4. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.4.1. Sumas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.4.2. Tablero de Ajedrez . . . . . . . . . . . . . . . . . . . . . . . . 27
1.4.3. Chocolate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

1.5. Sugerencias

2. Denición y Características de la Recursión

31
2.1. Factorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2.
Imprimir Números en Binario . . . . . . . . . . . . . . . . . . . . . . 34
2.3. Los Conejos de Fibonacci . . . . . . . . . . . . . . . . . . . . . . . . . 35

39
3. Recursión con Memoria o Memorización
3.1. Mejorando el Rendimiento de Fibonacci
. . . . . . . . . . . . . . . . 39
3.2. Error Común en la Memorización . . . . . . . . . . . . . . . . . . . . 41
3.3. Triangulo de Pascal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.4. Teorema del Binomio . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

4. Divide y Vencerás

45
4.1. Máximo en un Arreglo . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.2. Búsqueda Binaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.3. Torres de Hanoi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

5. Búsqueda Exhaustiva

53
5.1. Cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.2. Conjuntos y Subconjuntos . . . . . . . . . . . . . . . . . . . . . . . . 57
5.3. Permutaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

9

10

II Análisis de Complejidad

ÍNDICE GENERAL

65

6. Técnicas Básicas de Conteo

69
6.1. Reglas Básicas de Conteo . . . . . . . . . . . . . . . . . . . . . . . . . 71
6.2. Conjuntos, Subconjuntos, Multiconjuntos . . . . . . . . . . . . . . . . 73
6.3. Permutaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.4. Combinaciones
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.5. Separadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

7. Funciones

83
7.1. Las Funciones como Reglas . . . . . . . . . . . . . . . . . . . .
  • Links de descarga
http://lwp-l.com/pdf15943

Comentarios de: Problemas y Algoritmos de Olimpiada de Informática (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad