¡Hola! La lección de hoy será ligeramente diferente del resto. Diferirá en que solo está indirectamente relacionado con Java. Dicho esto, este tema es muy importante para todo programador. Vamos a hablar de algoritmos . ¿Qué es un algoritmo? En términos simples, es una secuencia de acciones que deben completarse para lograr un resultado deseado . Usamos algoritmos a menudo en la vida cotidiana. Por ejemplo, cada mañana tienes una tarea específica: ir a la escuela o al trabajo, y al mismo tiempo ser:
- vestido
- Limpio
- alimentado
- Despierta usando un despertador.
- Dúchate y lávate.
- Haz el desayuno y un poco de café o té.
- Comer.
- Si no planchó su ropa la noche anterior, plánchela.
- Vestirse.
- Sal de la casa.
- Compre o descargue la edición de 1961 del Tercer Nuevo Diccionario Internacional de Webster.
- Encuentra todos los nombres de nuestra lista en este diccionario.
- En una hoja de papel, escriba la página del diccionario en la que se encuentra el nombre.
- Usa los pedazos de papel para ordenar los nombres.
for
bucle ordinario que realiza esta tarea.
int[] numbers = new int[100];
// ...fill the array with numbers
for (int i: numbers) {
System.out.println(i);
}
¿Cuál es la complejidad de este algoritmo? Lineal, es decir O(n). El número de acciones que debe realizar el programa depende de cuántos números se le pasen. Si hay 100 números en la matriz, habrá 100 acciones (instrucciones para mostrar cadenas en la pantalla). Si hay 10.000 números en la matriz, se deben realizar 10.000 acciones. ¿Se puede mejorar nuestro algoritmo de alguna manera? No. Pase lo que pase, tendremos que hacer N pases a través de la matriz y ejecutar N declaraciones para mostrar cadenas en la consola. Considere otro ejemplo.
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(0, 20202);
numbers.add(0, 123);
numbers.add(0, 8283);
}
Tenemos un vacío LinkedList
en el que insertamos varios números. Necesitamos evaluar la complejidad algorítmica de insertar un solo número en LinkedList
nuestro ejemplo, y cómo depende de la cantidad de elementos en la lista. La respuesta es O(1), es decir, complejidad constante . ¿Por qué? Tenga en cuenta que insertamos cada número al principio de la lista. Además, recordará que cuando inserta un número en un LinkedList
, los elementos no se mueven a ningún lado. Los enlaces (o referencias) se actualizan (si olvidaste cómo funciona LinkedList, mira una de nuestras lecciones antiguas ). Si el primer número en nuestra lista es x
e insertamos el número y al principio de la lista, todo lo que tenemos que hacer es esto:
x.previous = y;
y.previous = null;
y.next = x;
Cuando actualizamos los enlaces, no nos importa cuántos números ya hay en elLinkedList
, si uno o mil millones. La complejidad del algoritmo es constante, es decir, O(1).
GO TO FULL VERSION