|
ALGORYTMY STRUKTURY DANYCH I TECHNIKI PROGRAMOWANIA DLA PROGRAMISTÓW JAVA
WRÓBLEWSKI P. wydawnictwo: HELION , rok wydania 2019, wydanie Icena netto: 70.35 Twoja cena 66,83 zł + 5% vat - dodaj do koszyka Algorytmy
struktury danych i techniki programowania dla programistów
Java
Opanuj
Javę jak prawdziwy profesjonalista!
Podstawy
algorytmiki dla praktyków
Modelowanie
struktur danych w Javie
Skuteczne techniki
programowania na przykładach
Java
jest obecnie jednym z najpopularniejszych języków
programowania, co zawdzięcza przede wszystkim swojej prostocie,
nowoczesności, dużym możliwościom oraz niezależności od architektury
platform sprzętowych i systemowych, na których mają pracować
napisane w tym języku programy. Java znalazła zastosowanie w wielu
różnych branżach - zdecydowanie dominuje w rozwiązaniach
działających w sieci, stanowiących obecnie dużą część oprogramowania
tworzonego komercyjnie. Mimo to dotychczas trudno było znaleźć rzetelne
źródło wiedzy o algorytmach, które byłoby
przeznaczone dla użytkowników Javy, wyjaśniało zasady
modelowania danych w tym języku i pozwalało szybko testować gotowe
programy.
Na
szczęście to już przeszłość! Książka Algorytmy, struktury danych i
techniki programowania dla programistów Java jest pierwszą
poważną pozycją przybliżającą tematykę algorytmów osobom
posługującym się tym językiem. W prosty i praktyczny sposób
przedstawia najważniejsze zagadnienia algorytmiki, pozwala poznać
struktury danych i ich zastosowania, prezentuje popularne algorytmy
oraz problemy, które można za ich pomocą rozwiązać, omawia
także techniki programowania wykorzystywane przez miliony
specjalistów w ich codziennej pracy. Jeśli chcesz być
profesjonalnym programistą Javy, nie mogłeś trafić lepiej!
Podstawy
algorytmiki i kodowania liczb
Algorytmy
rekurencyjne i iteracyjne
Analiza
złożoności i optymalizacja algorytmów
Modelowanie
i wykorzystanie struktur danych
Wykorzystanie
biblioteki java.util
Przeszukiwanie
i sortowanie danych
Przegląd
technik programowania
Algorytmy
grafowe i numeryczne
Kodowanie
i kompresja danych
Wprowadzenie
do języka Java i narzędzi JDK
Rozwiązuj problemy
programistyczne w Javie!.
Piotr Wróblewski
— autor wielu książek z dziedziny informatyki. Z wydawnictwem
Helion współpracuje od 1992 roku, czego wynikiem są liczne
podręczniki dotyczące programowania i obsługi komputerów.
Najpopularniejsze do tej pory ABC komputera i Algorytmy, struktury
danych i techniki programowania doczekały się kilku wydań i cieszą się
u Czytelników stałym zainteresowaniem. Ten ostatni tytuł
ukazał się także za granicą.
Piotr Wróblewski
jest absolwentem Politechniki Śląskiej oraz francuskiej uczelni
informatycznej ENSSAT (Lannion w Bretanii). Studia we Francji do tej
pory wspomina jako największą przygodę swojego życia. Po powrocie do
Polski zajmował się pisaniem oprogramowania na zamówienie i
prowadzeniem szkoleń komputerowych. Przez kolejne dziewięć lat pracował
w spółkach zagranicznych z branży IT/telekomunikacja,
głównie w charakterze kierownika projektów
(Impaq, Polkomtel).
Już
w trakcie pracy zawodowej ukończył dodatkowe studia z zarządzania i
marketingu Master HEC w Szkole Biznesu Politechniki Warszawskiej. Od
początku 2006 roku mieszka we Wrocławiu, gdzie pracuje w firmie Nokia
na stanowisku kierownika produktu (obecnie w dziale oferującym
rozwiązania telekomunikacyjne dla sektora bezpieczeństwa publicznego
(tzw. Public Safety).
Przedmowa
Dlaczego Java?
Co odróżnia tę książkę od innych podręczników?
Jak należy czytać tę książkę?
Co zostało opisane w tej książce?
Rozdział
1. Zanim wystartujemy
Rozdział
2. Systemy obliczeniowe i podstawy kodowania
Rozdział
3. Rekurencja
Rozdział
4. Analiza złożoności algorytmów
Rozdział
5. Podstawy modelowania danych
Rozdział
6. Modelowanie abstrakcyjnych typów danych
Rozdział
7. Struktury danych o dostępie ograniczonym
Rozdział
8. Drzewa i zbiory
Rozdział
9. java.util, czyli struktury danych dla leniuchów
Rozdział
10. Algorytmy przeszukiwania
Rozdział
11. Algorytmy sortowania
Rozdział
12. Derekursywacja i optymalizacja algorytmów
Rozdział
13. Przeszukiwanie tekstów
Rozdział
14. Zaawansowane techniki programowania
Rozdział
15. Algorytmy grafowe
Rozdział
16. Algorytmy numeryczne
Rozdział
17. Kodowanie i kompresja danych
Rozdział
18. Czy komputery mogą myśleć?
Rozdział
19. Zadania różne
Dodatek A
Programy przykładowe
Konwencje typograficzne i oznaczenia
Rozdział 1.
Zanim wystartujemy
Czym powinien się charakteryzować algorytm?
Jak to wcześniej bywało, czyli wyjątki z historii maszyn algorytmicznych
1804
1830 i później
1890
lata 30. XX w.
lata 40. XX w.
okres powojenny
1969
teraz
Jak to się niedawno odbyło, czyli o tym, kto wymyślił metodologię
programowania
Proces koncepcji programów
Poziomy abstrakcji opisu i wybór języka
Modelowanie działania algorytmów (maszyna Turinga)
Poprawność algorytmów
Zadania
Zadanie 1.
Zadanie 2.
Zadanie 3.
Rozwiązania i wskazówki do zadań
Zadanie 1.
Zadanie 2.
Zadanie 3.
Rozdział 2. Systemy
obliczeniowe i podstawy kodowania
System dziesiętny i kilka definicji
System dwójkowy
Operacje arytmetyczne na liczbach dwójkowych
Operacje logiczne na liczbach dwójkowych
Kod BCD
System ósemkowy
System szesnastkowy
Kodowanie liczb ze znakiem
Kod znak-moduł (ZM)
Kod U2 (system uzupełnienia dwójkowego)
Przykład wyliczania liczby dziesiętnej w U2:
Przykład wyliczania liczby przeciwnej w U2:
Zmienne w pamięci komputera
Kodowanie znaków
Kodowanie obrazów
Mapy bitowe na przykładzie formatu BMP
Rozdział 3. Rekurencja
Definicja rekurencji
Ilustracja pojęcia rekurencji
Jak wykonują się programy rekurencyjne?
Niebezpieczeństwa rekurencji
Ciąg Fibonacciego
Stack overflow!
Ćwiczenie 3.1.
Ćwiczenie 3.2.
Pułapek ciąg dalszy
Stąd do wieczności
Definicja poprawna, ale
Typy programów rekurencyjnych
Myślenie rekurencyjne
Przykład 1. Spirala
Przykład 2. Kwadraty parzyste
Uwagi praktyczne na temat technik rekurencyjnych
Zadania
Zadanie 1.
Zadanie 2.
Zadanie 3.
Pytanie 1.
Pytanie 2.
Zadanie 4.
Zadanie 5.
Zadanie 6.
Rozwiązania i wskazówki do zadań
Zadanie 1.
Zadanie 2.
Zadanie 3.
Zadanie 4.
Zadanie 5.
Zadanie 6.
Rozdział 4. Analiza
złożoności algorytmów
Definicje i przykłady
Jeszcze raz funkcja silnia
Zerowanie fragmentu tablicy
Wpadamy w pułapkę
Różne typy złożoności obliczeniowej
Nowe zadanie: uprościć obliczenia!
Analiza programów rekurencyjnych
Terminologia i definicje
Ilustracja metody na przykładzie
Rozkład logarytmiczny
Przeszukiwanie binarne tym razem bez matematyki wyższej!
Zamiana dziedziny równania rekurencyjnego
Funkcja Ackermanna, czyli coś dla smakoszy
Złożoność obliczeniowa to nie religia!
Techniki optymalizacji programów
Zadania
Zadanie 1.
Zadanie 2.
Zadanie 3.
Zadanie 4.
Rozwiązania i wskazówki do zadań
Zadanie 2.
Zadanie 4.
Rozdział 5. Podstawy
modelowania danych
Typy proste i złożone
Operatory i zmienne
Obiektowe typy proste, czyli klasy osłonowe
Ciągi znaków i napisy
Tablice
Pojęcie referencji, czyli gdzie te wskaźniki z dawnych lat
Programowanie obiektowe jako narzędzie modelowania danych i
algorytmów
Terminologia
Modelowanie danych na przykładzie liczb zespolonych
Pola i metody statyczne klas
Dziedziczenie własności
Struktury rekurencyjne w Javie
Rozdział 6. Modelowanie
abstrakcyjnych typów danych
Abstrakcyjne typy danych
Listy jednokierunkowe
Realizacja struktur danych listy jednokierunkowej
Proste dołączanie elementów do listy
Dołączanie elementów do listy z sortowaniem
Usuwanie danych z listy
Metody łączenia list
Sortowanie list za pomocą list referencji
Tablicowa implementacja list
Klasyczna reprezentacja tablicowa
Metoda tablic równoległych
Listy innych typów
Lista dwukierunkowa
Lista cykliczna
Listy z iteratorem
Podsumowanie
Rozdział 7.
Struktury danych o dostępie ograniczonym
Stos
Zasada działania stosu
Realizacja programowa stosu
Kolejki FIFO
Sterty i kolejki priorytetowe
Zadania
Zadanie 1.
Rozwiązania i wskazówki do zadań
Zadanie 1.
Rozdział 8.
Drzewa i zbiory
Drzewa i ich reprezentacje
Binarne drzewa poszukiwań (BST)
Drzewa binarne i wyrażenia arytmetyczne
Uniwersalna struktura słownikowa
Drzewa egzotyczne
Zbiory
Zadania
Zadanie 1.
Zadanie 2.
Zadanie 3.
Zadanie 4.
Rozwiązania zadań
Zadanie 1.
Rozdział 9.
java.util, czyli struktury danych dla leniuchów
Java i interfejsy
Klasa Arrays, operacje na tablicach
Klasa Vector, czyli tablice dynamiczne
Listy
Iteratory, czyli wygodne indeksowanie kolekcji
Stos
Sortowanie kolekcji
Klasa HashSet, czyli szybko do celu
Rozdział 10. Algorytmy przeszukiwania
Przeszukiwanie liniowe
Przeszukiwanie binarne
Transformacja kluczowa (hashing)
W poszukiwaniu funkcji H
Najbardziej znane funkcje H
Suma modulo 2
Suma modulo Rmax
Mnożenie
Obsługa konfliktów dostępu
Powrót do źródeł
Jeszcze raz tablice!
Próbkowanie liniowe
Podwójne kluczowanie
Zastosowania transformacji kluczowej
Klasyczne funkcje C/C++ oraz Java
Funkcje hashujące a klasy Javy
Podsumowanie metod transformacji kluczowej
Rozdział 11. Algorytmy sortowania
Sortowanie przez wstawianie, algorytm klasy O(N2)
Sortowanie bąbelkowe, algorytm klasy O(N2)
Sortowanie szybkie (Quicksort) algorytm klasy O(N log N)
Heapsort sortowanie przez kopcowanie
Scalanie zbiorów posortowanych
Sortowanie przez scalanie, algorytm klasy O(N log N)
Sortowanie zewnętrzne
Uwagi praktyczne
Rozdział 12.
Derekursywacja i optymalizacja algorytmów
Jak pracuje kompilator?
Odrobina formalizmu nie zaszkodzi!
Przykład
Kilka przykładów derekursywacji algorytmów
Derekursywacja z wykorzystaniem stosu
Eliminacja zmiennych lokalnych
Metoda funkcji przeciwnych
Klasyczne schematy derekursywacji
Schemat typu while
Schemat typu if-else
Schemat z podwójnym wywołaniem rekurencyjnym
Podsumowanie
Rozdział 13.
Przeszukiwanie tekstów
Algorytm typu brute force
Nowe algorytmy poszukiwań
Algorytm KMP
Algorytm Boyera-Moorea
Algorytm Rabina-Karpa
Rozdział 14. Zaawansowane techniki
programowania
Programowanie typu dziel i zwyciężaj
Odszukiwanie minimum i maksimum w tablicy liczb
Ćwiczenie 1.
Mnożenie macierzy o rozmiarze N×N
Mnożenie liczb całkowitych
Inne znane algorytmy dziel i zwyciężaj
Algorytmy żarłoczne, czyli przekąsić coś nadszedł już czas
Problem plecakowy, czyli niełatwe jest życie turysty piechura
Wydawanie reszty, czyli A nie ma pan drobnych? w praktyce
Programowanie dynamiczne
Ciąg Fibonacciego
Równania z wieloma zmiennymi
Najdłuższa wspólna podsekwencja
Najdłuższy wspólny podłańcuch
Heurystyczne techniki programowania
Uwagi bibliograficzne
Rozdział 15. Algorytmy grafowe
Definicje i pojęcia podstawowe
Etykiety i wartości
Cykle w grafach
Sposoby reprezentacji grafów
Reprezentacja tablicowa
Słowniki węzłów
Listy kontra zbiory
Podstawowe operacje na grafach
Suma grafów
Kompozycja grafów
Graf do potęgi
Algorytm Roya-Warshalla
Algorytm Floyda-Warshalla
Algorytm Dijkstry
Algorytm Bellmana-Forda
Drzewo rozpinające minimalne
Algorytm Kruskala
Algorytm Prima
Przeszukiwanie grafów
Strategia w głąb (przeszukiwanie zstępujące)
Strategia wszerz
Inne strategie przeszukiwania
Problem właściwego doboru
Podsumowanie
Zadania
Zadanie 1.
Zadanie 2.
Zadanie 3.
Zadanie 4.
Rozdział 16. Algorytmy numeryczne
Poszukiwanie miejsc zerowych funkcji
Iteracyjne obliczanie wartości funkcji
Interpolacja funkcji metodą Lagrangea
Różniczkowanie funkcji
Całkowanie funkcji metodą Simpsona
Biblioteki naukowe dla Javy
Uwagi końcowe
Rozdział 17. Kodowanie i kompresja
danych
Kodowanie danych i arytmetyka dużych liczb
Metody prymitywne
Kodowanie symetryczne
Kodowanie asymetryczne
Obliczenia na bardzo dużych liczbach całkowitych
Klasa BigInteger
Łamanie kodów
Jakość klucza szyfrującego
Metody łamania szyfrów
Techniki kompresji danych
Kompresja za pomocą modelowania matematycznego
Kompresja metodą RLE
Kompresja danych metodą Huffmana
FAZA REDUKCJI (kierunek: w dół)
FAZA KONSTRUKCJI KODU (kierunek: w górę)
Kodowanie LZW
Przykład kodowania LZW
Przykład dekodowania LZW
Praktyczne użycie LZW w formacie GIF
Rozdział 18. Czy komputery mogą myśleć?
Przegląd obszarów zainteresowań sztucznej inteligencji (SI)
Systemy eksperckie
Sieci neuronowe
Reprezentacja problemów
Przykład 1.
Przykład 2.
Ćwiczenie 1.
Gry dwuosobowe i drzewa gier
Algorytm min-max
Rozdział 19. Zadania różne
Teksty zadań
Zadanie 1.
Zadanie 2.
Zadanie 3.
Zadanie 4.
Zadanie 5.
Zadanie 6.
Zadanie 7.
Zadanie 8.
Zadanie 9.
Zadanie 10.
Zadanie 11.
Zadanie 12.
Rozwiązania
Zadanie 1.
Zadanie 3.
Zadanie 4.
Zadanie 10.
Zadanie 11.
Dodatek A Java szybki start
Instalacja środowiska Java
Środowiska IDE do Javy
Konfiguracja środowiska Java
Systemy pochodne UNIX (np. Linux)
System Windows
Kompilujemy program w Javie
Pakiety w Javie
Poznaj Javę w 5 minut!
Elementy języka Java na przykładach
Sterowanie przebiegiem programu
Instrukcja if else
Instrukcja wyboru (switch)
Iteracje
Pętla for
Pętle while
Konwersje typów i wprowadzanie danych
Operacje na plikach w Javie
Funkcje matematyczne w Javie
Literatura
Spis rysunków
Spis tabel
456
stron, Format: 16.0x23.5cm, oprawa miękka
Po otrzymaniu zamówienia poinformujemy, czy wybrany tytuł polskojęzyczny lub
anglojęzyczny jest aktualnie na półce księgarni.
|