Jak zacząć uczyć się algorytmów i struktur danych?

0

Witam mam w planach zacząć uczyć się algorytmów i struktur danych w Pythonie jak skończę przerabiać książkę Marka Lutza i mam do was takie pytanie, czy muszę uczyć się na pamięć jak napisać quick sort, merge sort, linked list, binary tree?

2

Nie musisz - do takich rzeczy się korzysta z bibliotek np biblioteki standardowej. W ekstremalnych przypadkach możesz potrzebować co napisać, ale w 99.99% standardowe rozwiązania wystarczą.

0

Chodzi mi bardziej o samą naukę programowania niż komercyjne pisanie softu.

1
doskanoness napisał(a):

Chodzi mi bardziej o samą naukę programowania niż komercyjne pisanie softu.

A to poco się uczysz tego programowania?

0

Dla przyjemności

2
doskanoness napisał(a):

Dla przyjemności

To jak znajomość powyższych algorytmów sprawi ci przyjemność to się ich naucz.

2

Na pamięć nie, ale zrozumieć i być w stanie napisać z ręki na pewno będzie na +

1

Kanał Errichto na YT :) jest tez sporo innych poświęconych tej tematyce

4
doskanoness napisał(a):

Witam mam w planach zacząć uczyć się algorytmów i struktur danych w Pythonie jak skończę przerabiać książkę Marka Lutza i mam do was takie pytanie, czy muszę uczyć się na pamięć jak napisać quick sort, merge sort, linked list, binary tree?

Kiedy, potrzebujesz się czegoś uczyć na pamięć:

  • kiedy ktoś cię o to pyta/egzaminuje/sprawdza twoją wiedzę - czy to na rekrutacji, maturze, egzaminie
  • jeśli robisz coś często. Z tym, że jeśli coś często robisz w programowaniu to:
    • sam zaczynasz to odruchowo pamiętać i nic nie musisz robić więcej
    • może być to znak, że tracisz czas na robienie w kółko tego samego (wtedy można daną rzecz wydzielić do osobnego modułu (albo skorzystać z istniejących) zamiast robić ciągle to samo z pamięci).

A poza tym - algorytmy lepiej rozumieć niż znać na pamięć. Nie ma nic złego w tym, że rozumiesz ogólnie algorytm, ale żeby go zaimplementować, musisz się posiłkować pseudokodem z wikipedii. Algorytmy są trochę porąbane.

Struktury danych natomiast warto umieć sobie wyobrazić przede wszystkim (bo jak umiesz sobie wyobrazić, to i umiesz zaimplementować. Pod warunkiem, że znasz dany język programowania na tyle, żeby umieć to zrobić) oraz umieć stosować, wiedzieć, jakie mają zalety i wady (np. jakie ma zalety i wady linked list?)

0

http://www.openbookproject.net/books/pythonds/ - czytałem i polecam. Rób też zadania do każdego rozdziału

4

Po pierwsze, nie uczyłbym się "na pamięć", jeśli nie lubiłbym uczyć się na pamięć. Lubisz to robić? Zauważ zresztą, że można wprowadzić takie rozróżnienie: "uczyć się na pamięć poezji" to nie to samo, co "uczyć się na pamięć algorytmów". Nie chcę czepiać się słówek, jedynie pokazać, że to wyrażenie może być różnie rozumiane.

Poradziłbym tak: wybierz dwa języki programowania (nie zachęcam koniecznie do Pythona, bo go niespecjalnie lubię, zdecyduj sam). Każdy z czterech wymienionych algorytmów zaimplementuj dwa razy: raz w pierwszym z wybranych języków, a raz w drugim. Jeśli wydaje Ci się to małym wyzwaniem, spróbuj obrać jakiś dodatkowy cel:

  • zaimplementuj dany algorytm wykorzystując jak najmniej linii kodu (lub znaków, lub wyrażeń), albo
  • zaimplementuj najbardziej ogólną wersję danego algorytmu, albo
  • zaimplementuj jak najprostszą wersję danego algorytmu ("najprostszą" dla Ciebie, subiektywnie).

Nie wiem, jakie ogólnie masz podejście do nauki; dla mnie nauka polega w pewnej mierze na organizacji "pod siebie" przyswajanego materiału (czytanego, słuchanego, oglądanego, implementowanego). Przez tę "organizację" rozumiem też "sposób przyswajania". I tak, pewien wpływ na przyswajanie materiału ma otoczenie, w jakim się uczysz (noc/dzień, czy jesteś sam w pokoju itp.), a pewien Twój nastrój (czy spieszysz się, czy jesteś zaspany itp.). Dalej: czasem pomagają w tej organizacji notatki, jakie sukcesywnie robisz (niektórzy lubią wszystko notować, niektórzy nie lubią notować w ogóle). W przypadku algorytmów, które podałeś, sprawa jest o tyle dobra, że są szeroko znane i dobrze opisane na wiele różnych sposobów. Szukając informacji wystarczająco długo masz szansę trafić na opracowania, które będą do Ciebie bardziej trafiać niż pierwsze z brzegu z internetu. Jeśli nie znajdziesz żadnego fajnego opracowania, napisz własne, dla siebie, na podstawie znalezionych.


PS Co chcę na koniec przekazać – pisz, pisz, i jeszcze raz pisz kolejne wersje kolejnych algorytmów w kolejnych językach programowania. Patrz na kod, zastanawiaj się nad nim, usuwaj przecinek, wstawiaj kropkę. Może kod rozrósł się tak, że trudno Ci go ogarnąć? Przepisz. Jaki jest Twój cel – wydajność czy elegancja kodu, a może oba? Nie chce Ci się implementować danego algorytmu – dlaczego? Za długi, niezrozumiały, może za wolny? Zastanów się – zdefiniuj problem, załóż wątek na 4p, szukaj rozwiązania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1