Nauka algorytmów

0

Witam mam pytanie,bo zawsze wydawało mi się,że umiejętność pisania algorytmów zależy tylko od predyspozycji człowieka i to jest na pewno częściowo prawdą,ale zastanawiam się czy przy robieniu ćwiczeń,czytaniu o algorytmach człowiek może rozwinąć umiejętność pisania algorytmów?Wszystkich algorytmów nie da sie nauczyć i dlatego sie zastanawiam.

0

Poczytaj:
Jon Bentley Perełki programowania,
Wirth Niklaus - Algorytmy + struktury danych = programy.

To stare książki ale bardzo aktualne i dzisiaj...

0

Do tego jeszcze obowiązkowo:
Edsger Dijkstra - UMIEJĘTNOŚĆ PROGRAMOWANIA.

0

Pisanie algorytmów bym podzielił na dwie kategorie:

  • stosowanie klasycznych algorytmów
  • tworzenie nowych algorytmów

Stosowania klasycznych algorytmów polega na wykorzystywaniu znanego algorytmu (opisanego gdzieś np w Cormenie) do rozwiązania swojego problemu i tego jak najbardziej można i warto się nauczyć.
Natomiast gdy trzeba rozwiązać trudniejszy problem (nieopisany w żadnej książce/internecie) i napisać kompletnie własny algorytm, no to cóż, im więcej "talentu" tym lepiej.

Wiele problemów w życiu codziennym programisty sprowadza się właśnie do tej pierwszej kategorii, także początkowe zadani w konkursach algorytmicznych zwykle wymagają wyłącznie zastosowania jakiegoś z klasycznych algorytmów.

0

Owszem, czytanie i robienie ćwiczeń pomaga. Popytaj kolegów olimpijczyków, to kwestia wyćwiczenia.
Jednemu może zająć to rok, innemu trzy lata albo więcej, a i tak znajdzie się coś nowego, czego możesz się nauczyć. Przecież całą Twoją obecna wiedza i umiejętności, to wynik tego robiłeś przez wszystkie lata wcześniej.

Nie wiem co rozumiesz przez wszystkie algorytmy, ale kanon warto znać, czyli m.i. sortowania, bisekcje, drzewa, grafy, algorytmy tekstowe, hashowanie.

0

Ok dzieki za odp,głownie chodziło mi o to,że jak dostane zadanie z algorytmu którego nigdy nie widziałem to czy bedzie łatwiej mi go rozwiązać jeżeli wczesniej dużo ćwiczyłem i czytałem o innych algorytmach niż jakbym polegał tylko na intelekcie.Odp juz znam dzieki.

1

a ja bym miał pytanie do starszych kolegów algorytmików albo tych co wiedzą :P
jak to wygląda w praktyce, znajomość algorytmów? czy są jakieś konkretne rzeczy które warto robić żeby przestawić się na algorytmiczne myslenie? Niemal pewne jest, że w świecie pracy nie dostaniesz zadania jak na SPOJu, ale przy pewnych zadaniach znajomosc teorii algorytmów może pomóc

chodzi mi o to, że czasem znajomość np algorytmu dijkstry pomoże nam w zadaniu które z pozoru nie jest algorytmicznym wyzwaniem; że to nie chodzi o 100% perfekcyjna znajomosc każdego algorytmu w każdym wydaniu, ale czucie kiedy, co użyć

To się po prostu przyswaja samo, znając teorie algorytmów i w miare z upływem czasu coraz bardziej to wchodzi w krew
czy raczej istotne jest klepanie typowo algo-tasków takich jak np ma SPOJ czy inne tego typu strony?

0

Istotne jest pisanie. Bez tego nie zauważasz albo nie zwracasz uwagi. Jak już kilka razu użyjesz jakiejś techniki, to się przestawisz na filtrowanie miejsc gdzie można to wykorzystać.

SPOJ sobie daruj, zajrzyj do:
Codility
topcoder
oj.leetcode.com
hackerrank
codeforce

0

Ale tobie chodzi o tworzenie "algorytmow" zeby przejsc testy na codility, czy o tworzenie super-hiper algorytmow, ktorych nikt jeszcze nie uzywa? W pierwszej opcji polece Ci kodowac, kodowac... i kodowac. Samemu sie tego nauczysz rozwiazujac coraz to nowe problemy.

Co do drugiej.. zastanow sie czy Ci to w ogole potrzebne jak chesz zostac devem.

0

Spoja czemu pominąć?Zbyt trudne zadania,bardziej dla matematyków niż programistów?

0

Moze spoj to zadania (zbyt) akademickie?

1

Nie, spoj jest slaby. Łatwo o zadania, które nie trzymają poziomu. Wiec łatwo pójść w złym kierunku.

Polecam korzystać z anglojęzycznych portalów, wyjdzie Ci to na dobre. W przyszłej pracy prawdopodobnie cała dokumentacja będzie po angielsku, rozmowy rekrutacyjne też mogą być o angielsku, a i koduje się po angielsku, w międzynarodowych zespołach porozumiewa się po angielsku. Angielska literatura jest aktualniejsza i bogatsza, nie rani oczu konstrukcjami językowymi typu zrąb czy "rygiel pętlowy" (autentyczne tłumaczenie).

0

Też nie wiem czemu SPOJ miałby być nie odpowiedni, każdy system który umożliwia dokładne przetestowanie swojego algorytmu na dużych ilościach danych wejściowych jest odpowiedni moim zdaniem.

0

Moje subiektywne odczucia. Np. taki hackerrank pozwala wybierać algo wg. kategorii. Na SPOJu ostatnio jak sprawdzałem, nie widziałęm tej opcji.

0

SPOJ to strata czasu, bo ma bardzo słabe community (i zadania też). TC i CF ma taką przewagę, że robisz jakieś zadanie i w każdej chwili (no chyba, że konkurs to wtedy od razu po konkursie) możesz sprawdzić jego rozwiązanie (editorial + kod) napisane przez ludzi z top 100 na świecie w danym temacie.

0

W takim razie dlaczego nikt nie wspomni o OIG/OI/PA ? Zadnia stamtąd są rozwiązane w niebiesiech książeczkach. Kody źródłowe są dołączone, ba są nawet filmiki z omówieniami.

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