Czy Python nadaje się do nauki algorytmów i struktur danych?
Tak, a do nauki to prawdopodobnie najlepszy wybór: kod jest krótki, więc czytasz algorytm, a nie otaczającą go składnię. Warto znać dwa kompromisy. Python działa wolniej niż Java czy C++, co ma znaczenie przy ciasnych limitach czasu w programowaniu sportowym, ale rzadko na rozmowie. Jego wbudowane typy ukrywają koszty, o których uczysz się rozumować, i dlatego w tej ścieżce najpierw budujesz je samodzielnie.
Które struktury danych w Pythonie trzeba znać na rozmowę rekrutacyjną?
list (tablica dynamiczna), dict i set (tablice mieszające), tuple, collections.deque (kolejka szybka na obu końcach), heapq (binarny kopiec minimalny na liście) i collections.Counter. Znaj koszt każdej operacji, a nie tylko jej nazwę. Python nie ma wbudowanej listy wiązanej, drzewa, drzewa trie ani grafu, więc te piszesz samodzielnie, w krokach pierwszym i drugim.
Po co implementować stos albo kolejkę, skoro Python już je ma?
Bo na rozmowach rzadko prosi się o użycie kolejki, a często pyta, dlaczego twoje rozwiązanie jest wolne. Kolejka zbudowana na list płaci za każde pop(0), bo każdy pozostały element przesuwa się o jedno miejsce. deque.popleft() tego nie robi. Jednorazowa implementacja każdej struktury to sposób, żeby poznać koszty na tyle dobrze, by wybierać właściwą bez zastanowienia.
Czy Python jest wystarczająco szybki do programowania sportowego?
W większości zadań tak. Przy ciasnych limitach czasu bezpieczniejszym wyborem jest C++, dlatego używa go większość zawodników, a wiele sprawdzarek oferuje PyPy, który wykonuje ten sam kod w Pythonie znacznie szybciej. Na rozmowie rekrutacyjnej to, jak szybko piszesz, liczy się znacznie bardziej niż to, jak szybko działa kod, i tam Python wygrywa.
Jaki jest limit rekurencji w Pythonie i czy ma znaczenie przy algorytmach?
CPython domyślnie zatrzymuje się na głębokości 1000 wywołań, więc rekurencyjne przeszukiwanie w głąb po długim łańcuchu może rzucić RecursionError. Limit można podnieść przez sys.setrecursionlimit, ale lepszy nawyk, który rekruterzy lubią widzieć, to umiejętność zastąpienia rekurencji pętlą i jawnym stosem: strukturą budowaną w kroku pierwszym.
Czy muszę znać Pythona, zanim zacznę tę ścieżkę?
Funkcje, pętle, listy i słowniki nie powinny sprawiać ci trudności, a najlepiej także klasy, bo każda struktura jest tu napisana jako klasa. Jeśli jeszcze nie jesteś na tym etapie, kurs Pythona w Coddy najpierw cię tam doprowadzi, za darmo, a ta ścieżka zaczyna się tam, gdzie on się kończy.