Jak nauczyć się rozwiązywać zadania algorytmiczne typu codility , hackerrank itp

Odpowiedz Nowy wątek
2019-08-10 11:02
0

Witam , jaka wiedza jest potrzebna do rozwiązywania takich zadań rekrutacyjnych i nie tylko z algorytmów ? Czy potrzeba do tego wiedza z matematyki np rachunek prawdopodobieństwa/kombinatoryka ? Czy są jakieś kursy / książki które pokazują jakieś metody rozwiązywań zadań algorytmicznych bo jako początkujący jak czytam takie zadanie to nie wiem nawet od czego zacząć .

Pozostało 580 znaków

2019-08-10 11:09
1

Potem pewnie Cormen.

Pozostało 580 znaków

2019-08-10 11:11
2

Oczywiście to zależy od typu zadania.
Czasem faktycznie kombinatoryka się przydaje, ale w bardzo podstawowym zakresie, podobnie jak matematyka ogółem.

Bardziej przydatna jest wiedza o podstawowych algorytmach matematycznych (NWW, NWD, sito Eratostenesa etc.), sortowaniach itp. Poleciłbym także poznanie struktur danych (listy, kopce, drzewa, wektory, grafy).

Materiały z PWr po polsku:
http://www.zio.iiar.pwr.wroc.pl/sdizo.html

Zwłaszcza:

http://www.zio.iiar.pwr.wroc.[...]klady/sdizo_2018_wyklad_3.pdf
http://www.zio.iiar.pwr.wroc.[...]klady/sdizo_wyklad_5_2019.pdf

Obcojęzyczne:
https://algorithms.openmymind.net/
https://fiftyexamples.readthedocs.io/en/latest/algorithms.html

I oczywiście - wspomniany Cormen ;)
http://web.ist.utl.pt/~fabio.ferreira/material/asa/clrs.pdf

edytowany 1x, ostatnio: xfin, 2019-08-10 11:13

Pozostało 580 znaków

2019-08-10 11:12
0

Czy w tych materiałach mówią jak wpadać na rozwiązania czy tylko opisują istniejące algorytmy ? Czy może chodzi o to że do robienia tych zadań wykorzystuje się ogólnie znane algorytmy z ksiażek ? Sorry za laickość moich pytań.

edytowany 1x, ostatnio: trzmiel, 2019-08-10 11:13

Pozostało 580 znaków

2019-08-10 11:15
0

Głównie pokazuje się istniejące algorytmy - inaczej dostajesz narzędzia do rozwiązywania swoich problemów.
Z drugiej strony linki "obcojęzyczne" mają proste przykłady, polecam poczytać.

edytowany 1x, ostatnio: xfin, 2019-08-10 11:15

Pozostało 580 znaków

2019-08-10 11:17
1
trzmiel napisał(a):

Czy w tych materiałach mówią jak wpadać na rozwiązania czy tylko opisują istniejące algorytmy ?

"Wpadanie na rozwiązania" przychodzi z doświadczeniem, podobnie jak w rozwiązywaniu normalnych zadań z matematyki. W książkach podanych wyżej (w szczególności "Zaprzyjaźnij się z algorytmami" Tomasiewicza) masz obrazowe przykłady, które co pomogą.

Czy może chodzi o to że do robienia tych zadań wykorzystuje się ogólnie znane algorytmy z ksiażek ? Sorry za laickość moich pytań.

Tak, tak samo jak do rozwiązywania zadań tekstowych z matematyki wykorzystuje się ogólne metody, trzeba tylko przełożyć rozwleczony tekst o Bajtazarach w Bajtocjii na ściśle zdefiniowany problem i zaaplikować odpowiednia matematykę/algorytm.

edytowany 2x, ostatnio: Spearhead, 2019-08-10 11:17

Pozostało 580 znaków

2019-08-10 11:27
2
  1. Znajomość istniejących algorytmów sprawia ze nie wymyślasz koła na nowo. Problemy algorytmiczne są raczej "unikane", ale mimo wszystko często wymagają użycia takich rzeczy jak mapa, set czy też posortowania czegoś itd. Te rzeczy nie są "celem" tylko środkiem do osiągnięcia celu i trzeba je znać i rozumieć
  2. Znajomość istnejących algorytmów pokazuje ci pewne "metody", jak dziel i zwyciężaj czy programowanie dynamiczne i zachłanne. Jak zobaczysz na czym to polega na przykładzie jakiegoś istniejącego algorytmu, łatwiej będzie potem "wpaść" na to w nowym problemie.

Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2019-08-10 12:11
0

Obstawiam, że po prostu trzeba najwięcej robić tego typu zadań, ćwiczyć się w ich robieniu i tyle (są przykładowe zadania na Codility, które można sobie robić - każdego tygodnia jest inne https://app.codility.com/programmers/challenges/ ), w razie potrzeby coś tam doczytując na SO, Wikipedii czy w innych źródłach (ale jednak to na czas jest, więc trzeba i tak wyćwiczyć pewne rozwiązania, żeby umieć potem podobne zaklepać w ciągu kilku minut).

Czy są jakieś kursy / książki które pokazują jakieś metody rozwiązywań zadań algorytmicznych

Jest taka książka "Cracking the code interview", ale nie czytałem.

Poza tym są też książki o algorytmach (ja coś Knutha przeglądałem kiedyś w bibliotece).


((0b10*0b11*(0b10**0b101-0b10)**0b10+0b110)**0b10+(100-1)**0b10+0x10-1).toString(0b10**0b101+0b100);
edytowany 1x, ostatnio: LukeJL, 2019-08-10 12:11

Pozostało 580 znaków

2019-08-10 12:44
2

Jak się nauczyć robić leki na nowe choroby?
Trzeba się dowiedzieć jak robiono leki na stare choroby i kombinować/eksperymentować z nabytą wiedzą.
A przede wszystkim, przestudiować jak działa choroba, na którą lekarstwo opracowujemy.

edytowany 1x, ostatnio: Spine, 2019-08-10 12:44

Pozostało 580 znaków

2019-08-10 18:56
0

Myślę, że powinieneś zobaczyć jakie tam są zadania, czy wszystko trzeba robić z pamięci i czy właśnie takie zadania są ci potrzebne? Bardzo trudne zadania polegają na znajomości zaawansowanej matematyki i algorytmów heurystycznych. A czy takie proste zadanie zrobisz w godzinę?
Dwie liczby, A i B, są tworzone z cyfr od 0 do 9, używając każdej cyfry tylko raz, to znaczy że obie liczby nie mają tych samych cyfr. Sześcian jednej z liczb jest równy kwadratowi drugiej, tj. A do kwadratu = B do sześcianu. Jakie są te liczby?

Pozostało 580 znaków

2019-08-16 15:34
0

ostatnio zaczałam robic pierwsze 100 zadan w project euler. Jedno z nich mnie rozwala: dla n=10, jest 5 mozliwych podzbiorów liczb pierwszych mniejszych od 10, których suma daje 10. Trzeba znalezc n, dla ktorego liczba takich podzbiorów wynosi 1000. Oczywiscie zaczalam od metody brute force

def allCombinations(lst,n):
    t=[]
    for i in range(2, n//2+1):
        nElementhPermutations= list(itertools.combinations_with_replacement(lst, i))
        for tup in nElementhPermutations:
            if sum(tup)==n: t.append(tup) 
    return t

Ale algorytm zdycha z MemoryError dla n=39, dla których jest ok 12 licz pierwszych mniejszych od n i 272 znalezione podzbiory ktorych suma wynosi n

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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