algoritmo
- 1. El concepto básico del algoritmo
- 2. Medición de la eficiencia del algoritmo
-
- 2.1 Complejidad del tiempo
-
- 2.1.1 Cómo evaluar el costo de tiempo del algoritmo
- 2.1.2 La complejidad temporal del algoritmo
- 2.1.3 Pregunta 1: ¿Se pueden omitir algunas partes de la expresión?
- 2.1.4 Las reglas de operación de la complejidad temporal del algoritmo
- 2.1.5 Pregunta 2: Si hay miles de líneas de código, ¿necesita una línea por línea de acuerdo con este método?
- 2.1.6 Análisis y conclusiones de varios algoritmos diferentes
- 2.1.7 Mejor, peor, complejidad de tiempo promedio
- 2.2 Complejidad espacial
Nota: Estudie en combinación con libros específicos; recomiende "Estructura de datos y algoritmo", "Estructura de datos de Wang Dao", "Estructura de datos de Tianqin", etc.
Notas sin conexión: https://download.csdn.net/download/qq_38454176/12352560
1. El concepto básico del algoritmo
Descripción general de la estructura del conocimiento
1.1 Qué es un algoritmo
Programa = estructura de datos + algoritmo
Estructura de datos: cómo informar problemas del mundo real y almacenar la información en la computadora. Al mismo tiempo, se deben implementar operaciones básicas sobre la estructura de datos.
Algoritmo: cómo procesar esta información para resolver problemas prácticos
Ejemplo: Análisis de problemas de alimentación prioritarios para clientes con niños:
1.2 5 características del algoritmo
Las características del algoritmo: 必须具备
las características del algoritmo
-
有穷性
: Un algoritmo siempre debe finalizar después de ejecutar pasos finitos, y cada paso se puede completar en un tiempo finito.
Nota: El algoritmo debe ser infinito (usar pasos finitos para resolver un problema específico) y el programa puede ser infinito (el sistema de colas es un programa que nunca puede detenerse) -
确定性
: Cada instrucción del algoritmo debe tener un significado exacto, que相同的输入
solo se puede obtener相同的输出
. -
可行性
: Las operaciones descritas en el algoritmo pueden implementarse todas ya基本运算执行有限次
implementadas. -
输入
: Un algoritmo tiene零个或多个输入
(como hola mundo no es una entrada), estas entradas se toman de una colección de objetos específicos. -
输出
: Un algoritmo tiene一个或多个输出
, estas salidas son cantidades que tienen una cierta relación específica con la entrada.
1.3 Las características de un "buen" algoritmo
Objetivos a perseguir al diseñar algoritmos
-
正确性
: El algoritmo debería poder resolver el problema correctamente. -
可读性
: El algoritmo debe tener una buena legibilidad para ayudar a las personas a comprender.
Nota: El algoritmo se puede describir en pseudocódigo o incluso en texto. Es importante describir los pasos para resolver el problema "sin ambigüedades" -
健壮性
: Al ingresar datos ilegales, el algoritmo puede reaccionar o procesar adecuadamente sin producir resultados de salida inexplicables. -
高效率
Con低存储量需求
: Velocidad de ejecución rápida. La complejidad del tiempo es baja; no se requiere memoria. Complejidad espacial baja
2. Medición de la eficiencia del algoritmo
2.1 Complejidad del tiempo
Descripción general de la estructura
Nota: Los problemas de rendimiento del algoritmo solo se expondrán cuando n es grande
2.1.1 Cómo evaluar el costo de tiempo del algoritmo
- ¿Dejar que el algoritmo se ejecute primero y contar el tiempo de ejecución después?
¿Cuál es el problema?
- Relacionado con el rendimiento de la máquina, como: supercomputadora frente a microcomputadora de un solo chip
- En relación con el lenguaje de programación, cuanto mayor sea el nivel del lenguaje, menor será la eficiencia de ejecución.
- Relacionado con la calidad de las instrucciones de la máquina generadas por el compilador
- Algunos algoritmos no se pueden contar a posteriori, como: algoritmo de control de misiles
2.1.2 La complejidad temporal del algoritmo
La complejidad del tiempo del algoritmo: predice la relación entre el costo de tiempo del algoritmo T (n) y el tamaño del problema n por adelantado (T significa "tiempo")
Ejemplo: use un algoritmo para confesar:
dos preguntas sobre amarte N veces en el Complejo 4 se discutirán y analizarán a continuación
2.1.3 Pregunta 1: ¿Se pueden omitir algunas partes de la expresión?
Análisis y conclusión:
- Conclusión 1: solo puede considerar la parte de orden superior
- Conclusión 2: cuando la escala del problema es lo suficientemente grande, el coeficiente del término constante también puede ignorarse
2.1.4 Las reglas de operación de la complejidad temporal del algoritmo
-
加法规则
T (n) = T1 (n ) + T2 (n) = O (f (n)) + O (g (n)) = O (max (f (n), g (n)))
número de la suma , Solo se retiene el término de orden más alto y el coeficiente se convierte en 1 -
乘法规则
T (n) = T1 (n) × T2 (n) = O (f (n)) × O (g (n)) = O (f (n) × g (n))
Por ejemplo: T3 (n) =n^3 +n^2 log2n =O(n^3)+O(n^2 log2n) =???
Multiplica varios elementos y guárdalos
La complejidad temporal se
enumera de la siguiente manera: La complejidad temporal de los dos algoritmos es la siguiente, ¿cuál es de orden superior (mayor complejidad temporal)?
2.1.5 Pregunta 2: Si hay miles de líneas de código, ¿necesita una línea por línea de acuerdo con este método?
Análisis y conclusión:
2.1.6 Análisis y conclusiones de varios algoritmos diferentes
- Tipo de bucle anidado:
- Incrementando exponencialmente
void loveYou(int n) {
//n 为问题规模
int i = 1; // 爱你程度
while (i <= n) {
//外层循环执行n次
i*2; // 每次翻倍
printf("I Love You %d", i);
}
printf("I Love You More Than %d", n);
}
Calcule la complejidad de tiempo T (n) del algoritmo anterior: suponga que la frecuencia de la oración del bucle más profundo (el número total de bucles) es x, entonces se puede saber a partir de la condición del bucle que 2 ^ x> n
x = log2n + 1 se cumple al final del ciclo
T (n) = O (x) = O (log2n)
- Buscar por numero
void loveYou(int flag[], int n) {
//n 为问题规模
printf("I anm Iron Man %d");
int i = 1; // 爱你程度
for(int i=0;i<n;i++{
//从第一个元素开始查找
if(flag[i] == n) {
//找到元素n
printf("I Love You %d", n);
break; //找到后立即跳出循环
}
}
}
int flag[n] = {
1...n};
Calcule la complejidad de tiempo del algoritmo anterior T (n)
最好
Caso: El elemento n está en la primera posición- 最好时间复杂度
T (n) = O (1)
最坏
Caso: El elemento n está en la última posición- 最坏时间复杂度
T (n) = O (n)
平均
Situación: suponga que la probabilidad del elemento n en cualquier posición es la misma que 1 / n —— 平均时间复杂度
T (n) = O (n)
2.1.7 Mejor, peor, complejidad de tiempo promedio
Peor complejidad temporal: la complejidad temporal del algoritmo en el peor de los casos
Complejidad temporal media: el tiempo de ejecución esperado del algoritmo cuando todos los ejemplos de entrada aparecen con la misma probabilidad.
Mejor complejidad temporal: la complejidad temporal del algoritmo en el mejor de los casos
2.2 Complejidad espacial
Marco de conocimiento:
2.2.1 Requisitos de memoria (complejidad del espacio) cuando el programa se está ejecutando
Análisis de caso 1:
Análisis de caso 2:
Análisis de caso 3:
2.2.2 Sobrecarga de memoria causada por llamadas de función recursivas
Estudio de caso 1:
Estudio de caso 2: