2009-07-06 12 views
5

Jakie jest najlepsze miejsce lub link do nauki algorytmów w C? Skąd wiadomo, kiedy i gdzie zastosować algorytmy, analizując problemy?Algorytmy w C

+0

[Przepisy numeryczne w C] (http://www.nr.com/)! Wersja [1992] (http://www.nrbook.com/a/bookcpdf.html) (2. edycja) jest świetna, jeśli nie chcesz płacić za wersję 2007. –

Odpowiedz

4

Algorithms in C przez Sedgewick jest doskonałym miejscem do rozpoczęcia śledztwa. Po zapoznaniu się z dostępnymi algorytmami i charakterystyką wydajności każdego z nich można sprawdzić, gdzie można korzystać z każdego z nich.

+0

Steve, Wszelkie dokumenty online, które mogłyby być lepsze i bardziej zrozumiałe. –

5

Aby uzyskać uzasadnioną (choć daleką od doskonałości) książkę na temat wdrażania powszechnie używanych algorytmów w języku C, wypróbuj Sedgewick's Algorithms in C. Zauważ, że jak w przypadku każdego przedmiotu technicznego, papierowa książka może być znacznie lepsza od wszelkich zasobów sieciowych.

Jeśli chodzi o to, jak dowiedzieć się, kiedy użyć określonego algorytmu, obawiam się, że to zależy od doświadczenia.

+0

Co masz na myśli przez książkę o papierze Neil? –

+0

Wyjaśnię w mojej odpowiedzi. Oznacza to, że posiadanie prawdziwej książki jest zwykle lepsze niż czytanie w Internecie. – GManNickG

+0

Pewnie. Dziękuję bardzo GManowi i Neilowi. Po prostu chcę, aby był on dokładny dla celów moich rozmów kwalifikacyjnych. –

12

Algorytmy niekoniecznie są powiązane z konkretnym językiem, tylko po to, aby je wyjaśnić, więc każda książka algorytmów zadziała świetnie, o ile zrozumiesz, że pojęcie to struktura danych/algorytm.

To powiedziawszy, wydaje się, że to dobry wybór: Algorithms in C. Mam C++ equivalent na mojej półce.

Istnieje również książka, która wydaje się być agnostykiem językowym (popraw mnie, jeśli się mylę) o nazwie Data Structures & Algorithm's, chociaż słyszę, że jest nieco przestarzała, więc stracisz dostęp do nowszych struktur.

Nie zapominaj, że Internet ma mnóstwo informacji. available to you. Jednak książki są zwykle lepsze dla tego rodzaju rzeczy. Dzieje się tak dlatego, że zasoby internetowe koncentrują się na jednej rzeczy na raz. Na przykład musisz zrozumieć, co to jest Big-O notation, zanim zrozumiesz, co to znaczy, gdy mówimy, że lista ma usunięcie O (1) [stałego czasu].

Książka obejmie te rzeczy we właściwej kolejności, ale zasoby internetowe skupią się na notacji Big-O lub strukturach danych, ale często nie będą łatwo łączyć tych dwóch elementów.


Jeśli chodzi o korzystanie z niego, w większości będziesz mieć połączenie, jeśli chodzi o to, co będziesz robić z danymi.

Na przykład, możesz potrzebować vector (tablica), jeśli potrzebujesz tylko zamówionych elementów, ale jeśli potrzebujesz uporządkowanych elementów i usunięcia z dowolnego miejsca (ale możesz poświęcić losowy dostęp), wówczas bardziej odpowiednie byłoby ustawienie list do ciągłego usuwania.

+0

GMan, Wielkie dzięki –

+0

Istnieje również książka o nazwie "Algorytmy" autorstwa sartaj sahni (zapomniałem współautorów). To dobra książka na temat analizy i projektowania algorytmów. Obejmuje obszerny temat, ale może być przesadą tylko dla wywiadu. – xxxxxxxxxadfas

2

Jak u wiedzieć, kiedy i gdzie używać implementacja algorytmów przez prostu patrząc na problemy

To się nazywa „pasujące do wzorca”, kiedyś widziałem i rozwiązać wiele problemów zaczynasz rozpoznawać typowe rzeczy i możesz ponownie wykorzystać swoją wcześniejszą wiedzę.

Przy okazji, polecam przed dobrą książką tylko na algorytmy przed rozpoczęciem z algorytmów w C, które są trudniejsze do wdrożenia i bardziej podatne na błędy niż w języku wyższego poziomu, a gdy jesteś bardzo pewny siebie z ogólne procedury można rozpocząć dostrajanie i optymalizować je w C.

0

The Algorithm Design Manual jest wart obejrzenia.

+0

Tak, to naprawdę warte obejrzenia, ale myślę, że to nie jest lepsze miejsce do szukania algorytmów w C. Z pewnością pomoże ci uzyskać duży obraz algorytmów i aplikacji w rzeczywistych sytuacjach. – nairdaen

2

Wiele dobrych zasobów mieć już zostałam nazwana, więc nie będę ich tu powtarzać.

Jeśli chodzi o skąd wiadomo, jaki algorytm należy zastosować, gdy?

  • Trzeba mieć na tyle duże, skrzynka narzędzi, które można uzyskać przez siadając i pobijania przez długą listę podstawową (i ich bardziej ezoterycznych) struktury danych i algorytmy. Powinieneś spróbować uzyskać wszystkie podstawy, ale tak naprawdę potrzebujesz tylko próbki od bardziej wyspecjalizowanych.

  • Musisz zrozumieć, jakie są dostępne dla Ciebie (czas, kod złożoności, pamięci pojedynczego kontra wielu przejściach, w miejscu kontra kopia stabilny w porównaniu niestabilnych rodzaju itp ogłoszenie nauseum), jak i kompromisów Algorytmy, które uczysz, działają na każdym z nich. Ponownie, jest to po prostu kwestia dużo nauki. Big-O to miejsce, od którego należy zacząć, ale nie jest to koniec wszystkiego i to wszystko.

  • Musisz zrozumieć, jakie są rzeczywiste ograniczenia, jakie napotykasz podczas przedstawiania problemu, oraz jak wyrazić je w kontekście wspomnianych wyżej algorytmów. Wymaga to pewnego stopnia intuicji i na ogół uczy się przez praktykę w miarę upływu czasu.

  • Warto wdrażać niektóre rzeczy więcej niż jeden sposób, jak iść, aby uczyć się w swoich jelitach, co działa, a co nie.

  • Warto przeczytać kod napisany przez osoby bardziej doświadczone niż ty, aby zobaczyć, jak myślą.

Powodzenia.

1

Ostatnio czytałem Pointers on C przez Kennetha Reeka.Myślałem, że jestem całkiem dobrze zorientowany w C, ale ta książka dała mi kilka epifanii, mimo że była skierowana do początkujących. Przykłady kodu są piękne (ale nie najszybszy kod na procesorze x86). Zapewnia dobre implementacje wielu najpopularniejszych algorytmów i struktur danych, które są w użyciu, wraz z doskonałymi wytłumaczeniami, dlaczego są one implementowane w obecnej postaci (a czasem także z kodem lub sugestiami dotyczącymi alternatywnych implementacji).

Na tej samej stronie, co Twoje pytanie: wzory do tworzenia kodu wielokrotnego użytku w C (to jest to, czego wszyscy chcemy, prawda?), C Interfaces and Implementations: Techniques for Creating Reusable Software, David R. Hanson. Minęło kilka lat, odkąd go przeczytałem, i nie mam kopii, aby zweryfikować to, co pamiętam, jest poprawne, ale jeśli dobrze pamiętam, zajmuje się tym, jak stworzyć dobre C API: s do struktur danych i algorytmów, jako a także dając przykłady implementacji niektórych z najpopularniejszych algorytmów.

tematu: Jak już w większości napisane programy jednorazowe w C do użytku prywatnego, ten pomógł mi pozbyć się niektórych złych nawyków kodowania, jak również jest doskonałym odniesienia C: C: A reference Manual. Przypomina mi, że powinienem to kupić.

1

Potrzebne jest doświadczenie, aby wiedzieć, który zestaw algorytmów należy zastosować dla określonego problemu. Pomocne będzie zdefiniowanie celu. Prędkość, pamięć, solidność, jakość rozwiązania ... są czynnikami decydującymi o tym, które algorytmy zastosować. Możemy opracować różne rozwiązania tego samego problemu, biorąc pod uwagę różne czynniki i scenariusze.

0

Łatwą metodą uczenia się algorytmów jest użycie strony Wiki poświęconej "klasycznym" algorytmom, takim jak algorytmy wyszukiwania lub sortowanie. Konstrukcje algorytmów opierają się na umiejętności korzystania z różnych struktur danych, takich jak połączone listy lub C. Najpierw spróbuj wdrożyć różne struktury danych, takie jak prosta lista połączona lub drzewo binarne, i po próbie użycia w różnych algorytmach, które są powiązane z rzeczywistymi problemy życiowe.

+1

Jak o powiązaniu z pewną próbką Strony Wiki, które okazały się przydatne? – martijno