¡Hola! La conferencia de hoy será un poco diferente del resto. Se diferenciará en que sólo está indirectamente relacionado con Java. Sin embargo, este tema es muy importante para todo programador. Hablaremos de algoritmos . ¿Qué es un algoritmo? En términos simples, se trata de una determinada secuencia de acciones que se deben realizar para lograr el resultado deseado . A menudo utilizamos algoritmos en la vida cotidiana. Por ejemplo, cada mañana te enfrentas a una tarea: ir a la escuela o al trabajo y al mismo tiempo ser:
- Vestido
- Limpio
- Bien alimentado
- Despierta con un despertador.
- Date una ducha, lávate la cara.
- Preparar el desayuno, preparar café/té.
- Comer.
- Si no has planchado tu ropa desde la noche, plánchala.
- Vestirse.
- Sal de la casa.
- Compre o descargue de Internet el “Diccionario de nombres personales rusos”, edición de 1966.
- Encuentre todos los nombres de nuestra lista en este diccionario.
- Anota en una hoja de papel en qué página del diccionario se encuentra el nombre.
- Ordena los nombres usando las notas en una hoja de papel.
for
que realiza esta tarea.
int[] numbers = new int[100];
// ..заполняем массив числами
for (int i: numbers) {
System.out.println(i);
}
¿Cuál es la complejidad del algoritmo escrito? Lineal, O(N). La cantidad de acciones que debe realizar el programa depende exactamente de cuántos números se le pasaron. Si hay 100 números en la matriz, habrá 100 acciones (salidas en la pantalla). Si hay 10,000 números en la matriz, será necesario realizar 10,000 acciones. ¿Se puede mejorar nuestro algoritmo? No. En cualquier caso tendremos que hacer N pasos por el array y realizar N salidas a la consola. Veamos 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 uno vacío LinkedList
en el que insertamos varios números. Necesitamos estimar la complejidad del algoritmo para 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): complejidad constante . ¿Por qué? Tenga en cuenta: cada vez que insertamos un número al principio de la lista. Además, como recordará, al insertar números en LinkedList
elementos, no se desplazan a ninguna parte: los enlaces se redefinen (si de repente olvidó cómo funciona LinkedList, eche un vistazo a una de nuestras conferencias antiguas ). Si ahora el primer número de nuestra lista es el número х
, e insertamos el número y al principio de la lista, todo lo que se necesita es:
x.previous = y;
y.previous = null;
y.next = x;
Para esta redefinición de referencia, no nos importa cuántos números haya ahoraLinkedList
: al menos uno, al menos mil millones. La complejidad del algoritmo será constante: O(1).
GO TO FULL VERSION