Skip to content

Latest commit

 

History

History
302 lines (260 loc) · 20.6 KB

README.it-IT.md

File metadata and controls

302 lines (260 loc) · 20.6 KB

Algoritmi e strutture dati JavaScript

Build Status codecov

Questo repository contiene esempi basati su JavaScript di molti algoritmi e strutture dati popolari.

Ogni algoritmo e struttura dati ha il suo README separato con spiegazioni e collegamenti correlati per ulteriori letture (comprese quelle ai video di YouTube).

Leggi questo in altre lingue: 简体中文, 繁體中文, 한국어, Polski, Français, Español, Português

☝ Si noti che questo progetto è pensato per essere utilizzato per scopi di apprendimento e ricerca solo e non è pensato per essere utilizzato per la produzione.

Strutture dati

Una struttura dati è un modo particolare di organizzare e archiviare i dati in un computer in modo che possa essere accessibili e modificati in modo efficiente. Più precisamente, una struttura dati è una raccolta di dati valori, le relazioni tra loro e le funzioni o le operazioni a cui è possibile applicare i dati.

B - Principiante, A - Avanzate

algoritmi

Un algoritmo è una specifica inequivocabile su come risolvere una classe di problemi. È un insieme di regole che definiscono con precisione una sequenza di operazioni.

B - Principiante, A - Avanzate

Algoritmi per argomento

Algoritmi di Paradigm

Un paradigma algoritmico è un metodo o approccio generico alla base del design di una classe di algoritmi. È un'astrazione superiore alla nozione di algoritmo, proprio come a l'algoritmo è un'astrazione più alta di un programma per computer.

Come utilizzare questo repository

Installa tutte le dipendenze

npm install

Esegui ESLint

Si consiglia di eseguirlo per verificare la qualità del codice.

npm run lint

Esegui tutti i test

npm test

Esegui test per nome

npm test -- 'LinkedList'

Playground

Puoi giocare con strutture dati e algoritmi nel file ./src/playground/playground.js e scrivere prova per questo in ./src/playground/__test__/playground.test.js.

Quindi basta semplicemente eseguire il seguente comando per verificare se il codice del tuo parco giochi funziona come previsto:

npm test -- 'playground'

Informazioni utili

Riferimenti

▶ Strutture dati e algoritmi su YouTube

Big O Notation

La notazione O grande viene utilizzata per classificare gli algoritmi in base a come il loro tempo di esecuzione oi requisiti di spazio aumentano con l'aumentare delle dimensioni di input. Nella tabella sottostante è possibile trovare gli ordini di crescita più comuni degli algoritmi specificati nella notazione Big O.

Grafici Big Os

Fonte: Big O Cheat Sheet.

Di seguito è riportato l'elenco di alcune delle notazioni Big O più utilizzate e dei relativi confronti delle prestazioni rispetto a diverse dimensioni dei dati di input.

Big O Notation Computations for 10 elements Computations for 100 elements Computations for 1000 elements
O(1) 1 1 1
O(log N) 3 6 9
O(N) 10 100 1000
O(N log N) 30 600 9000
O(N^2) 100 10000 1000000
O(2^N) 1024 1.26e+29 1.07e+301
O(N!) 3628800 9.3e+157 4.02e+2567

Data Structure Operations Complexity

Data Structure Access Search Insertion Deletion Comments
Array 1 n n n
Stack n n 1 1
Queue n n 1 1
Linked List n n 1 1
Hash Table - n n n In case of perfect hash function costs would be O(1)
Binary Search Tree n n n n In case of balanced tree costs would be O(log(n))
B-Tree log(n) log(n) log(n) log(n)
Red-Black Tree log(n) log(n) log(n) log(n)
AVL Tree log(n) log(n) log(n) log(n)
Bloom Filter - 1 1 - False positives are possible while searching

Array Sorting Algorithms Complexity

Name Best Average Worst Memory Stable Comments
Bubble sort n n2 n2 1 Yes
Insertion sort n n2 n2 1 Yes
Selection sort n2 n2 n2 1 No
Heap sort n log(n) n log(n) n log(n) 1 No
Merge sort n log(n) n log(n) n log(n) n Yes
Quick sort n log(n) n log(n) n2 log(n) No Quicksort is usually done in-place with O(log(n)) stack space
Shell sort n log(n) depends on gap sequence n (log(n))2 1 No
Counting sort n + r n + r n + r n + r Yes r - biggest number in array
Radix sort n * k n * k n * k n + k Yes k - length of longest key