Algoritmi e Strutture Dati

✨ Livello
🕗 Durata
💻 Pratica
Intermedio
4-8 mesi
400+ esercizi di programmazione
Benvenuto in un corso completo di Algoritmi e Strutture Dati. Alla fine del corso, avrai conoscenze sufficienti per ottimizzare notevolmente i programmi, sviluppare un’intuizione sull’efficienza di ogni programma e affrontare con successo i colloqui presso le principali aziende tecnologiche come Google, Meta, Amazon, ecc. Il corso parte dai fondamenti di algoritmi e strutture dati e approfondisce i temi più popolari in questo campo.
notion image
notion image
Le grandi aziende tecnologiche come Google, Meta, Netflix e Amazon organizzano i loro colloqui per verificare una conoscenza approfondita delle strutture dati e degli algoritmi. Completare questo corso ti assicurerà di essere preparato per questi colloqui.
Le piattaforme di freelance come Toptal o Turing richiedono ai candidati di essere esperti in Strutture Dati e Algoritmi e, per questo, le loro procedure di selezione includono diversi colloqui che si concentrano proprio sulle skill algoritmiche.

📚 Prerequisiti

Questo corso è progettato per chi ha già una base in un linguaggio di programmazione di uso generale (come Python, C++, Java o C#) e desidera approfondire il mondo degli algoritmi e delle strutture dati. Prima di iniziare, dovresti sentirti a tuo agio con l’uso dei cicli, la creazione di funzioni e l’utilizzo delle strutture dati integrate (come liste, set o mappe).

🤩 Risultati

Alla fine di questo corso, saprai sfruttare diverse strutture dati comuni per scrivere algoritmi efficienti, in grado di offrire prestazioni di un ordine di grandezza superiori rispetto a soluzioni più ingenue. Tratteremo le migliori pratiche per scrivere codice per gli algoritmi e per prepararti ai colloqui incentrati sugli aspetti algoritmici.
Questo corso si concentra sulla padronanza di ogni concetto. Lavorerai con diversi algoritmi e ne implementerai varie versioni per risolvere molti problemi, così da padroneggiare a fondo ciascuno di essi.

💻 Imparare Facendo

🔥
L’obiettivo di studiare gli algoritmi non è solo imparare la teoria. L’obiettivo è sviluppare abilità nel problem-solving.
In questo corso impari facendo! Ogni concetto è accompagnato da diverse sfide interattive che dovrai risolvere per passare a quello successivo. In effetti, ci sono più di 400 problemi di programmazione pratica in questo corso. Siamo convinti che l’apprendimento pratico sia il modo migliore per acquisire conoscenze profonde. Qui troverai esercizi impegnativi e allo stesso tempo interessanti, per mettere in pratica ogni concetto trattato.

⚡ Studia Al Tuo Ritmo

Puoi impegnarti al massimo e completare diversi livelli in una settimana, oppure prenderti il tuo tempo e concentrarti più a lungo su ciascun concetto. Sta a te decidere il ritmo che funzionerà meglio. L’unico requisito per finire con successo il corso è la costanza. Praticare 1 o 2 ore al giorno dà risultati molto migliori rispetto a dedicarsi allo studio una volta a settimana per diverse ore di fila.
Per assicurarti di non rimanere bloccato, è disponibile un forum di supporto. Puoi fare domande o aiutare gli altri rispondendo ai loro quesiti all’interno di ogni sfida.

🎓 Programma

Questo corso si concentra sui concetti fondamentali di Strutture Dati e Algoritmi, introducendo ognuno in modo intuitivo. Per rendere il processo più coinvolgente e divertente, i concetti sono organizzati in livelli, e superare ogni livello significa padroneggiare un nuovo tema. Ecco i principali argomenti che tratteremo:
Problemi di implementazione
  • L’algoritmo è esplicitato direttamente nel problema
  • Utilizzo di strutture dati di base come array, dizionari, set, ecc.
Operazioni bitwise
  • La rappresentazione binaria dei numeri (int → bin, bin → int)
  • Rappresentazione dei numeri negativi in binario
  • Operazioni bitwise OR, AND, XOR
  • Rappresentazione in base-k (base-10 → base-k, base-k → base-10)
Prefix sums
  • Prefix sum su array monodimensionali
  • Prefix sum su tabelle bidimensionali
Sliding window / Two pointers
  • Sliding window per calcolare somme
  • Sliding window per trovare valori unici
Teoria dei numeri
  • Verifica di primalità - ,
  • Crivello di Eratostene
  • Fattorizzazione in numeri primi
  • Massimo Comun Divisore (GCD) e Minimo Comune Multiplo (LCM)
  • Aritmetica modulare
Binary Search
  • Ricerca lineare VS Binary Search
  • Trovare un valore in un array ordinato con la ricerca binaria
  • Ricerca di un numero in virgola mobile con una determinata precisione
  • Includere l’estremo sinistro VS includere l’estremo destro nella risposta
  • Binary search della risposta
Ordinamento
  • Bogosort
  • Selection sort
  • Insertion sort
  • Bubble sort
Algoritmi Greedy
  • Strategie greedy
  • Euristiche greedy
Programmazione Dinamica
  • Programmazione dinamica monodimensionale (Fibonacci, ecc.)
  • Coin change (numero minimo di monete)
  • Coin change (numero di modi)
Ricorsione
  • Fattori di ramificazione
  • Codice di Gray
  • Torre di Hanoi
  • Divisione ricorsiva di un problema in sottoproblemi
Divide & Conquer & Ordinamenti Avanzati
  • Merge sort
  • Quick sort
  • Ordinamento in-place
  • La complessità degli algoritmi di ordinamento basati sul confronto è sempre ≥
Linked List
  • Nodi e collegamenti
  • Scansione e ricerca
  • Eliminazione e inserimento di elementi
Queue & Stack
  • Ordine di inserimento e rimozione
  • Ottimizzare la ricerca con uno stack
Albero Binario e Binary Search Tree (BST)
  • Costruzione di un albero binario
  • Ricerca in un albero binario
  • Aggiornare ed eliminare elementi da un albero
Heap
  • Heapify
  • Heap sort
Hashing
  • Funzioni di hashing
  • Collisioni
Programmazione Dinamica Avanzata
  • Edit Distance
  • Problema dello zaino (Knapsack)
  • Longest Increasing Subsequence
  • Moltiplicazione efficiente di n matrici
Rappresentazioni dei Grafi
  • Matrice di adiacenza
  • Lista di adiacenza
  • Lista degli archi
  • Grado dei vertici
Breadth-First Search (BFS)
  • BFS nei grafi
  • Trovare il percorso più breve
  • BFS su una griglia
  • BFS su altre strutture
Depth-First Search (DFS)
  • Connettività
  • Cicli
  • Ordinamento topologico
  • Bipartizione
Trie
  • Ricerca di stringhe
Dijkstra
  • Trovare il percorso più breve in un grafo pesato
  • Trucchi per semplificare e migliorare i tempi di esecuzione in diverse tipologie di problema
Backtracking
  • N Queens
  • Colorazione di grafi
  • Riempimento di griglie con valori
Segment Tree
  • Segment tree di base - costruzione, lettura, aggiornamento
  • Query su intervalli e aggiornamento dei valori
  • Binary search su un prefix
  • Memorizzare più valori in un nodo
  • Pre-elaborare l’input e poi utilizzare un segment tree
Complessità degli Algoritmi
  • Notazione Big formalizzata
  • P vs NP

🚀 Benvenuto

L’apprendimento è per l’80% un lavoro individuale. Completare questo corso sarà un tuo successo personale, e noi siamo qui per sostenerti in questo percorso!