Projektowanie i złożoność algorytmów - jak myśleć w ten „sposób”?

15

Moje pytanie jest ogólne: jak zacząć myśleć o projektowaniu i złożoności algorytmów? Mam zamiar podjąć kurs magisterski z projektowania algorytmów. Zapisałem się na to wcześniej, ale porzuciłem go później, ponieważ nie mogłem nadążyć. Muszę wziąć ten kurs jako wymóg.

Czy istnieje „sztuczka” do myślenia w ten sposób? Wiem, że jest to dość brutalne, ale czasami nowa perspektywa pomaga inaczej myśleć na dany temat.

Główny problem, jaki mam z tym kursem (i podobnymi kursami teoretycznymi), to: Skąd mam wiedzieć, że zaproponowane przeze mnie rozwiązania są poprawne? Uważam, że część teoretyczna jest arbitralna, zwłaszcza gdy „udowadnianie”, że pewien algorytm działa lub zachowuje się w określony sposób?

Nasz kurs będzie wykorzystywał standardowy tekst: Wprowadzenie do algorytmów CLRS.

Czy są jakieś podręczniki / strony / książki / itp. może to dać sposób na uzyskanie pewności w tej dziedzinie?

Dziękuję wszystkim,

Jason Dane

Jason Dane
źródło
2
Proponuję rzucić okiem na ten post . Szczególnie sugeruję książkę Udi Manbera.
MS Dousti,
1
Ta dyskusja na temat StackOverflow zawiera kilka sugestii: stackoverflow.com/questions/2256721/…
Jeffε
2
Popieram zalecenie Manbera. Zobacz także, jak myśleć o algorytmach Jeffa Edmondsa: amazon.com/Think-About-Al
dp
„Skąd mam wiedzieć, że opracowane przeze mnie rozwiązania są poprawne?” Czy masz na myśli, że (1) wymyśliłeś algorytm, ale nie wiesz, jak udowodnić, że jest poprawny, lub (2) masz dowód, ale nie jesteś pewien, czy jest on poprawny?
Jukka Suomela
Krok pierwszy: przestań dawać proste odpowiedzi i zamiast tego sięgnij po rozwiązania innych. ;)
Raphael

Odpowiedzi:

18

Myślę, że kursy projektowania algorytmów i złożoności obliczeniowej zawsze stanowią wyzwanie dla studentów, którzy nie znają tych przedmiotów, ponieważ wymagają pewnego stopnia dojrzałości matematycznej i umiejętności rozwiązywania problemów. Na moim pierwszym kursie na temat „złożoności obliczeniowej” mój przyjaciel, który ukończył matematykę, powiedział mi, jak bardzo był zaskoczony faktem, że chociaż ten kurs nie wymagał dużego przygotowania matematycznego (przynajmniej tak zostało powiedziane w konspektu kursu), wymagało to prawie wszystkich umiejętności, które uzyskał podczas studiów licencjackich z matematyki!

Odkryłem, że najwięcej o „sposobie” dowiedziałem się (kiedy zaczynałem studia) czytając i wykonując ćwiczenia z książki Sipsera . Upewnij się, że wykonujesz ćwiczenia, ponieważ umiejętności rozwiązywania problemów i dojrzałość matematyczna są tym, czego chcesz się nauczyć, a nie tylko garstką faktów lub definicji.

Jednak książka Sipsera jest dobra tylko ze względu na złożoność i kompletność NP, nie wystarczy zastąpić książkę CLRS. Jedynym problemem związanym z książką CLRS jest to, że jej zaletą wszechstronnego zasięgu może stać się jej słabość, ponieważ książka może wydawać się dość przerażająca lub przytłaczająca dla studentów. Moja rada jest taka: powinieneś naprawdę iść do biblioteki i poszukać książek o algorytmach, przejrzeć je jeden po drugim i wybrać te, które najbardziej pasują do twojego sposobu myślenia. I znowu nie zapomnij robić ćwiczeń!

W przypadku algorytmów osobiście sugeruję następujące książki (oprócz tych sugerowanych przez Sadeqa i Jeffa):

  • Bardzo czytelna i piękna książka Algorytmy autorstwa S. Dasgupta, CH Papadimitriou i UV Vazirani.
  • Notatki zabójcy (lub szkic) autorstwa Jeffa Ericksona. (Ponieważ JeffE jest zbyt skromny, by sugerować własne notatki, muszę to zrobić sam.)

Ogólnie rzecz biorąc, za każdym razem, gdy studiujesz określony algorytm lub strukturę danych, jeśli w jakiś sposób prezentacja w twoim podręczniku nie jest dla ciebie wystarczająco jasna, najlepszym sposobem jest wyszukiwanie w Google notatek z wykładów na ten temat. W niektórych przypadkach różne wyjaśnienia tej samej rzeczy ostatecznie dają pełny obraz. Przynajmniej tak to dla mnie działa.

Dai Le
źródło
8
+1 za notatki zabójcy Jeffa. Zawsze lubię je czytać. Arabska kaligrafia słowa Algorytm jest bardzo piękna.
Mohammad Al-Turkistany