Nauka struktur danych i algorytmów

Nauka struktur danych i algorytmów
KK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

Jestem programistycznym samoukiem, coś tam grzebie prawie od roku, całkiem przyjemnie mi się robi zadania algorytmiczne typu leetcode. Aczkolwiek zetknąłem się z ścianą - dotychczas robiłem te zadania na logikę, nie mając teorii za sobą i teraz spotykam problemy które w constraints mają określone złożoności czasowe oraz pamięciowe i wymuszają aby użyć danego algorytmu albo techniki (ostatnio się dowiedziałem o operacjach in-place zamiast tworzenia dodatkowych struktur) o których nie mam pojęcia i jest to blokada, bo inaczej rozwiązanie nie przechodzi. Stąd moje pytanie - skąd czerpać wiedze na ten temat nie studiując informatyki? Czy polecacie jakieś kursy lub książki dla żółtodzioba?

Przy okazji zapytam czy macie jakieś porady jak optymalnie podchodzić do nauki tych tematów - na czym się skupiać, czego unikać, co dla was było pomocne lub game changerem?

obscurity
  • Rejestracja: dni
  • Ostatnio: dni
3

Jak wykupisz premium na leetcode to masz krok po kroku wytłumaczone podejście, algorytmy i sposób rozwiązania.
Bez premium wystarczy że wkleisz treść zadania do jakiegoś AI i też ci wytłumaczy jakie umiejętności testuje zadanie i jaka wiedza jest wymagana.
Możesz też zerknąć na wysłane rozwiązania, nauczyć się z nich, poczytać na wiki o użytych algorytmach itp. Nie kopiuj rozwiązania tylko spróbuj rozwiązać samemu z nową wiedzą za kilka dni

Kuba Kub napisał(a):

ostatnio się dowiedziałem o operacjach in-place zamiast tworzenia dodatkowych struktur

czy tego typu rzeczy trzeba się dowiadywać? To chyba na chłopski rozum można ogarnąć tego typu rzeczy? Może zacznij od zagłębienia się w to jak przechowywane są dane w pamięci i ogarnięcie podstaw struktur danych.

Leetcode to takie matematyczno programistyczne łamigłówki, z pracą programisty nie mają zbyt dużo wspólnego. Chociaż może ci się to przydać na interview do GAYMAN to nie spędzałbym nad tym całego czasu. Kiedyś jak rynek był spokojniejszy i jeszcze nie było AI które potrafi rozwiązać każde zadanie z listy i zaproponować optymalne rozwiązanie to lubiałem sobie czasem siąść wieczorem z piwem i rozwiązać jakieś żeby poduczyć się na zapas, teraz widzę to raczej jako marnowanie czasu.

LukeJL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8536
2

np. jest taki kanał na Youtube Computerphile, gdzie ciekawie takie rzeczy tłumaczą, chociaż niektóre z nich mogą być na wyższym poziomie zaawansowania

Ale jak wpiszesz np. programming data structures albo programming algorithms to znajdzie ci różne inne kanały.

CZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2781
1

Musisz sobie spisać wszystkie możliwe patterns i się ich uczyć. Znany agregator to neetcode gdzie mają całą roadmape nauki dla początkujących. Ja jeszcze przed nimi korzystałem z designgurus i nie polecam tamtego kursu patternow. Fajny jako agregator zadań, ale poza tym to ich judger dxiala tragicznie.
Obecnie polecam kupić sobie premium na leetcode i tam porobić kursy.

Jak chcesz iść na wyższy lvl to idziesz na codeforces i czytasz tam artykuły. Jak chcesz umieć rozwiązywać czwarte zadanie z contestow to musisz już czerpać wiedzę stamtąd.

Jak chcesz ustrukturyzować sobie wiedzę po inżyniersku to książka: wstęp do algorytmów kormena. Ewentualnie competetive programmer handbook.

Generalnie wyszukiwanie patternow i nauka ich to też część procesu zabawy z competetive programming.

TY
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 38
1

Jak chcesz wejść sobie głęboko w tematykę, to jest taka pozycja jak Sztuka programowania. Autor to Donald E. Knuth. Pozycja dość specyficzna i obszerna. Starsze wydania na necie śmigają nawet po polsku, więc można sobie zerknąć.

WhiteLightning
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3339
1

Cormen: https://szarlatan.pl/katalog/cormen-thomas-h-leiserson-charles-e-rivest-ronald-wprowadzenie-do-algorytmow-211164/ (pewnie sa nowsze wydania, ale to musialem miec praktycznie cale przerobione na studiach wiec wspominam z sentymentem, chociaz momentami mialem ochote spalic te ksiazke :P )

Tam masz praktycznei wszystkie algorytmy, pisane w pseudokodzie o ile dobrze pameitam wiec nie sa specyficzne dla jezyka co imho jest dobre. Do tego wyjasnienie pdostaw typu zlozonosci oraz pojec jak P=NP itp. IMHO ksiazk bardziej przyjazna od Knutha, ale pewnie kewstia gustu.

SL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1148
2

Na studiach jest z tego jeden lub dwa przedmioty. Jak poznasz podstawy jak działają algorytmy, jakie są rodzaje złożoności i tak dalej to reszty będziesz w stanie się uczyć we własnym zakresie Przeczytaj Cormena albo ogarnij jakiś typowy kurs ze studów, gdzie cię nauczą z podstawowej teorii, podstawowych algorytmów, grafów i tak dalej

Przy okazji zapytam czy macie jakieś porady jak optymalnie podchodzić do nauki tych tematów - na czym się skupiać,

Warto próbować wsadzić klocek do każdego możliwego otworu. Jak masz problem to zadajesz sobie pytanie jak rozwiązać to w O(log(N)). Jak nie wiesz to jak rozwiązać to w O(N). Przy pewnej wprawie zaczniesz łapać które rozwiązanie pasuje do problemu a które nie mają prawa działać choć jeszcze nie wiesz jakie rozwiązanie jest najlepsze.

Oczywiście duża część problemów to typowe kopiuj wklej. Jak masz doświadczenie to od razu wiesz, że do zadania znajdź unikatową wartość w tablicy, gdzie reszta to duplikaty należy użyć XORa, bo ta algebra idealnie pasuje do rozwiązania. Albo jak widzisz, że gdzieś jest naturalna rekursja to warto spróbować ją jakoś przekształcić do programowania dynamicznego, bo w taki sposób najczęściej upraszcza się dużą złożoność rekursji. Tak naprawdę rozwiązywanie algorytmów to duża biegłość w adaptacji gotowych rozwiązań, które już się widziało do tego co pytają w zadaniu

nie mając teorii za sobą i teraz spotykam problemy które w constraints mają określone złożoności czasowe oraz pamięciowe i wymuszają aby użyć danego algorytmu albo techniki (ostatnio się dowiedziałem o operacjach in-place zamiast tworzenia dodatkowych struktur) o których nie mam pojęcia i jest to blokada

Poczytaj o złożoności obliczeniowej, bo to jest klucz odpowiedzi przy algorytmach. Doświadczona osoba po prostu zawsze wie, że celem jest jak najlepsza złożoność co indukuje, że szukamy rozwiązania, które stara się redukować użycie pamięci poprzez jej ponowne użycie.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.