CURSO DE PROGRAMACIÓN COMPETITIVA URJC

Documentos relacionados
Estructuras de datos Listas y árboles

Planificaciones Algoritmos y Programación II. Docente responsable: CALVO PATRICIA MABEL. 1 de 8

Planificaciones Algoritmos y Programación II. Docente responsable: JUAREZ ANDRES ALBERTO. 1 de 9

EDA. Tema 8 Colas de Prioridad: Heaps

Contenido. Contenido - IX. 1 Encapsulamiento a través de clases y objetos Introducción al lenguaje de programación Java...

Planificaciones Algoritmos y Programación II. Docente responsable: CALVO PATRICIA MABEL. 1 de 6

Planificaciones Algoritmos y Programación II. Docente responsable: CALVO PATRICIA MABEL. 1 de 6

Métodos de Ordenamiento. Unidad VI: Estructura de datos

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz TEMA 4. Montículos binarios (heaps)

UNIVERSIDAD AUTÓNOMA DE AGUASCALIENTES CENTRO DE CIENCIAS BÁSICAS DEPARTAMENTO DE SISTEMAS ELECTRÓNICOS OBJETIVO GENERAL MÉTODOS DIDÁCTICOS EVALUACIÓN

Análisis y Diseño de Algoritmos

DATOS DE IDENTIFICACIÓN DEL CURSO Ciencias Computacionales Estructuras y algoritmos

Algoritmos de Ordenamiento

Teoría de Grafos. Herramientas de programación para procesamiento de señales

Un árbol binario T se define como un conjunto finito de elementos, llamados nodos, de forma que:

Taller de Programación I. Tema 08: Estructuras Dinámicas de Datos en Java

Examen de Estructuras de Datos y Algoritmos. (Modelo 2)

Examen de Estructuras de Datos y Algoritmos. (Modelo 1)

Contenido. Prólogo... Capítulo 1. Algoritmos y estructuras de datos Introducción... 24

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

5 Métodos de Ordenamiento. 5.1 Métodos de Ordenamiento Internos Burbuja Quicksort Heapsort Inserción Simple 5.1.

Tema: Métodos de Ordenamiento. Parte 3.

UNIVERSIDAD AUTONOMA DE MADRID ESCUELA POLITÉCNICA SUPERIOR ESTRUCTURAS DE DATOS Y ALGORITMOS

Ordenamiento (Sorting)

Federico Peinado

Tema 3. Análisis de costes

Introducción Supongamos un subconjunto de n elementos X = {e 1,,e n de un conjunto referencial Y, X Y. Dentro de Y se define una relación de orden tot

Árboles balanceados (AVL) Tablas de dispersión (Hash) Colas de prioridad (Heap)

Introducción al Análisis del Coste de Algoritmos

ÍNDICE 1. Índice Listas ordenadas Operaciones permitidas Pilas Operaciones permitidas...

Colas deprioridad y heaps

ESTRUCTURA DE DATOS: Tema 5. Ordenamiento y Búsqueda

Algorítmica y Complejidad. Tema 3 Ordenación.

TIPOS ABSTRACTOS DE DATOS EN HASKELL

Análisis y Complejidad de Algoritmos. Arboles Binarios. Arturo Díaz Pérez

Métodos de ordenamiento:

SÍLABO DE ESTRUCTURA DE DATOS

Colas con prioridad, montículos y el heapsort. Lección 18

Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

ALGORITMOS Y ESTRUCTURAS DE DATOS

Unidad III: Estructuras lineales

DISEÑO DE UN ANIMADOR DE ALGORITMOS DE BÚSQUEDA Y ORDENACIÓN ( ID2012/055 )

Estructuras de datos: Árboles binarios de

Métodos de ordenamiento:

Programación TADs Colecciones Conjuntos, Diccionarios y Tablas

Estructuras de Datos y Algoritmos Tema 3: Arrays y listas enlazadas

Tablas de dispersión

Estructuras Dinámicas de datos.

Programación en Java. Instructor:

DEFINICIONES BÁSICAS DE LAS ESTRUCTURAS DE DATOS

INDICE. Prólogo de la Segunda Edición

Ingeniera de Sistemas: Luz Esperanza Espitia Tutora de Estructura de datos.

Sólo una opción es correcta en cada pregunta. Cada respuesta correcta suma 1 4. puntos. Cada respuesta incorrecta resta 1 12

INSTITUTO POLITÉCNICO NACIONAL SECRETARÍA ACADÉMICA DIRECCIÓN DE ESTUDIOS PROFESIONALES EN INGENIERÍA Y CIENCIAS FÍSICO MATEMÁTICAS PROGRAMA SINTÉTICO

ALGORITMOS DE BÚSQUEDA. Ing. Ronald A. Rentería Ayquipa

UNIDAD 1. 1 de 45. Tercer semestre

Tema 10: Árbol binario de búsqueda

Estructuras de Datos II

EL PAQUETE JAVA.UTIL DEL API JAVA. PRINCIPALES INTERFACES Y CLASES: STRINGTOKENIZER, DATE, CALENDAR, HASHSET, TREEMAP, TREESET...

Búsqueda en espacio de estados

Estructura de Datos. Temario Unidad VI. Árboles Árboles Binarios

Esquema de Dividir y Vencer

En las preguntas 1-30 indique la respuesta correcta. e= ninguna de las anteriores

ANÁLISIS Y DISEÑO DE ALGORITMOS

Semana 4: Métodos de Búsqueda No informados. Prof. Oscar Benito Pacheco.

Estructuras de Datos y Algoritmos. Programa de la asignatura

1 Introducción a los algoritmos y a la programación de computadoras... 1

Transcripción:

CURSO DE PROGRAMACIÓN COMPETITIVA URJC - 2018 Sesión 2 (3ª Semana) David Morán (ddavidmorang@gmail.com) Juan Quintana (juandavid.quintana@urjc.es) Sergio Pérez (sergioperezp1995@gmail.com) 1

Contenidos Complejidad en tiempo y espacio Estructuras de Datos Básicas Arrays, Matrices Listas, Pilas, Colas Árboles Generales y Binarios 2

Contenidos Algoritmos de Ordenamiento y Búsqueda Bubble Sort, Selection Sort, Merge Sort, Quick Sort Colas de Prioridad Búsqueda Binaria, Búsqueda Ternaria Exponenciación Logarítmica 3

Complejidad Motivación: No se admite cualquier solución Restricciones: Tiempo de ejecución Memoria utilizada 4

Complejidad TLE (Time limit exceeded) rebasó el tiempo asignado condición muy restrictiva MLE (Memory limit exceeded) agotó la memoria asignada el límite no suele ser muy ajustado (depende de la competición) 5

Complejidad Según la competición Especificaciones del juez (CPU/Cores, RAM, ) Sesión de pruebas antes del concurso De qué me sirve esto? Ejemplo: SWERC 18 era imposible conseguir TLE adrede 6

Complejidad En muchas competiciones formales te dan las especificaciones de la computadora donde se llevarán a cabo todas las evaluaciones De qué me sirve esto? 7

Complejidad Observar un problema y pensar, Qué complejidad se necesita? cuánto tarda en ejecutarse? cuánta memoria consume? Formular la complejidad exacta en tiempo y memoria es laborioso... 8

Complejidad NO necesitamos realizar un cálculo exacto de la complejidad (ni tendremos tiempo) Un cálculo intuitivo a ojo nos sirve para realizar una estimación 9

Complejidad Estimar la complejidad en tiempo: Contar bucles anidados Conocer la complejidad de: funciones utilizadas estructuras de datos y sus operaciones Siempre pensar en el peor caso! 10

Complejidad Notación O-grande cota superior asintótica cómo se comporta nuestro algoritmo cuando el tamaño del problema (n) crece indefinidamente? Nunca será mayor que su cota (a partir de cierto punto x 0 ) 11

Complejidad 12

Complejidad 13

Complejidad 14

Complejidad Para O(Lg(N)) N => [0, 2¹⁰⁰⁰⁰⁰⁰] Para O(N) N => [0, 1.000.000] Para O(NLg(N)) N => [0, 100.000] Para O(N²) N => [0, 5.000] Para O(N³) N => [0, 500] Para O(N⁴) N => [0, 60] Para O(2^N) N => [0,25] Para O(N!) N => [0,12] 15

Complejidad Ejemplo 1 16

Complejidad Ejemplo 2 17

Estructuras de Datos Básicas Vectores Listas Pilas Colas Colas de prioridad (heap) Map (estructura <clave,valor>) Set (AVL) 18

Estructuras de Datos Básicas Vectores Estructura en la cual se guardan valores sobre un elemento Funciona como un array, en memoria se guarda en espacios contiguos 19

Estructuras de Datos Básicas Vectores / Vector Si crece en mucha medida sin una previa reserva puede ser mortal! Su tamaño puede cambiar dinámicamente y esto lo convierte en un objetivo ideal para crear matrices dispersas El equivalente en Java podría ser ArrayList 20

Estructuras de Datos Básicas Listas / List Estructura en la cual se guardan valores sobre un elemento, insertando en cualquier lugar un nuevo elemento Posiciones de memoria no-contiguas Inserciones y borrados mucho más fáciles de lograr internamente 21

Estructuras de Datos Básicas Listas / List No se puede tener acceso directo a un elemento en específico (salvo primero o último) Puede servir tanto de pila como de cola Equivalente en Java: LinkedList 22

Estructuras de Datos Básicas Pilas / stack Estructura donde el último elemento en llegar es el primero en salir (LIFO) No utiliza espacio contiguo de memoria Sólo se puede insertar elementos apilándolos Sólo se puede pedir elementos del tope de la pila 23

Estructuras de Datos Básicas Pilas / stack En algunos casos, la pila puede simular una pila de sistema para reducir el tiempo de ejecución Ideal para DFS y otros algoritmos recursivos Equivalente en Java: Stack (obsoleto) 24

Estructuras de Datos Básicas Colas / queue Estructura donde el primer elemento en llegar es el primero en salir (FIFO) No utiliza espacio contiguo de memoria Sólo se puede insertar elementos al final (encolando) 25

Estructuras de Datos Básicas Colas / queue Sólo se puede pedir el elemento del principio de la cola Ideal para BFS Equivalente en Java: Queue 26

Estructuras de Datos Básicas Colas de prioridad / priority_queue Se ordenan de mayor a menor sus elementos (prioridad), internamente se puede representar como un heap (montículo) Solo se puede sacar el elemento tope de la estructura (en este caso el mayor elemento vendrá primero) Equivalente en Java: PriorityQueue 27

Estructuras de Datos Básicas Mapa / map Contenedor asociativo que guarda claves únicas y les asocia a un valor Se puede acceder directamente a elementos guardados si se coloca su clave, en tal caso, se devolverá el valor asociado Al ser un árbol binario balanceado, todas sus operaciones son logarítmicas (también podría ser tabla hash) Equivalente en Java: HashMap / TreeMap 28

Estructuras de Datos Básicas Conjuntos / set Árbol binario balanceado, ordena naturalmente de menor a mayor (podría ser tabla hash) No admite elementos repetidos Equivalente en Java: TreeSet / HashSet 29

Estructuras de Datos Básicas Arboles Binarios Estructura que tiene un nodo raíz Desde el nodo raíz podrán haber hasta dos hijos, de esos hijos pueden haber otros dos hijos más y así sucesivamente. 30

Estructuras de Datos Básicas Arboles Binarios Se puede implementar con punteros (llevando cuenta en una estructura aparte cuál es el nodo derecho e izquierdo) Con arrays, teniendo en cuenta que el índice 0 es la raíz, el hijo izquierdo sería 0*2+1 y el derecho sería 0*2+2 (para el índice n, el hijo izquierdo será n*2+1 y el derecho n*2+2) 31

Estructuras de Datos Básicas Árboles Generales Implementándolos a través de una clase llevando cuenta del nodo raíz y en cada nodo llevar cuenta de los hijos en un array. Ideales para Tries (futuro) 32

Estructuras de Datos Básicas Estructura Adición Deleción Búsqueda Vector / Array O(1)* O(1)* O(N)* Lista O(1) O(1) O(N) Pila O(1) O(1) O(N) Cola O(1) O(1) O(N) Set O(LgN)* O(LgN)* O(LgN)* Map O(LgN)* O(LgN)* O(LgN) Priority_Queue O(LgN) O(LgN) O(N) 33

Algoritmos de Ordenamiento Algunos problemas requieren tener ordenados una serie de elementos para dar una respuesta Algoritmos de ordenación Estructuras de datos ordenadas es importante su eficiencia 34

Algoritmos de Ordenamiento BubbleSort y SelectionSort Complejidad: O(n²) (ineficientes) No se incluyen en las bibliotecas estándar Se implementan como ejercicio de aprendizaje 35

Algoritmos de Ordenamiento Quicksort / Mergesort Complejidad: O(nLog(n)) Ya están implementadas en las bibliotecas básicas No hay que programarlos! 36

Algoritmos de Ordenamiento C++ std:sort() Java Collections.sort() -> MergeSort* Arrays.sort() -> Quicksort* (para tipos primitivos) *En realidad son variantes más eficientes 37

Búsqueda Binaria Se implementan sobre funciones monótonas crecientes / decrecientes Para todo x se tiene que cumplir: f(x) > f(x+1) ó f(x) < f(x+1) Su complejidad es logarítmica 38

Búsqueda Binaria 39

Búsqueda Binaria Pseudocódigo: inferior = 0, superior = N mientras superior-inferior > 1 medio = (superior+inferior)/2 si f(medio) < objetivo inferior = medio sino superior = medio 40

Búsqueda Ternaria Se implementan sobre funciones parabólicas donde haya un solo punto mínimo ó máximo Su complejidad es 2*Log 3 (N) No es muy común encontrarse con este tipo de problemas 41

Búsqueda Ternaria 42

Búsqueda Ternaria Pseudocódigo: inferior = 0, superior = N mientras superior-inferior > 2 m1 = (superior+inferior*2)/3 m2 = (superior*2+inferior)/3 si f(m1) < f(m2) inferior = m1 sino superior = m2 43

Exponenciación Logarítmica Una forma de elevar a^b siempre que b sea entero Se deja a ejercicio razonar como se haría en una matriz Parte de la base de divide y vencerás y de la propiedad de que a ^ b * a ^ b = a ^ (b+b) 44

Exponenciación Logarítmica Pseudocódigo si b == 1 retornar a sino tmp = f(a, b/2) si b % 2 (impar) retornar tmp*tmp*a sino retornar tmp*tmp 45

Exponenciación Logarítmica Ejemplo: 2¹⁰ => 2⁵*2⁵ 2⁵ => 2²*2²*2 2² => 2¹*2¹ 2¹ = 2 46

Exponenciación Logarítmica Ejemplo: 2¹⁰ => 2⁵*2⁵ = 32*32 = 1024 2⁵ => 2²*2²*2 = 4*4*2 = 32 2² => 2¹*2¹ = 2*2 = 4 2¹ = 2 47

Semana que viene Algoritmos Voraces Grafos 48

Hasta la próxima semana! Ante cualquier duda sobre el curso o sobre los problemas podéis escribirnos (preferiblemente copia a los tres) David Morán (ddavidmorang@gmail.com) Juan Quintana (juandavid.quintana@urjc.es) Sergio Pérez (sergioperezp1995@gmail.com) 49