Ciao! La conferenza di oggi sarà un po' diversa dalle altre. Differirà in quanto è correlato solo indirettamente a Java. Tuttavia, questo argomento è molto importante per ogni programmatore. Parleremo di algoritmi . Cos'è un algoritmo? In termini semplici, questa è una determinata sequenza di azioni che devono essere eseguite per ottenere il risultato desiderato . Usiamo spesso algoritmi nella vita di tutti i giorni. Ad esempio, ogni mattina ti trovi di fronte a un compito: venire a scuola o al lavoro e allo stesso tempo essere:
- Vestito
- Pulito
- Ben nutriti
- Svegliati con la sveglia.
- Fatti una doccia, lavati la faccia.
- Preparare la colazione, preparare il caffè/tè.
- Mangiare.
- Se non hai stirato i tuoi vestiti dalla sera, stirali.
- Vestirsi.
- Uscire di casa.
- Acquista o scarica su Internet l'edizione 1966 del "Dizionario dei nomi personali russi".
- Trova tutti i nomi del nostro elenco in questo dizionario.
- Annota su un foglio di carta in quale pagina del dizionario si trova il nome.
- Metti in ordine i nomi utilizzando le note su un pezzo di carta.
for
che esegue questa attività
int[] numbers = new int[100];
// ..заполняем массив числами
for (int i: numbers) {
System.out.println(i);
}
Qual è la complessità dell'algoritmo scritto? Lineare, O(N). Il numero di azioni che il programma deve eseguire dipende esattamente da quanti numeri gli sono stati passati. Se nella matrice sono presenti 100 numeri, le azioni (output sullo schermo) saranno 100. Se nella matrice sono presenti 10.000 numeri, sarà necessario eseguire 10.000 azioni. Il nostro algoritmo può essere migliorato? NO. In ogni caso dovremo effettuare N passaggi attraverso l'array ed eseguire N output sulla console. Diamo un'occhiata a un altro esempio.
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(0, 20202);
numbers.add(0, 123);
numbers.add(0, 8283);
}
Ne abbiamo uno vuoto LinkedList
in cui inseriamo diversi numeri. Dobbiamo stimare la complessità dell'algoritmo per inserire un singolo numero nel LinkedList
nostro esempio e come dipende dal numero di elementi nell'elenco. La risposta è O(1) - complessità costante . Perché? Nota: ogni volta inseriamo un numero all'inizio della lista. Inoltre, come ricordi, quando inserisci numeri negli LinkedList
elementi, non vengono spostati da nessuna parte: i collegamenti vengono ridefiniti (se all'improvviso hai dimenticato come funziona LinkedList, dai un'occhiata a una delle nostre vecchie lezioni ). Se ora il primo numero della nostra lista è il numero х
, e inseriamo il numero y all'inizio della lista, basterà:
x.previous = y;
y.previous = null;
y.next = x;
Per questa ridefinizione dei riferimenti, non ci importa quanti numeri ci siano adessoLinkedList
: almeno uno, almeno un miliardo. La complessità dell'algoritmo sarà costante - O(1).
GO TO FULL VERSION