Zrozum struktury danych
Algorytmy i praca na danych w Javie
Niezależnie od tego, jakim językiem programowania się posługujesz, nie staniesz
się dobrym programistą ani nawet przeciętnym informatykiem, jeśli nie przyswoisz sobie
najważniejszych idei inżynierii oprogramowania: algorytmów i struktur danych. Nie są
to zagadnienia proste i z pewnością niejednego studenta informatyki kosztowały wiele
zarwanych nocy. Niestety, istniejące na rynku książki dotyczące tych zagadnień nie
ułatwiają nauki. Najczęściej są przeładowane matematycznymi wywodami, zbyt
teoretyczne, zbyt opasłe i... zbyt oderwane od konkretnych zastosowań!
Jeśli postanowiłeś zyskać praktyczną wiedzę o algorytmach i strukturach danych,
a przy tym nieźle posługujesz się Javą, to trzymasz w rękach właściwą
poublikację.
Podstawy teoretyczne zostały w niej ograniczone do niezbędnych, potrzebnych w
praktyce zagadnień. Sporo miejsca poświęcono analizie implementacji algorytmów i
mierzeniu ich wydajności. Wyczerpująco wyjaśniono tak ważne aspekty praktyki
inżynierii oprogramowania, jak kontrola wersji i testy jednostkowe. Mimo niewielkiej
objętości książki znalazły się tu również ambitniejsze zagadnienia, np. trwałe
struktury danych tworzone przez bazy danych Redis. W każdym rozdziale zamieszczono
praktyczne ćwiczenia wraz z odpowiednim kodem testującym.
W tej książce między innymi:
Wprowadzenie do interfejsów Javy
Analiza algorytmów
Binarne drzewo przeszukiwania
Wyszukiwanie logiczne
Sortowanie
Wstęp (7)
1. Interfejsy (13)
- Dlaczego są dwa rodzaje list? (14)
- Interfejsy w języku Java (15)
- Interfejs List (16)
- Ćwiczenie 1. (17)
2. Analiza algorytmów (21)
- Sortowanie przez wybieranie (23)
- Notacja dużego O (25)
- Ćwiczenie 2. (26)
3. Klasa ArrayList (31)
- Klasyfikacja metod klasy MyArrayList (31)
- Klasyfikacja metody add (33)
- Wielkość problemu obliczeniowego (36)
- Powiązane struktury danych (37)
- Ćwiczenie 3. (39)
- Uwaga na temat odśmiecania pamięci (42)
4. Klasa LinkedList (45)
- Klasyfikacja metod klasy MyLinkedList (45)
- Porównanie klas MyArrayList i MyLinkedList (48)
- Profilowanie (49)
- Interpretacja wyników (52)
- Ćwiczenie 4. (53)
5. Lista dwukierunkowa (55)
- Wyniki profilowania wydajnościowego (55)
- Profilowanie metod klasy LinkedList (57)
- Dodawanie na końcu listy będącej obiektem klasy LinkedList (59)
- Lista dwukierunkowa (61)
- Wybór struktury (62)
6. Przechodzenie przez drzewo (65)
- Mechanizmy wyszukiwania (65)
- Parsowanie kodu HTML (67)
- Używanie biblioteki jsoup (69)
- Iterowanie po drzewie DOM (71)
- Przeszukiwanie w głąb (72)
- Stosy w języku Java (73)
- Iteracyjna implementacja DFS (75)
7. Dochodzenie do filozofii (77)
- Pierwsze kroki (77)
- Interfejsy Iterable i Iterator (78)
- Klasa WikiFetcher (80)
- Ćwiczenie 5. (82)
8. Indekser (85)
- Wybór struktury danych (85)
- Klasa TermCounter (87)
- Ćwiczenie 6. (90)
9. Interfejs Map (95)
- Implementacja klasy MyLinearMap (95)
- Ćwiczenie 7. (96)
- Analiza klasy MyLinearMap (98)
10. Mieszanie (101)
- Mieszanie (101)
- Jak działa mieszanie? (104)
- Mieszanie i zmiany (106)
- Ćwiczenie 8. (107)
11. Klasa HashMap (109)
- Ćwiczenie 9. (109)
- Analiza klasy MyHashMap (111)
- Kompromisy (113)
- Profilowanie klasy MyHashMap (114)
- Poprawianie klasy MyHashMap (114)
- Diagramy klas UML (117)
12. Klasa TreeMap (119)
- Co jest nie tak z mieszaniem? (119)
- Binarne drzewo poszukiwań (120)
- Ćwiczenie 10. (122)
- Implementacja klasy TreeMap (124)
13. Binarne drzewo poszukiwań (129)
- Prosta klasa MyTreeMap (129)
- Wyszukiwanie wartości (130)
- Implementacja metody put (132)
- Przechodzenie poprzeczne (133)
- Metody logarytmiczne (135)
- Drzewa samorównoważące się (137)
- Jeszcze jedno ćwiczenie (138)
14. Trwałość (139)
- Redis (140)
- Serwery i klienty Redisa (141)
- Tworzenie indeksu przy użyciu Redisa (142)
- Typy danych Redisa (144)
- Ćwiczenie 11. (146)
- Więcej sugestii, z których możesz skorzystać (148)
- Kilka wskazówek dotyczących projektu (149)
15. Pełzanie po Wikipedii (151)
- Indekser wykorzystujący Redisa (151)
- Analiza operacji przeglądania (154)
- Analiza operacji indeksowania (155)
- Przechodzenie grafu (156)
- Ćwiczenie 12. (157)
16. Wyszukiwanie logiczne (161)
- Implementacja pełzacza (161)
- Pozyskiwanie informacji (163)
- Wyszukiwanie logiczne (164)
- Ćwiczenie 13. (165)
- Interfejsy Comparable i Comparator (168)
- Rozszerzenia (170)
17. Sortowanie (173)
- Sortowanie przez wstawianie (174)
- Ćwiczenie 14. (176)
- Analiza sortowania przez scalanie (178)
- Sortowanie pozycyjne (180)
- Sortowanie przez kopcowanie (182)
- Kopiec ograniczony (185)
- Złożoność pamięciowa (185)
Skorowidz (189)
192 strony, Format: 14.0x21.0cm, oprawa miękka