Nauka algorytmów

0

Dzień dobry, w jaki sposób uczyć się algorytmów? chodzi i różnego rodzaju sortowania.
Czy jest w dziedzinie algorytmów co trzeba zapamiętać?

0

Dzień dobry, w jaki sposób uczyć się algorytmów? chodzi i różnego rodzaju sortowania.

Chyba "chodzi o róznego rodzaju sortowania". Uczyć się tak samo jak wszystkiego innego, czyli przeczytać, zrozumieć spróbować zaimplementować.

Chociaż algorytmy sortowania to jakiś 0.04% algorytmiki, więc nie wiem czemu akurat na nich się skoncentrowałeś.

Czy jest w dziedzinie algorytmów co trzeba zapamiętać?

Przeczytaj jeszcze raz pytanie, bo trochę go nie rozumiem :P.

0

Współczesne technologie eliminują konieczność nauki algorytmów sortowania. Jak chcesz sobie posortować kolekcję, to wystarczy odpowiedni komparator napisać.
Tablicę typu prostego często można posortować jeszcze łatwiej.

Python:

   tablica = [1,7,4,23,7]
   print (sorted(tablica))
   [1, 4, 7, 7, 23]

C# z komparatorem:

using System;
using System.Collections.Generic;

class A {
  public string s;
  public float f;
  
  public A(string s, float f) {
    this.s = s;
    this.f = f;
  }
  
  public override string ToString() {
    return s + "   " + f.ToString("0.0000");
  } 
}

class MainClass {
  public static void Main (string[] args) {
    List<A> l = new List<A>();
    
    l.Add(new A("Jarek", 3.0f));
    l.Add(new A("Marek", 11.0f));
    l.Add(new A("Arek", 6.0f));
    
    l.Sort(
      delegate(A a1, A a2)
      {
          return a1.s.CompareTo(a2.s);
      }
    );
    
    foreach (A item in l) {
      Console.WriteLine (item);
    }
  }
}

W Pythonie też można wskazać klucz sortowania, albo podać lambdę z komparatorem, w C# można też skorzystać z LINQ, itd....
Także, to co teraz mamy już zrobione, całkiem dobrze sobie radzi z sortowaniem ;)

1
Spine napisał(a):

Współczesne technologie eliminują konieczność nauki algorytmów sortowania. Jak chcesz sobie posortować kolekcję, to wystarczy odpowiedni komparator napisać.
Tablicę typu prostego często można posortować jeszcze łatwiej.

Python:

   tablica = [1,7,4,23,7]
   print (sorted(tablica))
   [1, 4, 7, 7, 23]

Patrząc tutaj:
https://lemire.me/blog/2017/02/06/sorting-sorted-arrays-in-swift/
to jednak czasem trzeba coś tam wiedzieć, albo chociaż sprawdzić co jest grane.

0

Jeśli zajmujemy się sortowaniem dużej ilości danych - pewnie, czemu by nie poczytać o tym. Jednak w wielu przypadkach wydajność sortowania jest sprawą drugorzędną, bo sortujemy mało danych ;)

4
Spine napisał(a):

Współczesne technologie eliminują konieczność nauki algorytmów sortowania.

Obecne technologie eliminują konieczność samodzielnego gotowania, można pójść do restauracji, zamówić jedzenie do domu, albo kupić gotowe danie w supermarkecie. Czy to oznacza, że nie warto potrafić samodzielnie gotować?

Algorytmy sortujące to dosyć prosta i przyjemna droga do algorytmów w ogóle. Można łatwo załapać o co chodzi z notacją big-O albo poznać divide & conquer.

Jako wstęp do algorytmów rewelacyjna jest ta pozycja, którą można przeczytać w kilka wieczorów:
https://helion.pl/ksiazki/algorytmy-ilustrowany-przewodnik-aditya-bhargava,algoip.htm#format/d

Jako nieco cięższy wstęp do algorytmów, zawierający więcej algorytmów, również na kilka wieczorów:
https://helion.pl/ksiazki/algorytmy-bez-tajemnic-thomas-h-cormen,algbet.htm#format/d

Jako solidna porcja wiedzy, na kilka tygodni czytania:
https://helion.pl/ksiazki/algorytmy-wydanie-iv-robert-sedgewick-kevin-wayne,algo4v.htm#format/d

0
Haskell napisał(a):

Jako solidna porcja wiedzy, na kilka tygodni czytania:
https://helion.pl/ksiazki/algorytmy-wydanie-iv-robert-sedgewick-kevin-wayne,algo4v.htm#format/d

Do tej książki jest także seria video lektur w języku angielskim, dostępna między innymi na safari books online , coursera oraz na youtube. Polecam.

Oprócz książek warto zaprogramować dane algorytmy. W ten sposób wiedza się utrwali. Dobrze jest też zrobić kilka zadań, które wymagają użycia wybranego algorytmu. Szukać można na SPOJ, Hackerrank, LeetCode, Codility.

Jako nieco cięższy wstęp do algorytmów, zawierający więcej algorytmów, również na kilka wieczorów:
https://helion.pl/ksiazki/algorytmy-bez-tajemnic-thomas-h-cormen,algbet.htm#format/d

Zamiast tej książki polecam CRLS: https://ksiegarnia.pwn.pl/Wprowadzenie-do-algorytmow,68706413,p.html.
Ta książka, którą podałeś, w porównaniu z "Cormenem oryginalnym" jest lekka i nie wyczerpująca.

Spine napisał(a):

Współczesne technologie eliminują konieczność nauki algorytmów sortowania. Jak chcesz sobie posortować kolekcję, to wystarczy odpowiedni komparator napisać.

Owszem. Aczkolwiek brak podstawowej wiedzy z algorytmiki może przekreślić szanse w niektórych rozmowach rekrutacyjnych. Moim zdaniem jest to jeden z elementów, który odróżnia dobrego programistę od klepacza formatek/crudów. Nie twierdzę, że każdy ma w nocy o północy być w stanie zakodować algorytm XYZ, np. kopcowanie tablicy w czasie O(n), ale fajnie by było jakby chociaż wiedział, że coś takiego jak kopiec istnieje

0

Podepnę się pod temat. U mnie na półce leży ta książka: https://helion.pl/ksiazki/algorytmy-struktury-danych-i-techniki-programowania-wydanie-v-piotr-wroblewski,algor5.htm#format/d
Może przeczytam ją w następnej kolejności. Warto? Czy może kupić coś innego? Dodam że w tym temacie jestem całkowitym laikiem, nawet nie wiem czym jest wyżej wspomniane big-O.

0
nalik napisał(a):

Jako nieco cięższy wstęp do algorytmów, zawierający więcej algorytmów, również na kilka wieczorów:
https://helion.pl/ksiazki/algorytmy-bez-tajemnic-thomas-h-cormen,algbet.htm#format/d

Zamiast tej książki polecam CRLS: https://ksiegarnia.pwn.pl/Wprowadzenie-do-algorytmow,68706413,p.html.
Ta książka, którą podałeś, w porównaniu z "Cormenem oryginalnym" jest lekka i nie wyczerpująca.

Celowo podałem tę pozycję, ponieważ proponowanie takiej kobyły jak "Cormen oryginalny" na początek, na wiele osób podziała zniechęcająco. Mały Cormen nieco ponad 200 stron, a oryginalny 1300, poza tym oryginalny jest napisany trudniejszym językiem.

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