¡Bueno!
Así que comienza con algo muy básico.
Código:
número = 100
- ¿Cómo se puede anular el cálculo de un número?
- ¿Cuántos números de Armstrong hay?
- ¿Cuál es el algoritmo más eficiente para encontrar una función elemental uniforme que mapee un rectángulo a un polígono especificado previamente?
- ¿Cuáles son ejemplos de problemas difíciles que existen en la vida que se pueden resolver fácilmente con la teoría de grafos?
- Quiero encontrar el valor máximo entre 2 teclas i <j, en el peor de los casos O (log n). ¿Cómo puedo lograr eso?
while (número! = 0) {
número = número / 2;
}
Explicación de funcionamiento en seco:
para la primera iteración, número = 100
para la segunda iteración, número = 50
para la tercera iteración, número = 25
para la cuarta iteración, número = 12
para la quinta iteración, número = 6 … y así.
Entonces podemos ver aquí, después de cada iteración, mi número se está convirtiendo en la mitad de su valor original. ¡Eso es! Esto implica que la complejidad temporal del código anterior es O (logn)
En palabras más simples, la forma en que n ^ 2 se duplica en cada iteración se registra de manera similar en cada iteración.
Algunos ejemplos conocidos de O (logn):
- Búsqueda binaria: en cada iteración, el grupo de búsqueda se convertirá en la mitad del valor original.
- Encontrar el número más grande / más pequeño en un árbol de búsqueda binario: en cada iteración, soltaremos cualquier medio árbol a la izquierda o a la derecha.
Ahora vamos a O (nlogn)
Código:
número = 100
para (int i = 0; i <100; i ++) {
while (número! = 0) {
número = número / 2;
}
}
Ahora el proceso de registro debe ejecutarse n veces.
Algunos ejemplos conocidos de O (nlogn):
- Ordenar por fusión: El Ordenar por fusión utiliza el enfoque de dividir y conquistar para resolver el problema de clasificación. Primero, divide la entrada a la mitad usando recursividad. Después de dividir, clasifica las mitades y las fusiona en una salida ordenada.
- Ordenación rápida
¡Gracias!