Diseño y Análisis de Algoritmos - Capítulo 1 Introducción

Dos temas de la teoría de algoritmos:

  • Diseño de algoritmo: cómo diseñar un algoritmo efectivo para un problema
  • Análisis de algoritmos: cómo evaluar o juzgar los pros y los contras de un algoritmo

1.1.1
Razones para aprender algoritmos 1: Algoritmos: el alma del programa El
proceso
de solución del problema : analizar el problema → diseñar el algoritmo → escribir el programa → organizar los resultados
Los cuatro niveles de investigación de programación:
algoritmo → metodología → lenguaje →
razón de herramienta 2 : Mejora la capacidad de analizar problemas
Formalización de algoritmos → Pensamiento lógico y organizado
1.1.2 Algoritmos y sus características importantes
Algoritmo (Algoritmo) : Una descripción de los pasos para resolver un problema en particular, es una secuencia limitada de instrucciones.
Las cinco características del algoritmo :
input : un algoritmo tiene cero o más entradas.
de salida : un algoritmo que tiene una o más salidas.
(3) Finitud : un algoritmo siempre debe terminar después de ejecutar un paso finito, y cada paso debe completarse en un tiempo finito.
certeza : el algoritmo de instrucción debe tener el significado exacto, con la misma entrada sólo se puede conseguir el mismo resultado.
Viabilidad : la operación descrita por el algoritmo puede implementarse mediante las operaciones básicas que se han implementado un número limitado de veces.
Ejemplos:

  • Cámara digital con enfoque automático y tecnología de obturador de sonrisa
  • Tecnología de reconocimiento facial

Tecnología de reconocimiento facial común:

  • Método de reconocimiento facial basado en características geométricas
  • Método de reconocimiento facial basado en la cara característica (PCA)
  • Método de reconocimiento facial basado en red neuronal

Ejemplo : algoritmo euclidiano-método de división de alternancia para encontrar el máximo común divisor de dos números naturales myn
1.1.3 Método de descripción del algoritmo
⑴ Lenguaje natural
Ventajas: fácil de entender
Desventajas: largo y ambiguo
Método de uso: algoritmo de descripción de línea gruesa
Nota de pensamientos : Evite escribir el
algoritmo euclidiano natural
① Ingrese
myn ; ② Encuentre el resto r de m dividido por n;
③ Si r es igual a 0, entonces n es el máximo común divisor y el algoritmo termina; de lo contrario, ejecute el paso ④ ;
④ Ponga el valor de n en my ponga el valor de r en n;
⑤ Realice el paso ② nuevamente.
⑵ diagrama de flujo
ventajas: proceso intuitivo
inconvenientes: falta de estanqueidad, flexibilidad de
uso: simple algoritmo descrito en
Nota: Tenga en cuenta que el nivel de abstracción
euclidiana algoritmo
Inserte la descripción de la imagen aquí
⑶ Lenguaje de Programación
ventajas: puede ser ejecutado por un ordenador
desventajas: la abstracción pobres, los requisitos de idioma
Uso elevado : el algoritmo necesita ser verificado
Nota: escriba el algoritmo como un algoritmo euclidiano de subfunción

#include <iostream.h> 
int CommonFactor(int m, int n) 
{     
	int r=m % n;     
	while (r!=0)     
	{       
		m=n;       
		n=r;       
		r=m % n;    
	}
	return n; 
} 
void main( ) 
{    
	cout<<CommonFactor(63, 54)<<endl; 
}

Language Lenguaje de algoritmo de pseudocódigo Pseudocódigo (Pseudocódigo
): un método entre lenguaje natural y lenguaje de programación, que utiliza la gramática básica de un lenguaje de programación, las instrucciones de operación se pueden combinar con el diseño del lenguaje natural.
Ventajas: fuerte capacidad de expresión, fuerte abstracción, algoritmo euclidiano fácil de entender

  1. r = m% n;
  2. Haga un bucle hasta que r sea igual a 0
    2.1 m = n;
    2.2 n = r;
    2.3 r = m% n;
  3. Salida n;

1.1.5 Tipos de problemas importantes
1. Problema de búsqueda
2. Problema de clasificación
3. Problema de gráficos
4. Problema de combinación
5. Problema de geometría
1.2 Análisis de
algoritmos Análisis de algoritmos (Análisis de algoritmos) : Se requieren dos recursos informáticos para el algoritmo: tiempo y Estimación del espacio
Complejidad del tiempo (Complejidad del tiempo) Propósito del análisis del algoritmo de
complejidad del espacio (Complejidad del espacio) : diseñar algoritmo: diseñar el algoritmo con la menor complejidad posible. Seleccionar algoritmo: elegir la complejidad más baja entre varios algoritmos 1.2.1 Símbolo progresivo 1. Definición del símbolo O grande 1.1 Si hay dos constantes positivas c y n0, para cualquier n≥n0, hay T (n) ≤c × f (n), entonces llamamos T (n) = O (f (n)), o el algoritmo en O (f (n). 2. Definición del signo Ω grande 1.2 Si hay dos constantes positivas c y n0, para cualquier n≥n0, hay T (n) ≥c × g (n), luego llame a T (n) = Ω (g (n)) 3. Definición del signo 1.3 1.3 Si hay tres constantes positivas c1, c2 y n0, hay c1 × para cualquier n≥n0 f (n) ≥T (n) ≥c2 × f (n), luego llame al teorema T (n) = Θ (f (n)) 1.1










Si T (n) = amnm + am-1nm-1 +… + a1n + a0 (am> 0), entonces T (n) = O (nm) y T (n) = Ω (nm), por lo tanto, hay T (n) = Θ (nm).
1.2.2
Ejemplos de los casos mejores, peores y promedio : Encuentre elementos iguales a un valor dado k en una matriz entera unidimensional A [n] (suponiendo que solo haya un elemento en la matriz con un valor de k)

int Find(int A[ ], int n)   
{      
	for (i=0; i<n; i++)      
		if (A[i]= =k) 
			break;      
	return i;  
}

Conclusión : si el tamaño del problema es el mismo y el costo del tiempo está relacionado con los datos de entrada, debe analizar el mejor caso, el peor caso y el caso promedio.
Mejor caso : análisis del
peor caso cuando la probabilidad es grande :
caso promedio del sistema en tiempo real : se sabe cómo se distribuyen los datos de entrada, generalmente se asume una distribución de probabilidad igual
1.2.3
Ejemplo de análisis de algoritmo no recursivo : algoritmo para encontrar el valor mínimo de la matriz

int ArrayMin(int a[ ], int n)  
{       
	min=a[0];       
	for (i=1; i<n; i++)          
		if (a[i]<min) 
			min=a[i];       
	return min;  
}

Pasos generales del análisis de algoritmos no recursivos :

  1. Decida qué parámetros usar como medida del tamaño del problema del algoritmo
  2. Descubre las oraciones básicas en el algoritmo
  3. Compruebe si el número de ejecuciones de sentencias básicas depende solo del tamaño del problema
  4. Cree una expresión de suma para el número de ejecuciones de sentencias básicas
  5. Use símbolos progresivos para representar esta expresión de suma

La clave : cree una expresión de suma que represente el tiempo de ejecución del algoritmo y luego utilice símbolos progresivos para representar la expresión de suma.
1.2.4 La
clave para el análisis de algoritmos recursivos : establecer una relación recursiva de acuerdo con el proceso recursivo y luego resolver esta relación recursiva.

  1. Técnica de adivinanzas: calcule un límite superior para la relación recursiva y luego (utilizando la inducción matemática) demuestre que es correcto.
  2. Técnica de recursión extendida
  3. Recurrencia universal de divide y vencerás

1.2.5 El análisis posterior del
algoritmo El análisis posterior del algoritmo (Posteriori) también se denomina análisis experimental del algoritmo. Es un método de cálculo post mortem. Por lo general, el algoritmo debe convertirse en el programa correspondiente y ejecutarse en la computadora.
Pasos generales:

  1. Aclarar el propósito del experimento.
  2. Determine el método de medición de la eficiencia del algoritmo y prepare el algoritmo para el experimento.
  3. Decidir sobre muestras de entrada y generar datos experimentales.
  4. Ejecute el programa correspondiente al algoritmo en la muestra de entrada y registre los datos experimentales obtenidos
  5. Datos experimentales analizados
48 artículos originales publicados · Me gusta 25 · Visita 2453

Supongo que te gusta

Origin blog.csdn.net/qq_43628959/article/details/105058852
Recomendado
Clasificación