Jak nauczyć się algorytmów i struktur danych? [Zamknięte]

38

Jest to kontynuacja mojego poprzedniego pytania, w którym zadałem pytanie, czy trzeba nauczyć się algorytmów i struktur danych. Czuję, że tak.

Teraz pracuję w środowisku, w którym nigdy nie będę mieć szansy na naukę tego poprzez eksperymentowanie, praktycznie lub w ramach dowolnego zadania. Jakie jest właściwe podejście, takie jak właściwe książki, właściwy rodzaj problemów, właściwy rodzaj zasobów, przez które mogę przejść, aby dać sześć miesięcy lub rok lub dwa na naukę algorytmów i struktur danych? A także ukształtować mój umysł w taki sposób, że może on powiązać problemy ze strukturami danych i algorytmami.

Sushil Bharwani
źródło
3
Cormen jest twoim przyjacielem :)
Łukasz Madon
1
@lukas: Wciąż jeszcze tego nie ukończyłem, jest tam całkiem sporo matematyki, z którą nie czuję się tak dobrze. Znacznie więcej przyczyniło się do mojej wiedzy na temat algorytmów, struktur danych i ich analizy, że każde inne pojedyncze źródło :)
Matthieu M.
Możesz także wypróbować mój projekt, który opisuje popularne algorytmy i struktury danych w prostszy sposób niż wikipedia i zawiera kody źródłowe prawie dla każdego artykułu (struktura, podejście, algorytm) ... en.algoritmy.net
malejpavouk

Odpowiedzi:

40

Czytać.

Nie, naprawdę czytaj.

Przeczytaj wszystko o algorytmie i projekcie, jakie możesz znaleźć. Są tam fenomenalne książki. Książki algorytmów Sedgewick są dobre. Dobry jest również Podręcznik projektowania algorytmów autorstwa Skieny. Razem te książki towarzyszą mi na każdym półce w każdej pracy, do której się udam, wraz z The Mythical Man-Month.

Więc zapytaj.

Rozmawiaj z ludźmi, których szanujesz. Zapytaj ich, jakie mieli punkty decyzyjne i dlaczego podjęli decyzje. Ci dobrzy zawsze będą mogli powiedzieć: „Wybrałem X, ponieważ pod tym względem jest lepszy niż A, B. Mógłbym pójść z C, ale czułem, że to był lepszy wybór z tego powodu”.

Następnie zrób.

Twórz rzeczy. Twórz rzeczy, których nigdy nie będziesz używać. Twórz rzeczy, których nigdy nie będziesz potrzebować. Idź napisz program, który rozwiązuje łamigłówkę Sudoku. Teraz zrób to jeszcze raz. I jeszcze raz. Zbuduj to 5 zupełnie różnych sposobów. Zbuduj program, który generuje łamigłówki Sudoku i nakarm go solverami. Znajdź najszybszy solver. I wtedy...

Dowiedz się dlaczego.

„Co” prawie nigdy nie jest ważne. To znaczy, tak, bardzo ważne jest zakończenie projektu, ale na koniec, jeśli wiesz „co”, nie wiedząc „dlaczego”, to równie dobrze możesz nigdy tego nie zrobić. Masz punktora na swoim CV. Zdobądź ciasteczko i pogratuluj sobie. „Dlaczego” jest o wiele ważniejsze niż „co”.

Dla przypomnienia Sudoku było przykładem. Spędziłem dużo czasu na tym ćwiczeniu z mnóstwem zagadek logicznych na Kongregate i wiele się nauczyłem po drodze.

http://www.amazon.com/Bundle-Algorithms-Parts-1-5-Fundamentals/dp/020172684X/ http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/

Hounshell
źródło
naprawdę bardzo dobra odpowiedź! Podoba mi się sposób, w jaki sformułowałeś swoją radę!
paxRoman
Wszędzie zabieram ze sobą książki Sedgewick i Skienna! to prawdopodobnie kolejny powód, dla którego pokochałem twoją odpowiedź!
paxRoman
i Cormen do miksu proszę.
AruniRC
1
W dobie coraz większego zainteresowania informacjami w Internecie ważne jest, aby dodawać: czytać książki (oczywiście nie tylko). Spójne, spójne wprowadzenie w sprawę dłuższą niż 2-3 strony HTML z reklamami to A Good Thing ™ ! Nie lekceważ tego (i tak, oczywiście ebooki są w porządku).
Joachim Sauer,
1
Zgoda. Spójność jest kluczem. Trudno jest przejrzeć struktury danych, gdy dostajesz jedno lub dwa z kilkunastu różnych źródeł. Książki mają też zwykle lepsze diagramy (niektóre blogi / źródła internetowe tak, ale lepiej są książki uogólnione). Książki Sedgewick mają szczególnie dobrą kombinację diagramów, prosty kod i opis.
Hounshell,
10

Algorytmy

Brałem lekcje magii w grupie, kiedy miałem dwanaście lat. Mag nazywał się Joe Carota. Raz zrobił lewę, a ja wyrzuciłem: „Jak to zrobiłeś?” Powiedział coś, co utkwiło we mnie od tamtej pory.

Odpowiedź Joe: „Michael, jeśli naprawdę chcesz wiedzieć, w jaki sposób wykonuje się tę sztuczkę, musisz dowiedzieć się, jak byś to zrobił”.

Oczywiście, że nie tego chciałem usłyszeć, ale skupiłem się na rozwiązywaniu problemów. To było rozwiązanie mojego problemu z mojej perspektywy. Jeśli moja pierwsza próba rozwiązania problemu wymagała siedemnastu kroków i była naprawdę niezręczna, dobra wiadomość była taka, że ​​rozwiązałem problem.

Następnie, patrząc na opracowane przeze mnie rozwiązanie i szukając sposobów na udoskonalenie tego rozwiązania, dowiedziałbym się, jak usprawnić efekt końcowy. Później w moim życiu programistycznym dowiedziałem się, że proces ten nazywał się „udoskonalaniem stopniowym”. Myślę, że dziś nazywają to refaktoryzacją.

Udało się, to nadal działa teraz.

Michael Riley - AKA Gunny
źródło
2

Sprawdź, czy możesz wziąć udział w kursie online lub uzyskać korepetycje. W przeciwnym razie wyskoczyło to podczas szybkiego wyszukiwania w Google. Właśnie wziąłem udział w zajęciach zeszłej wiosny (po raz pierwszy przeniosłem się z EE do oprogramowania) i nietrudno było go odebrać, jeśli dobrze rozumiesz wskaźniki .

Stephen Furlani
źródło
2

Jeśli nie możesz wziąć udziału w kursie na ten temat, poleciłbym Podręcznik projektowania algorytmów. Jest to darmowy PDF tutaj , ale warto uzyskanie rzeczywistej książki jeśli plan programowania profesjonalnie.

Jason Baker
źródło
Rozwiązania są tutaj. Uważam, że wspaniale jest mieć je podczas samodzielnej nauki: www2.alameterm.cs.sunysb.edu:8080/mediawiki/index.php/…
David Rinck
1

Spróbuj zapisać się na studia na poziomie licencjackim w zakresie struktur danych i algorytmów, zawsze dobrze jest uczyć się tych pojęć obok innych.

Martijn Verburg
źródło
Jestem absolwentem informatyki i od tego czasu minęło sześć lat. Nigdy nie koncentrowałem się na tych tematach, ponieważ przyciągnęła mnie sieć, użyteczność, serwer klienta i pracuję tylko na tych polach, ale teraz czuję, że powinienem się ich również nauczyć. Jakie są Twoje myśli.
sushil bharwani,
Wróć i wybierz kurs odświeżający :-)
Martijn Verburg,
1

Zacznij pracę nad rozwiązywaniem klasycznych problemów, na przykład w sferze online , strona może nie wyglądać tak fantazyjnie, ale chłopcze, są to klasyczne problemy programistyczne, które wymagają wielu ważnych struktur danych i algorytmów używanych obecnie.

Rozwiązania można przesyłać w różnych językach programowania, od C / C ++ do JavaScript, Lisp, Smalltalk, asembler + około 40 innych. Możesz więc całkowicie skupić się na rozwiązaniu problemu w dowolnym języku programowania, w którym czujesz się komfortowo.

Ernelli
źródło
1

CLRS

To zdecydowanie mój ulubiony zasób. Użyłem go na studiach licencjackich z algorytmów informatyki i skończyłem kupując książkę 4 lata później, aby samodzielnie przeczytać, aby przygotować się do kursów MS Comp Sci. W żaden sposób nie jest to łatwe do odczytania, ale jeśli pracujesz nad zrozumieniem niektórych przedstawionych matematyki / dowodów, a następnie wdrożysz pseudo-kod w swoim ulubionym języku (językach), warto nieco zawyżoną cenę. Podręcznik projektowania algorytmów, o którym wspominali inni, jest również doskonałym źródłem do nauki identyfikacji problemów, ale uważam, że CLRS jest lepszy pod względem czystych szczegółów.

Kurtis
źródło
0

Zawsze możesz spróbować czegoś takiego: http://codekata.pragprog.com/

Zawsze uczyłem się lepiej, myśląc o tym, zamiast czytać. Powinieneś jednak mieć dostęp do dokumentacji / materiałów do czytania, aby szukać odpowiedzi.

RobotHumans
źródło
0

Kup tę książkę , pożycz to lub ukradnij to! Reszta nastąpi :)

Wprowadzenie do algorytmów Rivest i Cormen. Na początku bardzo trudno będzie podążać za wyjaśnieniem Mergesort we wstępie. Wszystko pięknie się rozwija.

Plus, tym lepiej, jeśli rozwiążesz problemy przedstawione w książce. Nigdy tak naprawdę nie chciałem rozstać się z książką, nawet po ukończeniu szkoły podstawowej. To jest takie dobre.

Venki
źródło