Jakie algorytmy i struktury danych powinien absolutnie znać programista? [Zamknięte]

24

Chcę być odnoszącym sukcesy deweloperem Java dla przedsiębiorstw. Z jakimi algorytmami i strukturami danych powinienem być dobrze zaznajomiony? Jakie książki poleciłbyś mi?

Aby odnieść sukces jako programista Java, czy muszę znać wszystkie zaawansowane algorytmy, takie jak podane w CLRS ?

Czy możesz zasugerować listę tematów, których powinienem się nauczyć w porządku malejącym według ich priorytetów?

Czy muszę wiedzieć:

  • Badawczy?
  • Sortowanie?
  • Wykresy / drzewa?

itp?

Chankey Pathak
źródło
1
@jonsca: Marketing afiliacyjny ah? ;)
Chankey Pathak
Nie, no cóż, SE zmienia link jako taki, ale właśnie pomyślałem, że nie wszyscy znają te inicjały :)
jonsca,

Odpowiedzi:

17

Wprowadzenie do algorytmów Cormena jest dobrą książką dla niektórych podstawowych podstaw teoretycznych.

To powiedziawszy, większość algorytmów i struktur danych została już zakodowana, przetestowana i zoptymalizowana przez innych i nie ma powodu, aby ponownie je wdrażać. Aby odnieść sukces jako programista Java , musisz znać The Collections Framework na wylot.

Joonas Pulakka
źródło
3
Musisz jednak znać koszty związane z algorytmami: to wyszukiwanie w pierwszej kolejności znajdzie najkrótszą ścieżkę, na przykład wykorzystując potencjalnie dużo miejsca.
Frank Shearar,
Zgadzam się, choć zdobycie ducha wielkiej notacji O to długa droga.
Joonas Pulakka
8

Jeśli chcesz być programistą jakiegokolwiek rodzaju, musisz szczegółowo zrozumieć wszystkie podstawowe struktury danych (stosy, kolejki, tablice, listy połączone, tabele skrótów, drzewa itp.). Wystarczająco, byś mógł samodzielnie wdrożyć dowolne z nich, gdybyś znalazł się w świecie bez ram kolekcjonerskich, które wykonałyby zadanie za Ciebie.

Jeśli chodzi o algorytmy, wydaje mi się, że są one większymi narzędziami do zadań, podczas gdy twoje struktury danych są podstawowymi elementami składowymi. Nie sądzę, aby tak ważne było poznanie szczegółów implementacji każdego algorytmu, na który możesz natknąć się. To, co musisz zrobić, to ocenić, jak dobrze algorytm będzie działał w danym celu. Czasami różnica między wyszukiwaniem głębokościowym a wyszukiwaniem pierwszego stopnia lub rodzajem sortowania danych może mieć bardzo duży wpływ na wydajność lub ogólny sukces kodu, więc umiejętność oceny tego jest bardzo ważna.

glenatron
źródło
0

Oprócz innych odpowiedzi chciałbym tylko dodać, że badanie algorytmów służy nie tylko poznaniu dobrze znanych technik (co jest nadal ważne), ale także zrozumieniu procesu myślowego, który idzie w grę rozwiązanie problemu, na który napotykasz w prawdziwym życiu, niekoniecznie dobrze znane.

MAK
źródło
0

Uczę się Java od kilku dni.

Chcę odnieść sukces jako programista korporacyjny. Jakie algorytmy i struktury danych powinienem być dobrze zorientowany? Jakie książki poleciłbyś mi?

Aby odnieść sukces jako programista Java, czy muszę znać wszystkie zaawansowane algorytmy, takie jak podane w CLRS?

Czy możesz zasugerować mi listę tematów, których powinienem się nauczyć w porządku malejącym według ich priorytetów?

Podaj mi nazwy niektórych tematów, które muszę znać. Jak wyszukiwanie, sortowanie, wykresy, drzewa itp.?

Dobrze, że chętnie poszerzasz swoje umiejętności programistyczne. Ważne jest jednak, aby nie traktować algorytmów jako katalogu rzeczy do zapamiętania. Aby zostać dobrym programistą (w Javie lub czymkolwiek innym), musisz zrozumieć analizę algorytmiczną.

Nauczysz się tego, ucząc się wybranych struktur danych i algorytmów oraz ucząc się analizować ich wydajność pod względem czasu i przestrzeni (pamięci). Wyszukiwanie, sortowanie, wykresy, drzewa, hałdy, stosy i wszystkie te dobre rzeczy. Powinno to również podążać za podstawami teorii obliczeń i matematyki dyskretnej (nawet jeśli w dziedzinie Javy nigdy nie będziemy mogli bezpośrednio korzystać z tych dwóch tematów - ich korzyści są pośrednie).

Oddziel naukę języka programowania (w Twoim przypadku Java) od nauki analizy algorytmicznej (która różni się od „zapamiętywania” algorytmów i struktur danych).

George T. Heineman, Gary Pollice i Stanley Selkow „Algorytmy w pigułce” to dobry początek. „Algorytmy” Sanjada Dasgupty, Christosa Papadimitriou i Umesh Vazirani to kolejny dobry podręcznik licencjacki.

Najlepiej jest wziąć udział w 9-12 kursach kredytowych z zakresu programowania przed podjęciem studiów licencjackich na poziomie 3000 algorytmów. Poza tym samokształcenie z dwiema książkami, o których wspomniałem, może być dobrą alternatywą (samokształcenie może nie być jednak dla wszystkich).

Powodzenia!

luis.espinal
źródło