Este documento presenta información sobre algoritmos para encontrar caminos de costo mínimo en grafos. Explica la definición de camino de costo mínimo y describe algoritmos como BFS para grafos sin peso y el algoritmo de Dijkstra para grafos con pesos positivos. También cubre grafos con pesos positivos y negativos.
Run-Time Environments: Storage organization, Stack Allocation of Space, Access to Nonlocal Data on the Stack, Heap Management, Introduction to Garbage Collection, Introduction to Trace-Based Collection. Code Generation: Issues in the Design of a Code Generator, The Target Language, Addresses in the Target Code, Basic Blocks and Flow Graphs, Optimization of Basic Blocks, A Simple Code Generator, Peephole Optimization, Register Allocation and Assignment, Dynamic Programming Code-Generation
Radix sort es un algoritmo de ordenamiento que ordena enteros procesando sus dígitos de forma individual. Funciona ordenando los números por el valor de sus dígitos menos o más significativos de forma iterativa. Es rápido para ordenar conjuntos de números enteros y fácil de implementar, aunque requiere espacio adicional y no es adecuado si la entrada no son sólo números. Su complejidad temporal es O(kn) donde k es el número máximo de dígitos y n el tamaño de la entrada.
Las técnicas de búsqueda permiten resolver problemas representando el conocimiento como un conjunto de estados y operadores. Existen métodos de búsqueda ciega como la búsqueda en amplitud y profundidad, y métodos heurísticos que usan conocimiento del dominio para guiar la búsqueda de forma más eficiente.
El documento describe las tablas hash, incluyendo su historia, características y métodos de implementación. Se cree que H.P. Luhn fue el primero en utilizar el concepto de hash en 1953. Las tablas hash permiten búsquedas rápidas a tiempo constante mediante el mapeo de claves a posiciones de almacenamiento a través de funciones hash. Un método común es el plegamiento de hash, que divide la clave en partes y las combina para generar un índice. Las tablas hash se usan para búsqued
Este documento presenta varios métodos de búsqueda y ordenamiento de datos, incluyendo el método de la burbuja, selección, inserción, intercambio, Shell, búsqueda secuencial y binaria, quicksort, binsort y radixsort. Explica cada método con ejemplos para ilustrar cómo funcionan los algoritmos de ordenamiento y búsqueda.
The document discusses the divide and conquer algorithmic approach. It defines divide and conquer as dividing a problem into smaller subproblems, solving the subproblems independently, and then combining the solutions to solve the original problem. The key steps are listed as divide, conquer, and combine. Examples provided of problems solved using divide and conquer include binary search, min-max problems, merge sort, and Karatsuba's multiplication algorithm. Advantages include solving difficult problems efficiently while disadvantages include potential slowdowns from recursion and redundant solving of subproblems.
Un sistema distribuido es una colección de computadoras independientes que funcionan juntas como una sola computadora. Los sistemas distribuidos permiten compartir recursos entre computadoras conectadas en red, son escalables, tolerantes a fallos y permiten la concurrencia de procesos. Un ejemplo simple es un sistema multiprocesador donde los procesos de software se distribuyen entre procesadores diferentes.
Run-Time Environments: Storage organization, Stack Allocation of Space, Access to Nonlocal Data on the Stack, Heap Management, Introduction to Garbage Collection, Introduction to Trace-Based Collection. Code Generation: Issues in the Design of a Code Generator, The Target Language, Addresses in the Target Code, Basic Blocks and Flow Graphs, Optimization of Basic Blocks, A Simple Code Generator, Peephole Optimization, Register Allocation and Assignment, Dynamic Programming Code-Generation
Radix sort es un algoritmo de ordenamiento que ordena enteros procesando sus dígitos de forma individual. Funciona ordenando los números por el valor de sus dígitos menos o más significativos de forma iterativa. Es rápido para ordenar conjuntos de números enteros y fácil de implementar, aunque requiere espacio adicional y no es adecuado si la entrada no son sólo números. Su complejidad temporal es O(kn) donde k es el número máximo de dígitos y n el tamaño de la entrada.
Las técnicas de búsqueda permiten resolver problemas representando el conocimiento como un conjunto de estados y operadores. Existen métodos de búsqueda ciega como la búsqueda en amplitud y profundidad, y métodos heurísticos que usan conocimiento del dominio para guiar la búsqueda de forma más eficiente.
El documento describe las tablas hash, incluyendo su historia, características y métodos de implementación. Se cree que H.P. Luhn fue el primero en utilizar el concepto de hash en 1953. Las tablas hash permiten búsquedas rápidas a tiempo constante mediante el mapeo de claves a posiciones de almacenamiento a través de funciones hash. Un método común es el plegamiento de hash, que divide la clave en partes y las combina para generar un índice. Las tablas hash se usan para búsqued
Este documento presenta varios métodos de búsqueda y ordenamiento de datos, incluyendo el método de la burbuja, selección, inserción, intercambio, Shell, búsqueda secuencial y binaria, quicksort, binsort y radixsort. Explica cada método con ejemplos para ilustrar cómo funcionan los algoritmos de ordenamiento y búsqueda.
The document discusses the divide and conquer algorithmic approach. It defines divide and conquer as dividing a problem into smaller subproblems, solving the subproblems independently, and then combining the solutions to solve the original problem. The key steps are listed as divide, conquer, and combine. Examples provided of problems solved using divide and conquer include binary search, min-max problems, merge sort, and Karatsuba's multiplication algorithm. Advantages include solving difficult problems efficiently while disadvantages include potential slowdowns from recursion and redundant solving of subproblems.
Un sistema distribuido es una colección de computadoras independientes que funcionan juntas como una sola computadora. Los sistemas distribuidos permiten compartir recursos entre computadoras conectadas en red, son escalables, tolerantes a fallos y permiten la concurrencia de procesos. Un ejemplo simple es un sistema multiprocesador donde los procesos de software se distribuyen entre procesadores diferentes.
Este documento presenta los conceptos y ejemplos de programación híbrida utilizando ensamblador y C++. Explica objetivos como aprovechar las ventajas de ambos lenguajes para escribir programas más rápidos y eficientes. Luego, cubre temas como Visual C++, las instrucciones de ensamblador de 32 bits, y ejemplos de código híbrido para operaciones como suma, resta, multiplicación y división. Finalmente, concluye que la programación híbrida permite aprovechar las ventajas de ambos lengu
Una cola es una estructura de datos que funciona bajo el principio FIFO (primero en entrar, primero en salir). Los elementos se agregan al final de la cola mediante la operación add y se eliminan del frente mediante la operación poll. Las colas se usan comúnmente para simular procesos por lotes como cajeros automáticos o líneas de producción.
This document discusses the greedy algorithm approach and the knapsack problem. It defines greedy algorithms as choosing locally optimal solutions at each step in hopes of reaching a global optimum. The knapsack problem is described as packing items into a knapsack to maximize total value without exceeding weight capacity. An optimal knapsack algorithm is presented that sorts by value-to-weight ratio and fills highest ratios first. An example applies this to maximize profit of 440 by selecting full quantities of items B and A, and half of item C for a knapsack with capacity of 60.
Este documento describe diferentes métodos de ordenamiento de datos, incluyendo burbuja, quicksort, shellsort, radixsort e intercalación. Explica los pasos de cada algoritmo y provee ejemplos para ilustrar cómo ordenan un conjunto de datos. También incluye código de implementación en C++ para algunos de los métodos.
Esta presentación es parte del contenido del curso de Programación Avanzada impartido en la Universidad Rafael Landívar durante el año 2015.
Incluye los temas:
• Búsqueda por método secuencial
• Búsqueda por método binario
• Búsqueda por método hashing
Creado por Ing. Alvaro Enrique Ruano
Este documento describe diferentes tipos de listas en estructuras de datos, incluyendo listas enlazadas simples, doblemente enlazadas, circulares y doblemente circulares. Explica sus características, operaciones y estructuras, con ejemplos de cómo se implementan en lenguajes de programación como Java.
Instituto Tecnológico Superior de Guasave
Ingeniería en Sistemas Computacionales
Estructura de Datos, AED-1026
Material desarrollado utilizando Programación orientada a objetos, clases y nodos.
1. An algorithm is a sequence of unambiguous instructions to solve a problem and obtain an output for any valid input in a finite amount of time. Pseudocode is used to describe algorithms using a natural language format.
2. Analyzing algorithm efficiency involves determining the theoretical and empirical time complexity by counting the number of basic operations performed relative to the input size. Common measures are best-case, worst-case, average-case, and amortized analysis.
3. Important problem types for algorithms include sorting, searching, string processing, graphs, combinatorics, geometry, and numerical problems. Fundamental algorithms are analyzed for correctness and time/space complexity.
Iterative deepening search (IDS) is an algorithm that combines the completeness of breadth-first search with the memory efficiency of depth-first search. IDS performs an exhaustive depth-first search, increasing the depth limit by one each iteration, until the goal is found. IDS is guaranteed to find a solution if one exists, uses less memory than breadth-first search by limiting the depth of search at each iteration, and is more efficient than depth-first search which can get stuck in infinite loops.
Protección y Seguridad de los Sistemas OperativosRichard J. Nuñez
El documento compara la seguridad de los sistemas operativos Windows y Linux. Explica que Windows tiene más vulnerabilidades debido a su diseño cerrado, mientras que Linux es más seguro gracias a su código abierto y falta de usuarios comunes. También describe varios métodos de protección como usar cuentas de usuario con menos privilegios, mantener software actualizado y crear contraseñas seguras.
Este documento trata sobre la construcción de traductores (compiladores y analizadores) para lenguajes de programación usando herramientas como Lex/Yacc, JFlex/Cup y JavaCC. Explica conceptos básicos como el análisis léxico, sintáctico y semántico, y describe las diferentes etapas del proceso de compilación como preprocesamiento, análisis y síntesis. Además, detalla las características y uso de generadores de analizadores léxicos y sintácticos como PCLex,
Este documento describe diferentes tipos de librerías en Java, incluidas java.lang, java.io, java.net, java.util y java.awt. También cubre conceptos básicos como identificadores, literales, comentarios, palabras clave y separadores.
Este documento describe el algoritmo de búsqueda primero el mejor. Selecciona el nodo a expandir basado en una función de evaluación que devuelve un número representando lo deseable que sería expandir ese nodo. Expanda primero el nodo con la mejor evaluación. Aplica una función heurística h(n) que estima el costo mínimo desde un nodo a la meta. El ejemplo ilustra cómo el algoritmo expande nodos basándose en los valores h(n), encontrando la ruta óptima de costo 140 desde S0 a S8.
Graph traversal techniques are used to search vertices in a graph and determine the order to visit vertices. There are two main techniques: breadth-first search (BFS) and depth-first search (DFS). BFS uses a queue and visits the nearest vertices first, producing a spanning tree. DFS uses a stack and visits vertices by going as deep as possible first, also producing a spanning tree. Both techniques involve marking visited vertices to avoid loops.
An overview of gradient descent optimization algorithms Hakky St
This document provides an overview of various gradient descent optimization algorithms that are commonly used for training deep learning models. It begins with an introduction to gradient descent and its variants, including batch gradient descent, stochastic gradient descent (SGD), and mini-batch gradient descent. It then discusses challenges with these algorithms, such as choosing the learning rate. The document proceeds to explain popular optimization algorithms used to address these challenges, including momentum, Nesterov accelerated gradient, Adagrad, Adadelta, RMSprop, and Adam. It provides visualizations and intuitive explanations of how these algorithms work. Finally, it discusses strategies for parallelizing and optimizing SGD and concludes with a comparison of optimization algorithms.
Función Hash: metodos de división y de medio Cuadrado.Ana Castro
Este documento describe funciones hash y dos métodos para implementarlas: el método de división y el método del medio cuadrado. Una función hash mapea claves de entrada a valores hash de salida de tamaño fijo para usarlos como direcciones de almacenamiento. Estos métodos buscan minimizar colisiones cuando claves distintas generan el mismo valor hash. El método de división toma el residuo de dividir la clave entre un número, mientras que el método del medio cuadrado eleva la clave al cuadrado y toma dígitos centrales
1. Several sorting algorithms are compared including quicksort, heapsort, mergesort, insertion sort, selection sort, and bubble sort.
2. For most algorithms, the best, average, and worst case time complexities are listed as O(n log(n)), O(n log(n)), and O(n^2) respectively except for some cases like selection sort and bubble sort that have average and worst case complexities of O(n^2).
3. For space complexity, many algorithms have worst case complexities of O(n) except for mergesort which uses additional space and has a worst case complexity of O(n).
El documento describe las tablas hash, incluyendo su historia, funcionalidad y métodos de resolución de colisiones. Las tablas hash asocian claves con valores y permiten búsquedas rápidas en O(1). Funcionan transformando las claves con una función hash para localizar valores. Los métodos comunes para resolver colisiones son encadenamiento y direccionamiento abierto.
This document summarizes graph coloring using backtracking. It defines graph coloring as minimizing the number of colors used to color a graph. The chromatic number is the fewest colors needed. Graph coloring is NP-complete. The document outlines a backtracking algorithm that tries assigning colors to vertices, checks if the assignment is valid (no adjacent vertices have the same color), and backtracks if not. It provides pseudocode for the algorithm and lists applications like scheduling, Sudoku, and map coloring.
Este documento presenta varios ejercicios de Prolog para que el estudiante los practique. Incluye ejemplos como una canción estúpida, un diagnóstico de enfermedades y una red semántica. El objetivo final es que el estudiante diseñe e implemente su propio sistema experto en Prolog utilizando reglas o una red semántica, con al menos tres niveles de inferencia. Completar el ejercicio agregará puntos extra al puntaje final del estudiante.
El documento presenta una introducción a la asignatura de Programación Avanzada. Se detalla el contenido del curso, incluyendo temas como grafos, algoritmos de ordenamiento y búsqueda, y el algoritmo de Dijkstra para encontrar el camino más corto en un grafo. También incluye ejemplos y pseudocódigo para explicar el algoritmo de Dijkstra.
Este documento presenta un resumen de conceptos relacionados con grafos. Introduce conceptos básicos como nodos, aristas, grafos dirigidos y no dirigidos. Explica formas de representar grafos como matriz de adyacencia y lista de adyacencia. Luego, cubre algoritmos para recorrer grafos como BFS y DFS. También introduce conceptos adicionales como componentes conexas, grafos bipartitos y orden topológico. Finalmente, explica algoritmos para encontrar caminos mínimos como Dijkstra, Bellman-Ford y Floyd-War
Este documento presenta los conceptos y ejemplos de programación híbrida utilizando ensamblador y C++. Explica objetivos como aprovechar las ventajas de ambos lenguajes para escribir programas más rápidos y eficientes. Luego, cubre temas como Visual C++, las instrucciones de ensamblador de 32 bits, y ejemplos de código híbrido para operaciones como suma, resta, multiplicación y división. Finalmente, concluye que la programación híbrida permite aprovechar las ventajas de ambos lengu
Una cola es una estructura de datos que funciona bajo el principio FIFO (primero en entrar, primero en salir). Los elementos se agregan al final de la cola mediante la operación add y se eliminan del frente mediante la operación poll. Las colas se usan comúnmente para simular procesos por lotes como cajeros automáticos o líneas de producción.
This document discusses the greedy algorithm approach and the knapsack problem. It defines greedy algorithms as choosing locally optimal solutions at each step in hopes of reaching a global optimum. The knapsack problem is described as packing items into a knapsack to maximize total value without exceeding weight capacity. An optimal knapsack algorithm is presented that sorts by value-to-weight ratio and fills highest ratios first. An example applies this to maximize profit of 440 by selecting full quantities of items B and A, and half of item C for a knapsack with capacity of 60.
Este documento describe diferentes métodos de ordenamiento de datos, incluyendo burbuja, quicksort, shellsort, radixsort e intercalación. Explica los pasos de cada algoritmo y provee ejemplos para ilustrar cómo ordenan un conjunto de datos. También incluye código de implementación en C++ para algunos de los métodos.
Esta presentación es parte del contenido del curso de Programación Avanzada impartido en la Universidad Rafael Landívar durante el año 2015.
Incluye los temas:
• Búsqueda por método secuencial
• Búsqueda por método binario
• Búsqueda por método hashing
Creado por Ing. Alvaro Enrique Ruano
Este documento describe diferentes tipos de listas en estructuras de datos, incluyendo listas enlazadas simples, doblemente enlazadas, circulares y doblemente circulares. Explica sus características, operaciones y estructuras, con ejemplos de cómo se implementan en lenguajes de programación como Java.
Instituto Tecnológico Superior de Guasave
Ingeniería en Sistemas Computacionales
Estructura de Datos, AED-1026
Material desarrollado utilizando Programación orientada a objetos, clases y nodos.
1. An algorithm is a sequence of unambiguous instructions to solve a problem and obtain an output for any valid input in a finite amount of time. Pseudocode is used to describe algorithms using a natural language format.
2. Analyzing algorithm efficiency involves determining the theoretical and empirical time complexity by counting the number of basic operations performed relative to the input size. Common measures are best-case, worst-case, average-case, and amortized analysis.
3. Important problem types for algorithms include sorting, searching, string processing, graphs, combinatorics, geometry, and numerical problems. Fundamental algorithms are analyzed for correctness and time/space complexity.
Iterative deepening search (IDS) is an algorithm that combines the completeness of breadth-first search with the memory efficiency of depth-first search. IDS performs an exhaustive depth-first search, increasing the depth limit by one each iteration, until the goal is found. IDS is guaranteed to find a solution if one exists, uses less memory than breadth-first search by limiting the depth of search at each iteration, and is more efficient than depth-first search which can get stuck in infinite loops.
Protección y Seguridad de los Sistemas OperativosRichard J. Nuñez
El documento compara la seguridad de los sistemas operativos Windows y Linux. Explica que Windows tiene más vulnerabilidades debido a su diseño cerrado, mientras que Linux es más seguro gracias a su código abierto y falta de usuarios comunes. También describe varios métodos de protección como usar cuentas de usuario con menos privilegios, mantener software actualizado y crear contraseñas seguras.
Este documento trata sobre la construcción de traductores (compiladores y analizadores) para lenguajes de programación usando herramientas como Lex/Yacc, JFlex/Cup y JavaCC. Explica conceptos básicos como el análisis léxico, sintáctico y semántico, y describe las diferentes etapas del proceso de compilación como preprocesamiento, análisis y síntesis. Además, detalla las características y uso de generadores de analizadores léxicos y sintácticos como PCLex,
Este documento describe diferentes tipos de librerías en Java, incluidas java.lang, java.io, java.net, java.util y java.awt. También cubre conceptos básicos como identificadores, literales, comentarios, palabras clave y separadores.
Este documento describe el algoritmo de búsqueda primero el mejor. Selecciona el nodo a expandir basado en una función de evaluación que devuelve un número representando lo deseable que sería expandir ese nodo. Expanda primero el nodo con la mejor evaluación. Aplica una función heurística h(n) que estima el costo mínimo desde un nodo a la meta. El ejemplo ilustra cómo el algoritmo expande nodos basándose en los valores h(n), encontrando la ruta óptima de costo 140 desde S0 a S8.
Graph traversal techniques are used to search vertices in a graph and determine the order to visit vertices. There are two main techniques: breadth-first search (BFS) and depth-first search (DFS). BFS uses a queue and visits the nearest vertices first, producing a spanning tree. DFS uses a stack and visits vertices by going as deep as possible first, also producing a spanning tree. Both techniques involve marking visited vertices to avoid loops.
An overview of gradient descent optimization algorithms Hakky St
This document provides an overview of various gradient descent optimization algorithms that are commonly used for training deep learning models. It begins with an introduction to gradient descent and its variants, including batch gradient descent, stochastic gradient descent (SGD), and mini-batch gradient descent. It then discusses challenges with these algorithms, such as choosing the learning rate. The document proceeds to explain popular optimization algorithms used to address these challenges, including momentum, Nesterov accelerated gradient, Adagrad, Adadelta, RMSprop, and Adam. It provides visualizations and intuitive explanations of how these algorithms work. Finally, it discusses strategies for parallelizing and optimizing SGD and concludes with a comparison of optimization algorithms.
Función Hash: metodos de división y de medio Cuadrado.Ana Castro
Este documento describe funciones hash y dos métodos para implementarlas: el método de división y el método del medio cuadrado. Una función hash mapea claves de entrada a valores hash de salida de tamaño fijo para usarlos como direcciones de almacenamiento. Estos métodos buscan minimizar colisiones cuando claves distintas generan el mismo valor hash. El método de división toma el residuo de dividir la clave entre un número, mientras que el método del medio cuadrado eleva la clave al cuadrado y toma dígitos centrales
1. Several sorting algorithms are compared including quicksort, heapsort, mergesort, insertion sort, selection sort, and bubble sort.
2. For most algorithms, the best, average, and worst case time complexities are listed as O(n log(n)), O(n log(n)), and O(n^2) respectively except for some cases like selection sort and bubble sort that have average and worst case complexities of O(n^2).
3. For space complexity, many algorithms have worst case complexities of O(n) except for mergesort which uses additional space and has a worst case complexity of O(n).
El documento describe las tablas hash, incluyendo su historia, funcionalidad y métodos de resolución de colisiones. Las tablas hash asocian claves con valores y permiten búsquedas rápidas en O(1). Funcionan transformando las claves con una función hash para localizar valores. Los métodos comunes para resolver colisiones son encadenamiento y direccionamiento abierto.
This document summarizes graph coloring using backtracking. It defines graph coloring as minimizing the number of colors used to color a graph. The chromatic number is the fewest colors needed. Graph coloring is NP-complete. The document outlines a backtracking algorithm that tries assigning colors to vertices, checks if the assignment is valid (no adjacent vertices have the same color), and backtracks if not. It provides pseudocode for the algorithm and lists applications like scheduling, Sudoku, and map coloring.
Este documento presenta varios ejercicios de Prolog para que el estudiante los practique. Incluye ejemplos como una canción estúpida, un diagnóstico de enfermedades y una red semántica. El objetivo final es que el estudiante diseñe e implemente su propio sistema experto en Prolog utilizando reglas o una red semántica, con al menos tres niveles de inferencia. Completar el ejercicio agregará puntos extra al puntaje final del estudiante.
El documento presenta una introducción a la asignatura de Programación Avanzada. Se detalla el contenido del curso, incluyendo temas como grafos, algoritmos de ordenamiento y búsqueda, y el algoritmo de Dijkstra para encontrar el camino más corto en un grafo. También incluye ejemplos y pseudocódigo para explicar el algoritmo de Dijkstra.
Este documento presenta un resumen de conceptos relacionados con grafos. Introduce conceptos básicos como nodos, aristas, grafos dirigidos y no dirigidos. Explica formas de representar grafos como matriz de adyacencia y lista de adyacencia. Luego, cubre algoritmos para recorrer grafos como BFS y DFS. También introduce conceptos adicionales como componentes conexas, grafos bipartitos y orden topológico. Finalmente, explica algoritmos para encontrar caminos mínimos como Dijkstra, Bellman-Ford y Floyd-War
El documento trata sobre algoritmos para encontrar la ruta más corta en un grafo. Explica el algoritmo de Dijkstra para hallar la ruta de costo mínimo entre un vértice origen y todos los demás vértices en un grafo dirigido con pesos no negativos. También discute variantes del problema de ruta más corta y complejidad de los algoritmos.
Este documento presenta una introducción a los grafos. Define un grafo como una estructura de datos compuesta por un conjunto de vértices y aristas que los conectan. Explica que los grafos permiten modelar problemas de conectividad y optimización. Luego define conceptos básicos como grado de un vértice, vértices adyacentes, caminos, ciclos y más. Finalmente introduce grafos dirigidos y métodos para representarlos como matrices y listas de adyacencia.
Este documento presenta una introducción a los grafos. Define un grafo como una estructura de datos compuesta por un conjunto de vértices y aristas que los conectan. Explica que los grafos permiten modelar problemas de conectividad y optimización. Luego define conceptos básicos como grado de un vértice, vértices adyacentes, caminos, ciclos y más. Finalmente introduce grafos dirigidos y métodos para representarlos como matrices y listas de adyacencia.
Este documento presenta una introducción a los grafos. Define grafos como estructuras de datos compuestas por vértices y aristas que los conectan. Explica que los grafos permiten modelar problemas de conectividad y optimización. Luego define conceptos clave como grado de un vértice, vértices adyacentes, caminos, ciclos, grafos dirigidos y sus representaciones como matrices y listas de adyacencia. Finalmente, introduce algoritmos para encontrar caminos como Dijkstra.
I1M2010-T22: Algoritmos sobre grafos en HaskellJosé A. Alonso
Se especifica el tipo abstracto de datos de las grafos, se presentan 2 implementaciones en Haskell del TAD y se estudia los algoritmos de recorrido en profundidad y en anchura y el algoritmo de Prim.
Este es el tema 22 del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
Este documento introduce Matlab y Simulink. Explica que Matlab es un lenguaje de alto nivel para realizar cálculos científicos y técnicos que incluye herramientas de visualización y un entorno de programación. Cubre temas como el entorno de Matlab, sintaxis básica, vectores, matrices, gráficos y resolución de sistemas de ecuaciones.
Este documento describe diferentes algoritmos para trazar líneas rectas en gráficos, incluyendo el algoritmo DDA y el algoritmo de Bresenham. El algoritmo DDA convierte líneas a través de muestreos incrementales utilizando solo cálculos enteros, mientras que el algoritmo de Bresenham determina qué píxeles rellenar basado en la inclinación de la línea para lograr líneas más definidas en pantallas de baja resolución.
Electrónica digital: Ruta de datos multiplexores y demultiplexores SANTIAGO PABLO ALBERTO
Este documento describe los multiplexores y demultiplexores. Los multiplexores tienen varias entradas y una salida, y se utilizan para combinar señales o implementar funciones lógicas. Los demultiplexores tienen una entrada y varias salidas, y se utilizan para distribuir señales o decodificar códigos. El documento también explica cómo diseñar circuitos con multiplexores y demultiplexores en árboles, y cómo utilizarlos para cambiar entre los códigos BCD y Gray.
Este documento describe el algoritmo de Bresenham para dibujar líneas y círculos de forma eficiente en una pantalla de ordenador. Explica la lógica matemática detrás del algoritmo y proporciona ejemplos de código en C++ para implementarlo. También incluye una bibliografía de fuentes adicionales sobre el tema.
Este documento presenta un informe sobre un proyecto de investigación sobre algoritmos de grafos. En la primera sección, introduce conceptos básicos sobre teoría de grafos como nodos, aristas, caminos, subgrafos, conectividad y tipos de grafos como árboles. Luego describe algoritmos clásicos para problemas de grafos como Dijkstra y Floyd-Warshall para encontrar caminos mínimos. Finalmente, discute el desarrollo de un editor de grafos como herramienta para el proyecto.
Ernesto Cuadros Vargas (E2)
Alex Cuadros Vargas (E2)
Luis Diaz Basurco (E4)
Christian López del Alámo (E4)
Christian López del Alámo (E4)
Edwin Huarhua Chambi (E4)
Manuel Bellido Oviedo (E4)
Este documento presenta conceptos básicos sobre vectores y matrices. Explica qué es un vector, cómo representarlos gráficamente y realizar operaciones como suma, resta y multiplicación por escalares. También introduce las combinaciones lineales, que son sumas de vectores multiplicados por coeficientes. Finalmente, proporciona ejemplos y ejercicios relacionados con estos temas fundamentales de álgebra lineal.
Matlab es un entorno de cómputo que permite realizar cálculos matemáticos, estadísticos y gráficos. Ofrece herramientas para álgebra lineal, cálculo, estadística, procesamiento de señales y simulación. Permite realizar operaciones matemáticas, lógicas y comparaciones, así como manipular vectores y matrices.
Este documento contiene 39 preguntas sobre programación en Python relacionadas con conceptos matemáticos como representación de números, álgebra booleana, cálculo de áreas y perímetros geométricos, expresiones y operaciones aritméticas, cadenas y tipos de datos. Las preguntas van desde definir algoritmos hasta evaluar expresiones, pasando por analizar la validez de identificadores y operadores.
Este documento contiene 39 preguntas sobre programación en Python relacionadas con conceptos matemáticos como representación de números, álgebra booleana, cálculo de áreas y perímetros geométricos, expresiones y operaciones aritméticas, cadenas y tipos de datos. Las preguntas van desde definir algoritmos hasta evaluar expresiones, pasando por diseñar programas sencillos y analizar su funcionamiento.
Este documento introduce el software Octave. Octave es una herramienta de línea de comandos para resolver problemas numéricos que es muy compatible con MATLAB pero de código abierto. Explica las características básicas de Octave como la ventana de comandos, variables, operaciones aritméticas, funciones matemáticas predeterminadas, arreglos unidimensionales y bidimensionales, y operaciones con matrices y vectores.
El documento presenta los pasos para resolver varios problemas sobre grafos y dígrafos. Se pide encontrar la matriz de adyacencia y de incidencia de un grafo, determinar si es conexo, simple, regular o completo. También se solicita encontrar una cadena, ciclo, árbol generador y demostrar si es euleriano o hamiltoniano para un grafo, así como determinar si un dígrafo es simple, encontrar una cadena y ciclo, y demostrar si es fuertemente conexo usando la matriz de accesibilidad.
Similar a Clase 9 grafos parte iii (cam min - arbol min)-ay_ed-2014 (20)
Equipo 4. Mezclado de Polímeros quimica de polimeros.pptxangiepalacios6170
Presentacion de mezclado de polimeros, de la materia de Quimica de Polímeros ultima unidad. Se describe la definición y los tipos de mezclado asi como los aditivos usados para mejorar las propiedades de las mezclas de polimeros
Los puentes son estructuras esenciales en la infraestructura de transporte, permitiendo la conexión entre diferentes
puntos geográficos y facilitando el flujo de bienes y personas.
3. Algoritmos y Estructuras de Datos 3
Agenda - Grafos
• Caminos de costo mínimo
• Árbol de expansión mínimo
4. Algoritmos y Estructuras de Datos 4
Agenda - Grafos
• Caminos de costo mínimo
• Árbol de expansión mínimo
5. Algoritmos y Estructuras de Datos 5
Agenda – Grafos
Caminos de costo mínimoCaminos de costo mínimo
DefiniciónDefinición
Algoritmos para el cálculo del camino mínimo desde un origenAlgoritmos para el cálculo del camino mínimo desde un origen
en:en:
Grafos sin pesoGrafos sin peso
Grafos con pesos positivosGrafos con pesos positivos
• Algortimo de Dijkstra: dos implementacionesAlgortimo de Dijkstra: dos implementaciones
Grafos con pesos positivos y negativosGrafos con pesos positivos y negativos
Grafos acíclicosGrafos acíclicos
Algoritmo para el cálculo de los caminos mínimos entre todos losAlgoritmo para el cálculo de los caminos mínimos entre todos los
pares de vérticespares de vértices
6. Algoritmos y Estructuras de Datos 6
Camino de costo mínimo
Definición
Sea G=(V,A) un grafo dirigido y pesado, el costo c(i,j)
está asociado a la arista v(i,j).
Dado un camino: v1, v2, v3,…….vN
El costo del camino es:
Este valor también se llama longitud del camino pesado.
La longitud del camino no pesado es la cantidad de
aristas
∑
−
=
+=
1
1
)1,(
N
i
iicC
7. Algoritmos y Estructuras de Datos 7
Camino de costo mínimo
Definición (cont.)
El camino de costo mínimo desde un vértice vi a otro
vértice vj es aquel en que la suma de los costos de las
aristas es mínima.
Esto significa que:
es mínima∑
−
=
+=
1
1
)1,(
N
i
iicC
9. Algoritmos y Estructuras de Datos 9
Algoritmos de Caminos mínimos
Grafos sin peso
Grafos con pesos positivos
Grafos con pesos positivos y negativos
Grafos dirigidos acíclicos
10. Algoritmos y Estructuras de Datos 10
Algoritmos de Caminos mínimos
Los algoritmos calculan los caminos
mínimos desde un vértice origen s a
todos los restantes vértices del grafo
11. Algoritmos y Estructuras de Datos 11
Algoritmos de Caminos mínimos
Grafos sin peso
Estrategia: Recorrido en amplitud (BFS)
Pasos:
Avanzar por niveles a partir del origen, asignando
distancias según se avanza (se utiliza una cola)
Inicialmente, es Dw=∞. Al inspeccionar w se
reduce al valor correcto Dw=Dv+1
Desde cada v, visitamos a todos los nodos
adyacentes a v
13. 1313
Vi Dv Pv
Conoc
V0 ∞ 0 0
V1 ∞ 0 0
V2 0 0 0
V3 ∞ 0 0
V4 ∞ 0 0
V5 ∞ 0 0
V6 ∞ 0 0
Valores iniciales de la tabla
Algoritmos de Caminos mínimos
Grafos sin peso (cont.)
∞
∞ ∞
∞
∞ ∞
14. 1414
Algoritmo Caminos mínimos basado en BFS
Camino_min_GrafoNoPesadoG,s) {
(1) para cada vértice v Є V hacer
(2) Dv = ∞; Pv = 0; Conocv= 0;
(3) fin para
(4) Ds = 0; Encolar (Q,s); Conocv= 1;
(5) Mientras (not esVacio(Q)) hacer
(6) Desencolar (Q,u);
(7) Marcar u como conocido;
(8) para c/vértice w Є V adyacente a u hacer
(9) si w no es conocido entonces
(10) Dw = Du + 1;
(11) Pw = u;
(12) Encolar(Q,w); Conocv= 1;
(13) fin si
(14) fin para
(15) fin mientras
}
15. 1515
Algoritmo Caminos mínimos basado en BFS
Camino_min_GrafoNoPesadoG,s) {
(1) para cada vértice v Є V hacer
(2) Dv = ∞; Pv = 0; Conocv= 0;
(3) fin para
(4) Ds = 0; Encolar (Q,s); Conocv= 1;
(5) Mientras (not esVacio(Q)) hacer
(6) Desencolar (Q,u);
(7) Marcar u como conocido;
(8) para c/vértice w Є V adyacente a u hacer
(9) si w no es conocido entonces
(10) Dw = Du + 1;
(11) Pw = u;
(12) Encolar(Q,w); Conocw= 1;
(13) fin si
(14) fin para
(15) fin mientras
}
16. 1616
Vi Dv Pv
Conoc
V0 ∞ 0 0
V1 ∞ 0 0
V2 0 0 0
V3 ∞ 0 0
V4 ∞ 0 0
V5 ∞ 0 0
V6 ∞ 0 0
Valores iniciales de la tabla
Algoritmos de Caminos mínimos
Grafos sin peso (cont.)
17. 1717
Vi Dv Pv
V0 ∞ 0
V1 ∞ 0
V2 0 0
V3 ∞ 0
V4 ∞ 0
V5 ∞ 0
V6 ∞ 0
Valores iniciales de la tabla
Programación 3
Algoritmos de Caminos mínimos
Grafos sin peso (cont.)
∞
∞ ∞
∞
∞ ∞
18. 1818
Algoritmo Caminos mínimos basado en BFS
Camino_min_GrafoNoPesadoG,s) {
(1) para cada vértice v Є V hacer
(2) Dv = ∞; Pv = 0;
(3) fin para
(4) Ds = 0; Encolar (Q,s);
(5) Mientras (not esVacio(Q)) hacer
(6) Desencolar(Q,u);
(7) para c/vértice w Є V adyacente a u hacer
(8) si Dw = ∞ entonces
(9) Dw = Du + 1;
(10) Pw = u;
(11) Encolar(Q,w);
(12) fin si
(13) fin para
(14) fin mientras
}
19. Algoritmos y Estructuras de Datos 19
Algoritmos de Caminos mínimos
Grafos con pesos positivos – Algoritmo de Dijkstra
Estrategia: Algoritmo de Dijkstra
Pasos:
Dado un vértice origen s, elegir el vértice v que
esté a la menor distancia de s, dentro de los
vértices no procesados
Marcar v como procesado
Actualizar la distancia de w adyacente a v
20. Algoritmos y Estructuras de Datos 20
Algoritmo de Dijkstra (cont.)
Para cada vértice v mantiene la siguiente
información:
Dv : distancia mínima desde el origen (inicialmente ∞ para
todos lo vértices excepto el origen con valor 0)
Pv : vértice por donde paso para llegar
Conocido : dato booleano que me indica si está procesado
(inicialmente todos en 0)
21. Algoritmos y Estructuras de Datos 21
Algoritmo de Dijkstra (cont.)
La actualización de la distancia de los adyacentes
w se realiza con el siguiente criterio:
Se compara Dw con Dv + c(v,w)
Se actualiza si Dw > Dv + c(v,w)
Distancia de s a w
(sin pasar por v)
Distancia de s a w,
pasando por v
22. Algoritmos y Estructuras de Datos 22
Algoritmo de Dijkstra
Ejemplo
V Dv Pv
Conoc.
1 0 0 0
2 ∞ 0 0
3 ∞ 0 0
4 ∞ 0 0
5 ∞ 0 0
6 ∞ 0 0
s
Valores iniciales de la tabla
23. Algoritmos y Estructuras de Datos 23
Algoritmo de Dijkstra
Ejemplo (cont.)
V Dv Pv
Conoc.
1 0 0 1
2 ∞ 0 0
3 40 1 0
4 ∞ 0 0
5 10 1 0
6 5 1 0
•Valores al seleccionar el vértice 1
•Actualiza la distancia de 3, 5 y 6
s
24. Algoritmos y Estructuras de Datos 24
Algoritmo de Dijkstra
Ejemplo (cont.)
V Dv Pv
Conoc.
1 0 0 1
2 ∞ 0 0
3 40 1 0
4 ∞ 0 0
5 10 1 0
6 5 1 0
s
25. Algoritmos y Estructuras de Datos 25
Algoritmo de Dijkstra
Ejemplo (cont.)
V Dv Pv
Conoc.
1 0 0 1
2 25 6 0
3 40 1 0
4 ∞ 0 0
5 10 1 0
6 5 1 1
s
•Valores al seleccionar el vértice 6
•Actualiza la distancia de 2
27. Algoritmos y Estructuras de Datos 27
Algoritmo de Dijkstra
Ejemplo (cont.)
V Dv Pv
Conoc.
1 0 0 1
2 25 6 0
3 40 1 0
4 30 5 0
5 10 1 1
6 5 1 1
s
•Valores al seleccionar el vértice 5
•Actualiza la distancia de 4
28. Algoritmos y Estructuras de Datos 28
Algoritmo de Dijkstra
Ejemplo (cont.)
Los próximos vértices
a elegir son: 2, 4 y 3 en
ese orden.
V Dv Pv
Conoc.
1 0 0 1
2 25 6 1
3 35 4 1
4 30 5 1
5 10 1 1
6 5 1 1
El resultado final es:
29. Algoritmos y Estructuras de Datos 29
Algoritmo de Dijkstra
Dijkstra(G,w, s){
(1) para cada vértice v Є V hacer
(2) Dv = ∞; Pv = 0;
(3) fin para
(4) Ds = 0;
(5) para cada vértice v Є V hacer
(6) u = vérticeDesconocidoMenor Dist;
(7) Marcar u como conocido;
(8) para cada vértice w Є V adyacente a u hacer
(9) si w no está conocido entonces
(10) si Dw > Du + c(u,w) entonces
(11) Dw = Du + c(u,w);
(12) Pw = u;
(13) fin si
(14) fin si
(15) fin para
(16) fin para
}
30. Algoritmos y Estructuras de Datos 30
Algoritmo de Dijkstra
Tiempo de ejecución (I)
El bucle para de la línea (5) se ejecuta para todos los vértices
|V| iteraciones
La operación vérticeDesconocidoMenorDist es O(|V|) y dado que se
realiza |V| veces
el costo total de vérticeDesconocidoMenorDist es O(|V|2
)
El bucle para de la línea (8) se ejecuta para los vértices adyacentes de cada
vértice. El número total de iteraciones será la cantidad de aristas del grafo.
|E| iteraciones
El costo total del algoritmo es (|V|2
+ |E| ) es O(|V|2
)
31. Algoritmos y Estructuras de Datos 31
Algoritmo de Dijkstra
Tiempo de ejecución (II)
Optimización: la operación vérticeDesconocidoMenorDist es más eficiente si
almacenamos las distancias en una heap.
La operación vérticeDesconocidoMenorDist es O(log|V|) y dado que se
realiza |V| veces
el costo total de vérticeDesconocidoMenorDist es O(|V| log |V|)
El bucle para de la línea (8) supone modificar la prioridad (distancia) y
reorganizar la heap. Cada iteración es O(log|V|)
realiza|E| iteraciones, O(|E| log|V|)
El costo total del algoritmo es (|V| log|V|+ |E| log|V|) es O(|E| log|V|)
32. Algoritmos y Estructuras de Datos 32
Algoritmo de Dijkstra
Tiempo de ejecución (III)
Variante: usando heap la actualización de la línea (11) se puede
resolver insertando w y su nuevo valor Dw cada vez que éste se
modifica.
El tamaño de la heap puede crecer hasta |E|.
Dado que |E| ≤ |V|2
, log |E| ≤ 2 log |V|, el costo total del
algoritmo no varía
El costo total del algoritmo es O(|E| log|V|)
33. Algoritmos y Estructuras de Datos 33
Algoritmos de Caminos mínimos
Grafos con pesos positivos y negativos
Estrategia: Encolar los vértices
Si el grafo tiene aristas negativas, el algoritmo de
Dijkstra puede dar un resultado erróneo.
s
uv
-5
-10
2
V Dv Pv Conoc.
s 0 0 1
u -5 s 1
v 2 s 1
Error !!
La distancia mínima
de s a u es -8
34. Algoritmos y Estructuras de Datos 34
Algoritmos de Caminos mínimos
Grafos con pesos positivos y negativos (cont.)
Pasos:
Encolar el vértice origen s.
Procesar la cola:
Desencolar un vértice.
Actualizar la distancia de los adyacentes Dw siguiendo
el mismo criterio de Dijkstra.
Si w no está en la cola, encolarlo.
El costo total del algoritmo es O(|V| |E|)
35. Algoritmos y Estructuras de Datos 35
Algoritmos de Caminos mínimos
Grafos acíclicos
Estrategia: Orden Topológico
Optimización del algoritmo de Dijkstra
La selección de cada vértice se realiza siguiendo el orden
topológico
Esta estrategia funciona correctamente, dado que al
seleccionar un vértice v, no se va a encontrar una distancia
dv menor, porque ya se procesaron todos los caminos que
llegan a él
El costo total del algoritmo es O(|V| + |E|)
36. Algoritmos y Estructuras de Datos 36
Algoritmos de Caminos mínimos
Grafos acíclicos
Camino_min_GrafoDirigidoAcíclico(G,s)
Ordenar topológicamente los vértices de G;
Inicializar Tabla de Distancias(G, s);
para c/vértice u del orden topológico hacer
para c/vértice w Є V adyacente a u hacer
si Dw > Du + c(u,w) entonces
Dw = Du + c(u,w);
Pw = u;
37. Algoritmos y Estructuras de Datos 37
Algoritmos de Caminos mínimos
Grafos acíclicos
Camino_min_GrafoDirigidoAcíclico(G,s) {
Calcular el grado_in de todos los vértices
Encolar en Q los vértices con grado_in = 0
para cada vértice v Є V hacer
Dv = ∞; Pv = 0;
fin para
Ds = 0;
Mientras (!esVacio(Q)) hacer
Desencolar(Q,u);
para c/vértice w Є V adyacente a u hacer
Decrementar grado de entrada de w
si grado_in[w] = 0 entonces Encolar(Q,w);
si Du != ∞ entonces
si Dw > Du + c(u,w) entonces
Dw = Du + c(u,w);
Pw = u;
fin si
fin para
fin mientras
38. Algoritmos y Estructuras de Datos 38
Caminos mínimos entre todos los pares
de vértices
Estrategia: Algoritmo de Floyd
Lleva dos matrices D y P, ambas de |V| x |V|
Matriz de costos Matriz de vértices
mínimos intermedios
El costo total del algoritmo es O(|V|3
)
39. Algoritmos y Estructuras de Datos 39
Algoritmo de Floyd
para k=1 hasta cant_Vértices(G) hacer
para i=1 hasta cant_Vértices(G) hacer
para j=1 hasta cant_Vértices(G) hacer
si D[i,j] > D[i,k] + D[k,j] entonces
D[i,j] = D[i,k] + D[k,j];
P[i,j] = k;
fin si
fin para
fin para
fin para
Toma cada vértice como intermedio, para
calcular los caminos
Distancia entre los
vértices i y j, pasando
por k
40. Algoritmos y Estructuras de Datos 40
Agenda - Grafos
• Caminos de costo mínimo
• Árbol de expansión mínimo
41. Algoritmos y Estructuras de Datos 41
Agenda – Grafos
Árbol de expansión mínimo
Definición
Algoritmo de Prim
Algoritmo de Kruskal
42. Algoritmos y Estructuras de Datos 42
Árbol de expansión mínima
Definición
Dado un grafo G=(V , E) no dirigido y conexo
El árbol de expansión mínima es un árbol formado por
las aristas de G que conectan todos los vértices con un
costo total mínimo.
43. Algoritmos y Estructuras de Datos 43
Árbol de expansión mínima
Algoritmo de Prim
Construye el árbol haciéndolo crecer por etapas
En cada etapa:
- elige un vértice como raíz
- le agrega al árbol una arista y un vértice
asociado
Selecciona la arista (u,v) de mínimo costo que
cumpla: u ∈ árbol y v ∉ árbol
44. Algoritmos y Estructuras de Datos 44
Árbol de expansión mínima
Algoritmo de Prim (cont.)
Construye el árbol haciéndolo crecer por etapas
Ejemplo:
Nodo raíz
Se agrega la arista (1,3) y el vértice 3
1° Paso
45. Algoritmos y Estructuras de Datos 45
Árbol de expansión mínima
Algoritmo de Prim (cont.)
Se agrega la arista
(3,6) y el vértice 6
2° Paso 3° Paso
Se agrega la arista
(6,4) y el vértice 4
4° y 5° Pasos
- Se agrega la arista (3,2) y el
vértice 2
- Se agrega la arista (2,5) y el
vértice 5
46. Algoritmos y Estructuras de Datos 46
Algoritmo de Prim
Implementación
La implementación es muy similar al algoritmo de
Dijkstra
Se modifica la forma de actualizar la distancia de los
adyacentes:
Se compara Dw con c(v,w)
Se actualiza si Dw > c(v,w)
Distancia mínima a w (sin
tener en cuenta v)
Distancia de v a w
47. Algoritmos y Estructuras de Datos 47
Algoritmo de Prim
Tiempo de Ejecución
Se hacen las mismas consideraciones que para el
algoritmo de Dijkstra
Si se implementa con una tabla secuencial:
El costo total del algoritmo es O(|V|2
)
Si se implementa con heap:
El costo total del algoritmo es O(|E| log|V|)
48. Algoritmos y Estructuras de Datos 48
Árbol de expansión mínima
Algoritmo de Kruskal
Selecciona las aristas en orden creciente según su
peso y las acepta si no originan un ciclo
El invariante que usa me indica que en cada punto
del proceso, dos vértices pertenecen al mismo
conjunto si y sólo sí están conectados
Si dos vértices u y v están en el mismo conjunto, la
arista (u,v) es rechazada porque al aceptarla forma
un ciclo
49. Algoritmos y Estructuras de Datos 49
Árbol de expansión mínima
Algoritmo de Kruskal (cont.)
Inicialmente cada vértice pertenece a su propio
conjunto
|V| conjuntos con un único elemento
Al aceptar una arista se realiza la Unión de dos
conjuntos
Las aristas se organizan en una heap, para ir
recuperando la de mínimo costo en cada paso
50. Algoritmos y Estructuras de Datos 50
Árbol de expansión mínima
Algoritmo de Kruskal (cont.)
Ejemplo:
51. Algoritmos y Estructuras de Datos 51
Árbol de expansión mínima
Algoritmo de Kruskal (cont.)
Inicialmente cada vértice
está en su propio conjunto
Se agrega la arista (1,2)
Se agrega
la arista
(3,6)
Se agrega la
arista (4,6)
52. Algoritmos y Estructuras de Datos 52
Árbol de expansión mínima
Algoritmo de Kruskal (cont.)
Se agrega la arista (2,6) Se agrega la arista (3,5)
53. Algoritmos y Estructuras de Datos 53
Algoritmo de Kruskal
Tiempo de Ejecución
Se organizan las aristas en una heap, para optimizar
la recuperación de la arista de mínimo costo
El tamaño de la heap es |E|, y extraer cada arista
lleva O(log |E|)
El tiempo de ejecución es O(|E |log|E|)
Dado que |E| ≤ |V|2
, log |E| ≤ 2 log |V|,
el costo total del algoritmo es O(|E |log|V|)