Este documento analiza la eficiencia de dos algoritmos de ordenamiento: el método de selección y la inserción directa. Explica cómo calcular la complejidad en el peor, mejor y caso promedio para cada algoritmo. También incluye ecuaciones generales que resumen la complejidad de cada método y sus partes internas clave.
El documento explica el uso implícito y explícito del apuntador this en C++. Cada objeto tiene un apuntador this que apunta a sí mismo y permite acceder a los miembros del objeto. Los objetos usan this de forma implícita o explícita. También explica cómo this permite llamadas en cascada a funciones miembro al devolver cada función una referencia al objeto.
El documento describe los pasos para realizar recorridos de árboles binarios de búsqueda (ABB) de diferentes tipos (inorden, preorden y postorden). Explica que la función inOrdenRecorrido imprime los valores de los nodos en orden ascendente debido a cómo se estructura el ABB, mientras que preOrdenRecorrido y postOrdenRecorrido siguen diferentes patrones de recorrido. Además, incluye el código C++ para implementar las funciones de recorrido.
Este documento describe la sobrecarga de operadores para la clase Arreglo en C++. Presenta la sobrecarga de operadores como el constructor, destructor, operador de asignación, operador de subíndice, operadores de comparación, operadores de entrada y salida para la clase Arreglo. Estos permiten tratar los objetos de la clase Arreglo de manera similar a los arreglos integrados de C++.
El documento describe los conceptos de herencia y polimorfismo en programación orientada a objetos. La herencia permite crear nuevas clases a partir de clases existentes adoptando sus atributos y mejorándolos. El polimorfismo permite que diferentes objetos respondan de forma diferente a los mismos mensajes o operaciones. Se proveen ejemplos de herencia simple y sobrecarga de operadores como ilustración de estos conceptos.
Este documento analiza la eficiencia del algoritmo de ordenamiento por selección en los casos peor, mejor y promedio. Explica que en el peor caso, el costo es de O(n^2), mientras que en el mejor caso es de O(n) y en el caso promedio es O(n^2) también. Finalmente, provee ecuaciones generales para calcular la complejidad en cada caso.
1) El documento presenta un análisis del algoritmo de ordenamiento por inserción, incluyendo un loop invariante para probar su corrección y cálculos de su complejidad en los casos mejor, peor y promedio.
2) La complejidad en el caso mejor es O(n), mientras que en el peor caso es O(n2), debido a que el número de comparaciones en cada iteración puede variar dependiendo de la entrada.
3) El análisis incluye cálculos para determinar el número de operaciones básicas en función de parámetros como t_
El documento analiza el comportamiento asintótico de algoritmos a medida que aumenta el tamaño de la entrada n. Explica que las constantes son detalles irrelevantes, y que estamos interesados en cómo cambia el tiempo de ejecución en proporción a n. Introduce las notaciones O, Ω y Θ para describir límites superiores, inferiores y exactos, respectivamente. Además, provee un ejemplo de búsqueda binaria para ilustrar el análisis.
El documento explica el uso implícito y explícito del apuntador this en C++. Cada objeto tiene un apuntador this que apunta a sí mismo y permite acceder a los miembros del objeto. Los objetos usan this de forma implícita o explícita. También explica cómo this permite llamadas en cascada a funciones miembro al devolver cada función una referencia al objeto.
El documento describe los pasos para realizar recorridos de árboles binarios de búsqueda (ABB) de diferentes tipos (inorden, preorden y postorden). Explica que la función inOrdenRecorrido imprime los valores de los nodos en orden ascendente debido a cómo se estructura el ABB, mientras que preOrdenRecorrido y postOrdenRecorrido siguen diferentes patrones de recorrido. Además, incluye el código C++ para implementar las funciones de recorrido.
Este documento describe la sobrecarga de operadores para la clase Arreglo en C++. Presenta la sobrecarga de operadores como el constructor, destructor, operador de asignación, operador de subíndice, operadores de comparación, operadores de entrada y salida para la clase Arreglo. Estos permiten tratar los objetos de la clase Arreglo de manera similar a los arreglos integrados de C++.
El documento describe los conceptos de herencia y polimorfismo en programación orientada a objetos. La herencia permite crear nuevas clases a partir de clases existentes adoptando sus atributos y mejorándolos. El polimorfismo permite que diferentes objetos respondan de forma diferente a los mismos mensajes o operaciones. Se proveen ejemplos de herencia simple y sobrecarga de operadores como ilustración de estos conceptos.
Este documento analiza la eficiencia del algoritmo de ordenamiento por selección en los casos peor, mejor y promedio. Explica que en el peor caso, el costo es de O(n^2), mientras que en el mejor caso es de O(n) y en el caso promedio es O(n^2) también. Finalmente, provee ecuaciones generales para calcular la complejidad en cada caso.
1) El documento presenta un análisis del algoritmo de ordenamiento por inserción, incluyendo un loop invariante para probar su corrección y cálculos de su complejidad en los casos mejor, peor y promedio.
2) La complejidad en el caso mejor es O(n), mientras que en el peor caso es O(n2), debido a que el número de comparaciones en cada iteración puede variar dependiendo de la entrada.
3) El análisis incluye cálculos para determinar el número de operaciones básicas en función de parámetros como t_
El documento analiza el comportamiento asintótico de algoritmos a medida que aumenta el tamaño de la entrada n. Explica que las constantes son detalles irrelevantes, y que estamos interesados en cómo cambia el tiempo de ejecución en proporción a n. Introduce las notaciones O, Ω y Θ para describir límites superiores, inferiores y exactos, respectivamente. Además, provee un ejemplo de búsqueda binaria para ilustrar el análisis.
Este documento describe técnicas de segmentación de imágenes médicas aplicadas a imágenes de ultrasonido, incluyendo el crecimiento de regiones y los modelos de contornos activos. Explica que la segmentación se utiliza para extraer información clínica útil de las imágenes identificando formas y tomando medidas biométricas. También compara diferentes métodos de segmentación como los contornos activos, contornos activos geodésicos y modelos de formas activas.
El documento describe los árboles de búsqueda binaria. Explica que estos árboles almacenan datos en cada nodo y cumplen condiciones como que el valor de cada nodo es mayor que los de su subárbol izquierdo y menor que los de su subárbol derecho. También detalla operaciones básicas como la inserción, búsqueda y borrado de nodos siguiendo estas reglas.
La Programación Orientada a Objetos (POO) encapsula datos y funciones en unidades llamadas clases. Una clase define los atributos y métodos de un objeto. Los objetos de una clase comparten la misma estructura y comportamiento. El documento presenta ejemplos de clases Tiempo y Vendedor que definen objetos con atributos y métodos para representar tiempos y ventas respectivamente.
El documento describe la historia y características fundamentales de la programación orientada a objetos y el lenguaje C++. Explica que C++ evolucionó a partir del lenguaje C para agregar características orientadas a objetos como clases y objetos. También describe las características clave de los objetos como identidad, clasificación y encapsulación de datos.
Este documento describe la investigación sobre algoritmos de segmentación de imágenes médicas realizada por Gloria Bautista y Sonia Contreras de la Universidad Tecnológica de Bolívar. El objetivo es desarrollar métodos para extraer estructuras anatómicas de imágenes médicas y así ayudar en el diagnóstico de enfermedades. Se exploran técnicas como crecimiento de regiones, contornos activos y reconstrucción tridimensional para segmentar imágenes y superar retos como ruido y artefactos.
El documento describe el polimorfismo y la herencia en programación orientada a objetos. El polimorfismo permite que diferentes objetos respondan de manera diferente al mismo mensaje. La herencia permite que las clases derivadas hereden propiedades de clases padre. Se provee un ejemplo de sobrecarga de operadores para ilustrar polimorfismo y se explica herencia simple y múltiple. También se describen funciones virtuales.
Este documento describe un modelo de articulación educativa que va desde la educación media técnica y tecnológica hasta la educación profesional, armonizando con el Sistema Nacional de Formación para el Trabajo. El modelo propone diseñar currículos basados en competencias, establecer vínculos entre competencias laborales y competencias académicas, y usar ciclos propedéuticos para permitir la articulación entre niveles educativos y salidas tempranas al mundo laboral.
Este documento presenta lineamientos para la articulación de la educación media con programas técnicos profesionales y la educación superior en la Universidad Tecnológica de Bolívar. Describe cómo se pueden articular hasta 22 créditos académicos de diferentes programas técnicos profesionales con currículos de la educación media. También presenta el proceso de homologación de cursos entre programas de pregrado de la universidad. El objetivo es ofrecer múltiples oportunidades y rutas de formación flexible a los estudiantes.
Este documento describe técnicas de segmentación de imágenes médicas aplicadas a imágenes de ultrasonido, incluyendo el crecimiento de regiones y los modelos de contornos activos. Explica que la segmentación se utiliza para extraer información clínica útil de las imágenes identificando formas y tomando medidas biométricas. También compara diferentes métodos de segmentación como los contornos activos, contornos activos geodésicos y modelos de formas activas.
El documento describe los árboles de búsqueda binaria. Explica que estos árboles almacenan datos en cada nodo y cumplen condiciones como que el valor de cada nodo es mayor que los de su subárbol izquierdo y menor que los de su subárbol derecho. También detalla operaciones básicas como la inserción, búsqueda y borrado de nodos siguiendo estas reglas.
La Programación Orientada a Objetos (POO) encapsula datos y funciones en unidades llamadas clases. Una clase define los atributos y métodos de un objeto. Los objetos de una clase comparten la misma estructura y comportamiento. El documento presenta ejemplos de clases Tiempo y Vendedor que definen objetos con atributos y métodos para representar tiempos y ventas respectivamente.
El documento describe la historia y características fundamentales de la programación orientada a objetos y el lenguaje C++. Explica que C++ evolucionó a partir del lenguaje C para agregar características orientadas a objetos como clases y objetos. También describe las características clave de los objetos como identidad, clasificación y encapsulación de datos.
Este documento describe la investigación sobre algoritmos de segmentación de imágenes médicas realizada por Gloria Bautista y Sonia Contreras de la Universidad Tecnológica de Bolívar. El objetivo es desarrollar métodos para extraer estructuras anatómicas de imágenes médicas y así ayudar en el diagnóstico de enfermedades. Se exploran técnicas como crecimiento de regiones, contornos activos y reconstrucción tridimensional para segmentar imágenes y superar retos como ruido y artefactos.
El documento describe el polimorfismo y la herencia en programación orientada a objetos. El polimorfismo permite que diferentes objetos respondan de manera diferente al mismo mensaje. La herencia permite que las clases derivadas hereden propiedades de clases padre. Se provee un ejemplo de sobrecarga de operadores para ilustrar polimorfismo y se explica herencia simple y múltiple. También se describen funciones virtuales.
Este documento describe un modelo de articulación educativa que va desde la educación media técnica y tecnológica hasta la educación profesional, armonizando con el Sistema Nacional de Formación para el Trabajo. El modelo propone diseñar currículos basados en competencias, establecer vínculos entre competencias laborales y competencias académicas, y usar ciclos propedéuticos para permitir la articulación entre niveles educativos y salidas tempranas al mundo laboral.
Este documento presenta lineamientos para la articulación de la educación media con programas técnicos profesionales y la educación superior en la Universidad Tecnológica de Bolívar. Describe cómo se pueden articular hasta 22 créditos académicos de diferentes programas técnicos profesionales con currículos de la educación media. También presenta el proceso de homologación de cursos entre programas de pregrado de la universidad. El objetivo es ofrecer múltiples oportunidades y rutas de formación flexible a los estudiantes.
1. ANÁLISIS
DE
ALGORITMOS
Y
COMPLEJIDAD
La
eficiencia
de
los
algoritmos
Gloria
Isabel
Bautista
Lasprilla.
bautistalasprilla.gloriaisabel@gmail.com
gbautista@unitecnologica.edu.co
gloria@utbvirtual.edu.co
2. Definición
Un algoritmo puede de ser lo más eficiente posible con independencia de
la plataforma Software/Hardware que se utilice.
Si el algoritmo es ya eficiente de por sí, más veloz será si se ejecuta en una
plataforma mucho más rápida.
Entonces, podemos afirmar que el responsable principal de la eficiencia (o
no) de un algoritmo es siempre el programador.
El análisis del costo computacional de los algoritmos se estima siempre en
el peor de los casos.
El caso promedio es difícil de establecer pues depende del contenido de
los datos de entrada.
El mejor de los casos es considerado un ideal que difícilmente se cumple.
3. Análisis
de
algoritmos
de
ordenamiento
Eficiencia
y
Complejidad
Los
siguientes
ejercicios
analizan
dos
algoritmos
sencillos
de
ordenamiento,
los
métodos
de
selección
e
inserción
directa:
• En
el
peor
de
los
Casos
• En
el
mejor
de
los
Casos
• En
el
Caso
Intermedio
4. Análisis
del
método
selección
FOR
EXTERNO
INSTRUCCIÓN COSTO
i = 0 1
i <= n-‐1 n
+
1
i++ n
sm = i n
for interno n
*
for
interno
aux = A[sm] n
A[sm] = A[i] n
A[i] = aux n
2
+
6n
+
n
*
for interno
void seleccionsort (int A[],
int n)
{
int sm,
i,
j,
aux;
for (i
=
0;
i
<n-‐1;
i++)
{
sm =
i;
for(j
=
i+1;
j
<
n;
j++)
if(A[sm]
>
A[j])
sm =
j;
aux =
A[sm];
A[sm]
=
A[i];
A[i]
=
aux ;
}
}
5. FOR
INTERNO
INSTRUCCIÓN COSTO
(Peor de
los
casos)
COSTO
(Mejor de
los
casos)
COSTO
(Caso
intermedio)
j
=
i
+
1 1 1 1
j
<=
n n
– (i+1)
+
1 n
– (i+1)
+
1 n
– (i+1)
+
1
j++ n
– i
+
1 n
– i
+
1 n
– i
+
1
if
(
) n
– i
+
1 n
– i
+
1 n
– i
+
1
sm =
j
n
– i
+
1 (n
– i
+
1)/2
Análisis
del
método
selección
Peor de
los
casos Mejor
de
los
casos Caso
intermedio
6
+
4
(n
– i) 5
+
3
(n
– i) 5
+
3
(n
– i)
+
(n
– i
+
1)
/
2
2
+
6n
+
n
*
for interno
Ecuación
general
6. Análisis
del
método
selección,
el
peor
de
los
casos
å å å= =
-
=
ú
û
ù
ê
ë
é
+++
n
i
n
i
in
i1 1 1
4662 2102 2
++ nn
For interno,
el
peor
caso
6
+
4
(n
– i)
2
+
6n
+
n
*
for interno
Ecuación
general
=
7. Análisis
del
método
selección,
el
mejor
de
los
casos
å å å= =
-
=
ú
û
ù
ê
ë
é
+++
n
i
n
i
in
i1 1 1
3562 2
2
19
2
3 2
++ nn
2
+
6n
+
n
*
for interno
Ecuación
general
For interno,
el
mejor
caso
5
+
3
(n
– i)
=
8. Análisis
del
método
selección,
el
caso
intermedio
2
+
6n
+
n
*
for interno
Ecuación
general
å å å å= =
-
=
+-
=
ú
û
ù
ê
ë
é
++++
n
I
n
i
in
i
in
i1 1 1
1
1 2
1
3562 2
4
39
4
7 2
++ nn
For interno,
caso
intermedio
5
+
3
(n
– i)
+
(n
– i
+
1)
/
2
=
9. Análisis
del
método
inserción
2
+
5
(n-‐1)
+
(n-‐1)
*
while interno
void
insercionDirecta(int A[],int n)
{
int i,
j,
Temp;
for
(i =
1;
i <
n;
i++)
{
Temp
=
A[i];
j
=
i -‐ 1;
while
(j
>=
0
&&
A[j]
>
Temp)
{
A[j
+
1]
=
A[j];
j-‐-‐;
}
A[j
+
1]
=
Temp;
}
}
FOR
EXTERNO
INSTRUCCIÓN COSTO
i = 1 1
i < n n
– 1
+
1
i++ n
– 1
Temp = A[i] n
– 1
j = i – 1 n
– 1
while interno (n
– 1)
*
while
interno
A[j+1] = Temp n
– 1
10. Análisis
del
método
inserción
FOR
INTERNO
INSTRUCCIÓN COSTO
(Peor de
los
casos)
COSTO
(Mejor de
los
casos)
COSTO
(Caso
intermedio)
(A[j]
>
Temp
&&
j
>=
0) i
– 1
+
1 1 i/2
– 1
+
1
A[j+1]
=
A[j] i
-‐ 1 i/2
j-‐-‐ i
-‐ 1 i/2
PEOR MEJOR INTERMEDIO
1
+
3
(i
– 1) 1 1
+
3/2
(i
– 1)
2
+
5
(n-‐1)
+
(n-‐1)
*
while interno
Ecuación
general
11. Análisis
del
método
inserción,
el
peor
de
los
casos
2
+
5
(n-‐1)
+
(n-‐1)
*
while interno
Ecuación
general
1
+
3
(i
– 1)
while interno,
el
peor
caso
å å å
-
=
-
=
-
=
ú
û
ù
ê
ë
é
+++
1
1
1
1
1
1
3152
n
i
n
i
i
i
1
2
3
2
3 2
-+ nn=
12. Análisis
del
método
inserción,
el
mejor
de
los
casos
2
+
5
(n-‐1)
+
(n-‐1)
*
while interno
1
while interno,
el
mejor
caso
Ecuación
general
å å
-
=
-
=
++
1
1
1
1
152
n
i
n
i
46 -n=
13. Análisis
del
método
inserción,
el
caso
intermedio
2
+
5
(n-‐1)
+
(n-‐1)
*
while interno
Ecuación
general
while interno,
el
caso
intermedio
1
+
3/2
(i
– 1)
å å å
-
=
-
=
-
=
ú
û
ù
ê
ë
é
+++
1
1
1
1
1
1 2
3
152
n
i
n
i
i
i 2
5
4
15
4
3 2
-+ nn=