Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Algoritmos y Estructuras de Control, Apuntes de Estructuras de Datos y Algoritmos

Algoritmos y Estructuras de Control

Tipo: Apuntes

2025/2026

Subido el 09/03/2026

gabriel-alejandro-lopez-quesada
gabriel-alejandro-lopez-quesada 🇦🇷

5 documentos

1 / 12

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Año 2024 - Estructura de Datos y Algoritmos
Docente a cargo: Mgtr. Escobal Blanco Cesar
JTP: Lic. López Quesada Gabriel Alejandro
Página 45
En las Ciencias de la Computación cuando se dice que un problema tiene solución, significa que existe
un algoritmo susceptible de implantarse en una computadora, capaz de producir la respuesta correcta para
cualquier instancia del problema en cuestión.
Concepto de Algoritmos: Un algoritmo es una secuencia de instrucciones para resolver un problema
determinado. Más precisamente se puede definir como una secuencia finita de instrucciones, cada una de
las cuales tiene un significado preciso y puede ejecutarse con una cantidad finita de esfuerzo en un tiempo
finito.
En otras palabras, un algoritmo es un método para resolver un problema determinado mediante una
serie de pasos precisos, definidos y finitos.
Características de un Algoritmo:
1. Preciso: indica la secuencia de realización de cada paso.
2. Definido: cada instrucción debe tener un significado determinado y específico.
3. Finito: tiene fin, tiene un número finito de pasos o instrucciones. Un algoritmo debe producir
un resultado en un tiempo finito.
Los métodos que utilizan algoritmos se denominan métodos algorítmicos”, en oposición a los
métodos que implican algún juicio o interpretación que se denominan “métodos heurísticos”. Los métodos
algorítmicos pueden ser implementados o utilizados en computadoras.
Ejemplos de algoritmos son: instrucciones para la instalación de un equipo electrónico, una receta de
cocina, etc.
pf3
pf4
pf5
pf8
pf9
pfa

Vista previa parcial del texto

¡Descarga Algoritmos y Estructuras de Control y más Apuntes en PDF de Estructuras de Datos y Algoritmos solo en Docsity!

Docente a cargo: Mgtr. Escobal Blanco Cesar JTP: Lic. López Quesada Gabriel Alejandro En las Ciencias de la Computación cuando se dice que un problema tiene solución, significa que existe un algoritmo susceptible de implantarse en una computadora, capaz de producir la respuesta correcta para cualquier instancia del problema en cuestión. Concepto de Algoritmos : Un algoritmo es una secuencia de instrucciones para resolver un problema determinado. Más precisamente se puede definir como una secuencia finita de instrucciones, cada una de las cuales tiene un significado preciso y puede ejecutarse con una cantidad finita de esfuerzo en un tiempo finito. En otras palabras, un algoritmo es un método para resolver un problema determinado mediante una serie de pasos precisos, definidos y finitos.

Características de un Algoritmo:

  1. Preciso : indica la secuencia de realización de cada paso.
  2. Definido : cada instrucción debe tener un significado determinado y específico.
  3. Finito : tiene fin, tiene un número finito de pasos o instrucciones. Un algoritmo debe producir un resultado en un tiempo finito. Los métodos que utilizan algoritmos se denominan “métodos algorítmicos”, en oposición a los métodos que implican algún juicio o interpretación que se denominan “métodos heurísticos”. Los métodos algorítmicos pueden ser implementados o utilizados en computadoras. Ejemplos de algoritmos son: instrucciones para la instalación de un equipo electrónico, una receta de cocina, etc.

Docente a cargo: Mgtr. Escobal Blanco Cesar JTP: Lic. López Quesada Gabriel Alejandro Los algoritmos se pueden expresar mediante: fórmulas, diagramas de flujo o pseudocódigos. Esta última representación es la más utilizada en lenguajes estructurados, como por ejemplo: C, Pascal, etc. La confección de un algoritmo es algo personal, por lo que para resolver un problema se puede llegar a distintos algoritmos, pero siempre debemos tener en cuenta su aplicación práctica. Para el diseño del algoritmo se utiliza la técnica de diseño descendente (top-down) o modular, la cual consiste en dividir al problema en un conjunto de subproblemas más sencillos y de menor nivel, hasta implementar una solución en la computadora, denominándose “refinamiento sucesivo” al proceso de dividir el problema en cada etapa, expresando cada paso más detalladamente. Cada subproblema es resuelto mediante un módulo o subprograma que tiene un solo punto de entrada y un solo punto de salida. Los módulos pueden ser planteados, codificados, comprobados y depurados independientemente y luego combinados entre sí mediante un programa principal que convoca a los subprogramas que a su vez, pueden llamar a otros subprogramas. De todo esto surge una característica más de los algoritmos; tiene 1 sola entrada y 1 sola salida al programa y a cada estructura o módulo que lo compone. También debemos señalar que el diseño del algoritmo es independiente del lenguaje de programación en el que se va a codificar posteriormente. Un algoritmo, entonces, nace en respuesta a la aparición de un determinado problema. Un algoritmo está compuesto de una serie finita de pasos que convergen en la solución de un problema, pero además estos pasos tienen un orden específico. Entenderemos como problema a cualquier acción o evento que necesite cierto grado de análisis, desde la simpleza de cepillarse los dientes hasta la complejidad del ensamblado de un automóvil. En general, cualquier problema puede ser solucionado utilizando un algoritmo, en este sentido podemos utilizar los algoritmos para resolver problemas de cómputo.

Docente a cargo: Mgtr. Escobal Blanco Cesar JTP: Lic. López Quesada Gabriel Alejandro Algoritmo a grandes rasgos: Analizar los resultados del examen, decidir si se debe aumentar o no la carrera. Se puede refinar como sigue: ✓ Inicializar variables. ✓ Introducir las primeras 10 calificaciones y contar los aprobados y los desaprobados. ✓ Imprimir un resumen de los resultados de exámenes y decidir si se debe continuar o no la carrera.

Pseudocódigo

Pseudocódigo es un lenguaje artificial e informal que ayuda a los programadores a desarrollar algoritmos. El pseudocódigo es similar al lenguaje cotidiano; es cómodo y amable con el usuario, aunque no es realmente un verdadero lenguaje de computadora. No se ejecutan en las computadoras más bien sirven para ayudar al programador a razonar un programa antes de intentar escribirlo en algún lenguaje. Un programa ejecutado en pseudocódigo puede ser fácilmente convertido en un programa en cualquier lenguaje de programación, si es que está bien elaborado. Del ejemplo propuesto, supongamos que la nota para aprobar el examen es de 7. El enunciado en pseudocódigo de esa parte sería: Llevando el ejemplo a pseudocódigo. Se puede refinar más aun el algoritmo: Si calificación >= 7 entonces Mostrar "Aprobado" Si no Mostrar "No Aprobado" Fin Si Imagen 46. Ejemplo de pseudocódigo

Docente a cargo: Mgtr. Escobal Blanco Cesar JTP: Lic. López Quesada Gabriel Alejandro

Diagramas de Flujo

Un diagrama de flujo es una representación gráfica de un algoritmo o de una parte del mismo. Los diagramas de flujo ayudan en la comprensión de la operación de las estructuras de control ( Si, Mientras ). La ventaja de utilizar un algoritmo es que se lo puede construir independientemente de un lenguaje de programación, pues al momento de llevarlo a código se lo puede hacer en cualquier lenguaje. Dichos diagramas se construyen utilizando ciertos símbolos de uso especial como son rectángulos, diamantes, óvalos, y pequeños círculos, estos símbolos están conectados entre sí por flechas, conocidas como líneas de flujo. A continuación se detallarán estos símbolos. Terminal. Representa el inicio y terminación de un proceso o programa. Inicializar variables. Inicializar los aprobados (aprobados) en 0 Inicializar los desaprobados (desaprobados) en 0 Inicializar el número de estudiantes (estudiantes) en 0 Leer las primeras 10 calificaciones Mientras (while) el contador estudiantes es menor o igual que 10 entonces Introducir el siguiente resultado de examen Si el estudiante aprobó Sumar 1 a aprobados Si no Sumar 1 a desaprobados Fin Si Sumar 1 al contador estudiantes Fin Mientras Imprimir el número de aprobados Imprimir el número de desaprobados Si estudiantes es más 8 entonces Imprimir "Continuar con la carrera". Fin Si Fin Imagen 70. Ejemplo de pseudocódigo

Docente a cargo: Mgtr. Escobal Blanco Cesar JTP: Lic. López Quesada Gabriel Alejandro Salida. Es usado para mostrar datos o resultados. Es usado para mostrar datos o resultados. Conector. Se coloca al principio y fin de una parte de programa, enlaza dos partes cualesquiera de un programa. Línea de flujo o indicador de dirección. Indica el sentido de la ejecución de las operaciones. SI nota >= No Promociona^ Promociona NO SI Imagen 75. Ejemplo del uso del símbolo Salida 2 2 SI nota >= No Promociona^ Promociona NO SI SI nota <= NO SI Imagen 76. Ejemplo del uso del símbolo Conector 2 SI nota >= No Promociona^ Promociona NO SI Imagen 77. Ejemplo del uso del símbolo Línea de Flujo

Docente a cargo: Mgtr. Escobal Blanco Cesar JTP: Lic. López Quesada Gabriel Alejandro Representaremos el correspondiente diagrama de flujo del ejemplo propuesto.

Estructuras de control

Las estructuras de control de un lenguaje de programación son métodos para especificar el orden en que las instrucciones de un algoritmo se ejecutarán. El orden de ejecución de las sentencias o instrucciones determina el “flujo de control”. Por consiguiente, las estructuras de control son fundamentales en los lenguajes de programación y en los diseños de algoritmos. Las estructuras básicas de control son:

  1. Secuencia
  2. Selección (IF – CASE)
  3. Repetición (REPEAT – WHILE – FOR) Inicio Aprobados 0 Desaprobados 0 Resultado 0 Estud 1 Es tu d Leer Resultado Res ulta Desaprobados = Desaprobados + 1 Aprobados = Aprobados + 1 Estud = Estud + 1 Aprobados Desaprobado s Aprobad o > 8 Aumentar la Carrera Fin SI SI SI NO NO NO Inicio Aprobados 0 Desaprobados 0 Resultado 0 Estud 1 Estud <= 10 Leer Resultado Resultado = 1 Aprobados = Aprobados + 1 Desaprobados = Desaprobados + 1 Estud = Estud + 1 Aprobado > 8 Fin Aprobados Desaprobados Aumentar la Carrera Si No Si No Si No Imagen 78. Diagrama de Flujo Imagen 79. Diagrama de Flujo

Docente a cargo: Mgtr. Escobal Blanco Cesar JTP: Lic. López Quesada Gabriel Alejandro cronómetro en mano), o calcularse sobre el código contando instrucciones a ejecutar y multiplicando por el tiempo requerido por cada instrucción. Así, una parte de programa como: Siendo t 1 el tiempo que lleve ejecutar la serie "S 1 " de sentencias, y t 2 el que lleve la serie "S 2 ". Prácticamente todos los programas reales incluyen alguna sentencia condicional, haciendo que las sentencias efectivamente ejecutadas dependan de los datos concretos que se le presenten. Esto hace que más que un valor T(N) debamos hablar de un rango de valores: Los extremos son habitualmente conocidos como "caso peor" y "caso mejor". Entre ambos se hallara algún "caso promedio" o más frecuente. Cualquier función T(N) incluye referencias al parámetro N y a una serie de constantes "Ti" que dependen de factores externos al algoritmo como pueden ser la calidad del código generado por el compilador y la velocidad de ejecución de instrucciones del procesador que lo ejecuta. Dado que es fácil cambiar de compilador y que la potencia de los procesadores crece a un ritmo vertiginoso, intentaremos analizar los algoritmos con algún nivel de independencia de estos factores; es decir, buscaremos estimaciones generales ampliamente válidas.

Ordenes de Complejidad

El orden o función matemática  (Omega Mayúscula) es una función que muestra la tendencia de variación de la función T(N) ante una variación en el volumen de datos. Es decir, que el orden, es una función matemática que indica tendencia, sin dar un valor exacto.

  1. Orden Constante(1) : El orden constante significa que el tiempo de ejecución no depende de la masa de datos (n). S 1 ; for (int i= 0; i < N; i++) S 2 ; Requiere T(N)= t 1 + t 2 *N Tmin (N) <= T (N) <= Tmax (N)

Docente a cargo: Mgtr. Escobal Blanco Cesar JTP: Lic. López Quesada Gabriel Alejandro

  1. Orden Lineal(n) : Significa que el orden es proporcional a la masa de datos (n).
  2. Orden Cuadrática(n^2 ) : Se da cuando los datos son procesados de a pares o cuando existen lazos anidados.
  3. Orden Cúbico(n^3 ) : Son útiles cuando el volumen de datos es extremadamente pequeño.
  4. Orden Logarítmico(n, logn) /(logn) : Puede ser logarítmico natural o decimal. Es el mejor orden.
  5. Orden Exponencial ( 2n) : es el peor orden.

Análisis de Algoritmos

Cuando se resuelve un problema, con frecuencia, se puede disponer de varios algoritmos para solucionarlo. Por lo tanto, debemos tener presente 2 objetivos:

  1. Que el algoritmo sea fácil de entender, modificar y depurar
  2. Que el algoritmo use eficientemente los recursos del computador, en especial, que se ejecute con la mayor rapidez posible. El programador debe saber cuándo usar uno u otro criterio. Generalmente, cuando se va a escribir un programa que se usará pocas veces, el primer objetivo es el más importante. Es decir, que deberá elegirse el algoritmo que sea más fácil de aplicar correctamente. Por el contrario, cuando el algoritmo se va a utilizar muchas veces, es más ventajoso realizar un algoritmo complejo, siempre que su tiempo de ejecución sea significativamente menor que el otro programa más simple. En otras palabras, el segundo objetivo es el que prima. Existen diferentes formas de analizar un algoritmo:
  3. Subjetivo : Analiza si el código es legible, si el algoritmo es extenso, si es más complicado innecesariamente, etc. Por esos motivos no se lo utiliza.
  4. Objetivo : Analiza el espacio que ocupa el algoritmo y el tiempo de ejecución, a su vez admite 2 tipos de análisis.
  • Análisis a posteriori: se codifica el algoritmo, se lo ejecuta y se analizan los resultados. Lo que se está analizando con este método en realidad es la velocidad del procesador, el espacio del lenguaje utilizado y el compilador. Por todo esto, no se utiliza este tipo de análisis.
  • Análisis a priori: analiza el código antes de la ejecución, basado en el hecho de que el tiempo de ejecución depende de los datos de entrada y su volumen. Este método sostiene que el tiempo de ejecución debe definirse con una función matemática denominada T(N) que tiene como único