Python va bene per algoritmi e strutture dati?
Sì, e per imparare è probabilmente la scelta migliore: il codice è breve, quindi ciò che leggi è l'algoritmo, non la sintassi intorno. Vale la pena conoscere due compromessi. Python è più lento di Java o C++, cosa che conta con i limiti di tempo stretti della programmazione competitiva ma raramente in un colloquio, e le sue strutture integrate nascondono i costi su cui stai imparando a ragionare, ed è per questo che il percorso te le fa costruire prima.
Quali strutture dati di Python devo conoscere per i colloqui tecnici?
list (un array dinamico), dict e set (tabelle hash), tuple, collections.deque (una coda veloce su entrambe le estremità), heapq (un min-heap binario su una lista) e collections.Counter. Devi sapere quanto costa ogni operazione, non solo il suo nome. Python non ha liste concatenate, alberi, trie o grafi integrati, quindi quelli li scrivi tu, nel primo e nel secondo passaggio.
Perché implementare una pila o una coda se Python le ha già?
Perché nei colloqui raramente ti chiedono di usare una coda e spesso ti chiedono perché la tua soluzione è lenta. Una coda basata su una list paga ogni pop(0), perché ogni elemento rimanente si sposta di una posizione; deque.popleft() no. Implementare ogni struttura una volta è il modo per conoscerne i costi abbastanza bene da scegliere quella giusta senza pensarci.
Python è abbastanza veloce per la programmazione competitiva?
Per la maggior parte dei problemi, sì. Con limiti di tempo stretti il C++ è la scelta più sicura, ed è per questo che la maggior parte dei programmatori competitivi lo usa, e molti giudici online offrono PyPy, che esegue lo stesso codice Python molto più velocemente. In un colloquio conta molto di più quanto velocemente scrivi che quanto velocemente gira il codice, e lì vince Python.
Qual è il limite di ricorsione di Python, e conta per algoritmi e strutture dati?
Per impostazione predefinita CPython si ferma a una profondità di 1000 chiamate, quindi una ricerca in profondità ricorsiva su una catena lunga può sollevare RecursionError. Puoi alzare il limite con sys.setrecursionlimit, ma l'abitudine migliore, e quella che chi ti fa il colloquio apprezza, è saper sostituire la ricorsione con un ciclo e una pila esplicita: la struttura che costruisci nel primo passaggio.
Devo conoscere Python prima di iniziare questo percorso?
Dovresti trovarti a tuo agio con funzioni, cicli, liste e dizionari, e idealmente con le classi, dato che ogni struttura qui è scritta come una classe. Se non sei ancora a quel punto, il corso di Python di Coddy ti ci porta prima, gratis, e questo percorso riprende da dove finisce.