Badanie algorytmów leży w samym sercu nauk komputerowych. W ostatnich latach dokonano znaczących postępów w tej dziedzinie. Opracowano m.in. wiele efektywniejszych algorytmów (szybkie przekształcenie Fouriera), odkryto także istnienie pewnych naturalnych zadań, dla których wszystkie algorytmy są nieefektywne. Wyniki te powodują wzrost zainteresowania badaniami algorytmów, co przyczynia się do intensywnego rozwoju tej dziedziny wiedzy.
Książka jest podręcznikiem wstępnego kursu projektowania i analizy algorytmów. Autorzy położyli nacisk raczej na prezentacji najważniejszych idei i przystępności wykładu, niż na szczegółach realizacji i sztuczkach programistycznych. Autorzy przedstawiają na ogół nieformalne, intuicyjne objaśnienia zamiast długich i pracochłonnych dowodów. Książka nie wymaga żadnego szczególnego przygotowania z zakresu matematyki, czy języków programowania. Pożądana jest jednak pewna dojrzałość w stosowaniu pojęć matematycznych, ogólne obycie w językach programowania wysokiego poziomu, takich jak FORTRAN lub ALGOL, a także podstawowa znajomość algebry liniowej.
W książce omówiono m.in.:
* Podstawowe pojęcia i modele (w tym maszynę Turniga)
* Najważniejsze struktury danych, rekurencję, programowanie dynamiczne
* Algorytmy sortowania, operacje na zbiorach, drzewach i grafach
* Szybkie przekształcenie Fouriera z zastosowaniami
* Algorytmy arytmetyczne, operacje na wielomianach
* Algorytmy dopasowania wzorców
* Problemy NP-zupełne
* Dolne ograniczenia złożoności obliczeniowej
Ważnym uzupełnieniem treści książki są ćwiczenia o zróżnicowanych poziomach trudności. "Projektowanie i analiza algorytmów" to doskonały podręcznik dla studentów informatyki i kierunków pokrewnych, a także wspaniała pomoc dla osób prowadzących wykłady i ćwiczenia na tych kierunkach.
Algorytmy, struktury danych i techniki programowania. Wydanie IIIWydawnictwo Helion
Algorytmika stanowi gałąź wiedzy, która w ciągu ostatnich kilkudziesięciu lat dostarczyła wielu efektywnych narzędzi wspomagających rozwiązywanie różnorodnych problemów za pomocą komputera. Teoria algorytmów i struktur danych jest jednym z podstawowych przedmiotów wykładanych na studiach informatycznych i pokrewnych.
To już trzecie, poprawione wydanie książki, która od wielu lat stanowi podstawowy podręcznik z dziedziny algorytmiki. Różni się od klasycznych podręczników akademickich: skierowana jest nie tylko do adeptów informatyki. Dzięki naciskowi na praktyczną stronę prezentowanych zagadnień powinna zainteresować także osoby programujące hobbystycznie, jak również tych wszystkich, dla których programowanie jest działalnością ważną, lecz nie podstawową w pracy zawodowej. Jest to nowoczesny podręcznik dla wszystkich, którzy w codziennej pracy programistycznej odczuwają potrzebę szybkiego odszukania pewnych informacji z dziedziny algorytmiki w celu zastosowania ich w swoich programach.
W książce opisano m.in.:
* Techniki rekurencyjne: co to jest rekurencja i jak ją stosować w praktyce?
* Sortowanie danych: najpopularniejsze procedury sortujące.
* Struktury danych: listy, kolejki, zbiory i drzewa w ujęciu praktycznym.
* Derekursywacja: jak zmienić program rekurencyjny (czasami bardzo czasochłonny) na wersję iteracyjną?
* Algorytmy przeszukiwania: przeszukiwanie liniowe, binarne i transformacja liniowa (ang. hashing).
* Przeszukiwanie tekstów: opis najbardziej znanych metod przeszukiwania tekstów (Boyera i Moore"a, Rabina i Karpa, brute-force, K-M-P).
* Zaawansowane techniki programowania: dziel i rządź, programowanie dynamiczne, algorytmy żarłoczne (ang. greedy).
* Algorytmika grafów: opis jednej z najciekawszych struktur danych występujących w informatyce.
* Sztuczna inteligencja: czy komputery mogą myśleć?
* Kodowanie i kompresja danych: opis najpopularniejszych metod kodowania i kompresji danych -- systemu kryptograficznego z kluczem publicznym i metody Huffmana
W książce znajdziesz również liczne przykłady i zadania, które pomogą Ci sprawdzić swoją wiedzę. Kod źródłowy znajdziesz na dołączonej dyskietce.
Metody numeryczne są to sposoby rozwiązywania złożonych problemów matematycznych za pomocą narzędzi obliczeniowych udostępnianych przez popularne języki programowania. Jeden z najpopularniejszych języków -- Pascal, będący podstawą języka ObjectPascal wykorzystywanego w Delphi, pozwala na bardzo łatwą implementację mechanizmów obliczeń numerycznych. Specyfika projektowania aplikacji w środowisku Delphi pozwala na utworzenie komponentów realizujących algorytmy numeryczne i stosowanie ich w wielu aplikacjach.
Książka "Algorytmy numeryczne w Delphi. Księga eksperta" przedstawia najczęściej wykorzystywane metody numeryczne wraz z przykładami ich implementacji w języku ObjectPascal. Każde zagadnienie jest omówione zarówno od strony teoretycznej, jak i praktycznej, co ułatwia jego zrozumienie i pozwala na modyfikacje zamieszczonych w książce kodów źródłowych.
* Typy, funkcje, klasy i procedury wykorzystywane w algorytmach numerycznych
* Algebra macierzy i równania liniowe
* Badanie funkcji
* Rozwiązywanie równań nieliniowych i wyznaczanie wartości własnych macierzy
* Układy równań różniczkowych liniowych i nieliniowych
* Przekształcenia Fouriera i Laplace’a
Niemal każdy problem obliczeniowy można rozwiązać za pomocą metod numerycznych. Nie musisz więc wymyślać ponownie koła -- wystarczy, że poznasz opisane w tej książce algorytmy.
Struktury danych i techniki obiektowe na przykładzie Javy 5.0Wydawnictwo Helion
Przy tworzeniu systemów informatycznych najważniejsze zadania wykonuje się, zanim powstanie pierwszy fragment kodu źródłowego. Wymogi stawiane współczesnym aplikacjom powodują, że inżynieria oprogramowania staje się kwestią kluczową. Opracowanie odpowiedniego projektu oraz właściwy dobór technologii i metodologii zapewniają szybką i efektywną pracę nad systemem. Niezwykle ważne jest poznanie dostępnych w języku Java struktur danych i umiejętność ich wykorzystania. Prawidłowo dobrana struktura danych znacznie przyspiesza nie tylko implementację aplikacji, ale również działanie gotowego systemu.
Książka "Struktury danych i techniki obiektowe na przykładzie Javy 5.0" przedstawia podstawowe struktury danych i sposoby ich wykorzystania podczas programowania obiektowego. Wszystkie wiadomości zostały zaprezentowane z uwzględnieniem reguł nowoczesnej inżynierii oprogramowania. Czytając kolejne rozdziały książki, poznasz najlepsze zastosowania różnych struktur danych oraz wady i zalety ich implementacji. Przede wszystkim jednak zrozumiesz potrzebę stosowania tak wielu struktur danych.
* Cykl życia oprogramowania
* Zastosowanie języka UML w projektowaniu systemów
* Obsługa błędów i wyjątków
* Testowanie oprogramowania
* Dziedziczenie i hierarchia klas
* Listy jedno- i dwukierunkowe
* Interfejs Collection
* Stosy i kolejki
* Algorytmy rekurencyjne
* Sortowanie danych
* Drzewa wyszukiwania
* Grafy
Po przeczytaniu tej książki zrozumiesz zasadę:
"Pomyśl, a dopiero potem pisz kod".
Wprowadzenie do problematyki algorytmów i struktur danych
* Badanie złożoności algorytmów
* Analiza i implementacja algorytmów
* Zasady testowania kodu
Algorytmy leżą u podstaw programowania. Zasady rozwiązywania typowych problemów programistycznych, opisane w postaci blokowej lub za pomocą uniwersalnego "pseudokodu", są wykorzystywane codziennie przez tysiące informatyków na całym świecie. Właściwe zrozumienie zarówno samych algorytmów, jak i zasad ich stosowania w praktyce, jest kluczem do tworzenia wydajnych aplikacji. Umiejętność oceny efektywności i złożoności algorytmów przyda się również przy wyborze najlepszego rozwiązania określonego problemu.
Książka "Algorytmy. Od podstaw" przedstawia podstawowe zagadnienia związane z algorytmami. Dzięki niej nauczysz się wyznaczać złożoność obliczeniową algorytmów i implementować algorytmy w programach. Poznasz algorytmy sortowania, przeszukiwania i przetwarzania danych. Dowiesz się, czym są testy jednostkowe i dlaczego ich stosowanie jest tak ważne podczas tworzenia oprogramowania.
W książce omówiono m.in. następujące zagadnienia:
* Testy jednostkowe i biblioteka JUnit
* Iteracja i rekurencja
* Kolejki FIFO
* Listy i stosy
* Algorytmy sortowania
* Binarne wyszukiwanie i zastępowanie
* Zbiory, mapy i drzewa wyszukiwawcze
* Wyszukiwanie tekstu
Poznaj sprawdzone i powszechnie używane algorytmy
i zastosuj je w swoich aplikacjach.
Struktura organizacyjna i architektura systemów komputerowychWydawnictwo Helion
Komputery już dawno stały się zjawiskiem powszechnym i nie są już traktowane jak magiczne skrzynki. Praktycznie wszyscy znają już możliwości ich praktycznego wykorzystania. W dobie intuicyjnych systemów operacyjnych, technologii plug-and-play i postępującego uproszczenia wszelkich operacji związanych z komputerami wiedza o architekturze i organizacji systemów komputerowych może wydawać się potrzebna jedynie wąskiej grupie specjalistów-sprzętowców. Jest jednak inaczej. Ogólna znajomość tego, co kryje się pod "maską" komputera potrzebna jest każdemu użytkownikowi komputera. Dzięki niej programista zrozumie, z czego wynikają błędy w działaniu programu, twórca systemów czasu rzeczywistego zoptymalizuje wykorzystanie procesora przez system, a osoba decydująca się na zakup nowego sprzętu we właściwy sposób zinterpretuje "obiektywne" testy przytaczane przez producentów w materiałach reklamowych.
Struktura organizacyjna i architektura systemów komputerowych to przystępne omówienie organizacji i architektury współczesnych komputerów. Książka, stworzona zgodnie z założeniami komitetu ACM-IEEE Computing Curricula 2001, nadaje się idealnie jako podręcznik dla kursu wprowadzającego w tą tematykę. Zawarte w niej zagadnienia zilustrowane są licznymi przykładami zaczerpniętymi z rzeczywistego świata, co dodatkowo ułatwia ich zrozumienie.
* Historia rozwoju komputerów.
* Sposoby przedstawiania danych, notacje i kody.
* Logika binarna i algebra Boole’a.
* Organizacja pracy systemu komputerowego, cykle maszynowe, magistrala, lista rozkazów, asembler.
* Tryby adresowania.
* Przechowywanie danych w pamięci komputera.
* Narzędzia programistyczne i systemy operacyjne.
* Alternatywne architektury komputerów.
* Analiza wydajności systemów komputerowych.
* Sieci komputerowe.
Doskonale dobrane proporcje pomiędzy objętością tekstu i poziomem szczegółowości oraz opisywanie wyłącznie istotnych aspektów zagadnienia powodują, że książka stanowi doskonałe źródło naprawdę przydatnej wiedzy.
Kompendium wiedzy o architekturze komputerów PC
Znajomość architektury współczesnych komputerów PC to wiedza niezbędna serwisantom, programistom i projektantom urządzeń współpracujących z komputerami. Przyda się także każdemu użytkownikowi komputera, który chciałby samodzielnie znaleźć przyczyny nieprawidłowego działania swojego sprzętu, czy też po prostu dowiedzieć się, jak działa pecet. Informacje o poszczególnych komponentach komputera są, niestety, trudno dostępne i rozproszone w wielu dokumentach, specyfikacjach i schematach. Konieczność przeszukiwania tysięcy dokumentów dość skutecznie zniechęca wielu żądnych wiedzy użytkowników komputerów.
Książka "Anatomia PC. Wydanie IX" to kompletne opracowanie, zawierające wyczerpujące informacje o architekturze komputerów PC i ich komponentów. Najnowsze wydanie tej klasycznej i cieszącej się ogromną popularnością pozycji jest, podobnie jak poprzednie wydania, prawdziwą skarbnicą wiedzy dotyczącej współczesnych pecetów opisuje zarówno rozwiązania klasyczne, jak i nowości z ostatnich miesięcy. Dzięki książce rozwiążesz wszystkie problemy ze sprzętem, zdiagnozujesz usterki i zaprojektujesz urządzenia poprawnie współpracujące z komputerem.
"Anatomia PC. Wydanie IX" opisuje następujące zagadnienia:
* Mikroprocesory z rodziny x86 wraz z najnowszymi Intel 4 Extreme Edition, koprocesory i rozszerzenia, takie jak: MMX, 3DNow, SSE, SSE2, SSE3 i HT
* Architektury komputerów PC XT, AT, 386, 486 i Pentium, systemów jedno- i wieloprocesorowych oraz komputerów przenośnych
* Układy pamięciowe stosowane w komputerach PC: SIMM, DRAM, SDRAM, DDR oraz obsługa pamięci
* Chipsety Intel, VIA, SiS, i865/875, obsługa przerwań, magistrala PCI i kanał DMA
* Obsługa stacji dyskietek i dysków twardych - organizacja i odczyt danych, praca kontrolera, macierze RAID
* Złącza ATA, SCSI i FireWire
* Karty grafiki, przetwarzanie obrazu, kompresja MPEG, generowanie grafiki 3D i magistrala AGP
* Obsługa klawiatury
* Złącze szeregowe, równoległe, USB i IrDA
* System oszczędzania energii
* Nośniki optyczne
* Karty dźwiękowe
* Sieci i BlueTooth
* Zasilacze awaryjne
* BIOS
Dodatkowo książka zawiera informacje o diagnozowaniu usterek komputera za pomocą Linuksa, opisy mikroprocesorów firm Intel, AMD i Cyrix, w tym najnowszych jednostek 64-bitowych oraz serii Intel Extreme Edition. Znajdują się w niej także adresy witryn internetowych producentów sprzętu i oprogramowania diagnostycznego.
Książka "Algorytmy w C" jest doskonałą pomocą dla programistów, którym w codziennej pracy potrzebne są sprawdzone rozwiązania. Nie ma tu teoretycznych dywagacji tak charakterystycznych dla większości książek o strukturach danych i algorytmach. Znajdziesz w niej za to przystępnie podane informacje i praktyczne techniki programowania.
Wyjątkowo elegancki styl programowania i pisania autora, Kyle’a Loudona, ułatwia poznanie najważniejszych struktur danych, takich jak listy, stosy, kolejki, zbiory, sterty, kolejki priorytetowe i grafy. Autor prezentuje użycie algorytmów sortujących, wyszukiwania, analiz numerycznych, kompresji danych, szyfrowania danych, typowych algorytmów obsługi grafów oraz geometrii analitycznej. W rozdziałach poświęconych kompresji i szyfrowaniu czytelnik znajdzie nie tylko gotowy, szybki w działaniu kod, ale też informacje przydatne dla osób, które nigdy nie miały czasu ani chęci zagłębiać się w omawiane zagadnienia.
W tekście umieszczono także kody wraz z przykładami zastosowania poszczególnych struktur danych i algorytmów. Komplet kodów źródłowych znajduje się na płycie CD-ROM. Kod ten został napisany w taki sposób, byś łatwo mógł go wykorzystać we własnych aplikacjach.
W książce omówiono:
* Wskaźniki
* Rekurencję
* Analizę algorytmów
* Struktury danych (listy, stosy, kolejki, zbiory, tablice asocjacyjne, drzewa, sterty, kolejki priorytetowe i grafy)
* Sortowanie i wyszukiwanie
* Metody numeryczne
* Kompresję danych
* Szyfrowanie danych
* Algorytmy operujące na grafach
* Algorytmy przydatne do obliczeń geometrycznych.
Wielu programistów poszukuje książki, która przedstawiłaby implementacje znanych algorytmów w Perlu. Niestety w podręcznikach do tego języka trudno znaleźć informacje na ten temat. Informatycy opracowali wiele technik związanych z często spotykanymi problemami, takimi jak:
* Przybliżone dopasowywanie tekstów (uwzględniające literówki)
* Znajdowanie korelacji w zbiorach danych
* Algorytmy związane z grami
* Przewidywanie zjawisk (np. obciążenia serwera WWW)
* Dopasowywanie wielomianowe i za pomocą funkcji sklejanych
* Szyfrowanie informacji
Dzięki algorytmom przedstawionym w niniejszej książce będziesz mógł poradzić sobie z tymi problemami używając wydajnego i łatwego do nauczenia się języka, jakim jest Perl.
Autorzy zakładają, że opanowałeś już składnię Perla i znasz jego podstawowe funkcje. Książka "Algorytmy w Perlu" przystępnie objaśni Ci, kiedy używać klasycznych technik programistycznych i w jakich rodzajach aplikacji znajdują one swoje zastosowanie, a przede wszystkim pokaże Ci, jak je implementować w Perlu.
Jeśli jesteś początkującym programistą, poznasz najważniejsze algorytmy, które pozwolą Ci rozwiązywać problemy programistyczne w sposób profesjonalny. Nawet jeśli znasz już podstawy algorytmiki, będziesz zapewne zaskoczony z jaką łatwością można je zastosować w Perlu. W książce znajdziesz nawet obowiązkowy program rysujący fraktale.
Jest to pierwsza książka spośród licznych pozycji poświęconych algorytmom, która demonstruje ich użycie za pomocą Perla.
Autorami są m.in. Jon Orwant, redaktor The Perl Journal i Jarkko Hietaniemi -- zarządzający biblioteką modułów CPAN. Wszyscy autorzy są stałymi współpracownikami CPAN, stąd wiele z przytoczonych tu fragmentów kodu możesz znaleźć w tej bibliotece.
"Poświęciłem lekturze wiele czasu przeznaczonego na sen -- tak ekscytująca jest ta książka"
Tom Christiansen
Algorytmy, struktury danych i techniki programowania. Wydanie IIIWydawnictwo Helion
Algorytmika stanowi gałąź wiedzy, która w ciągu ostatnich kilkudziesięciu lat dostarczyła wielu efektywnych narzędzi wspomagających rozwiązywanie różnorodnych problemów za pomocą komputera. Teoria algorytmów i struktur danych jest jednym z podstawowych przedmiotów wykładanych na studiach informatycznych i pokrewnych.
To już trzecie, poprawione wydanie książki, która od wielu lat stanowi podstawowy podręcznik z dziedziny algorytmiki. Różni się od klasycznych podręczników akademickich: skierowana jest nie tylko do adeptów informatyki. Dzięki naciskowi na praktyczną stronę prezentowanych zagadnień powinna zainteresować także osoby programujące hobbystycznie, jak również tych wszystkich, dla których programowanie jest działalnością ważną, lecz nie podstawową w pracy zawodowej. Jest to nowoczesny podręcznik dla wszystkich, którzy w codziennej pracy programistycznej odczuwają potrzebę szybkiego odszukania pewnych informacji z dziedziny algorytmiki w celu zastosowania ich w swoich programach.
W książce opisano m.in.:
* Techniki rekurencyjne: co to jest rekurencja i jak ją stosować w praktyce?
* Sortowanie danych: najpopularniejsze procedury sortujące.
* Struktury danych: listy, kolejki, zbiory i drzewa w ujęciu praktycznym.
* Derekursywacja: jak zmienić program rekurencyjny (czasami bardzo czasochłonny) na wersję iteracyjną?
* Algorytmy przeszukiwania: przeszukiwanie liniowe, binarne i transformacja liniowa (ang. hashing).
* Przeszukiwanie tekstów: opis najbardziej znanych metod przeszukiwania tekstów (Boyera i Moore"a, Rabina i Karpa, brute-force, K-M-P).
* Zaawansowane techniki programowania: dziel i rządź, programowanie dynamiczne, algorytmy żarłoczne (ang. greedy).
* Algorytmika grafów: opis jednej z najciekawszych struktur danych występujących w informatyce.
* Sztuczna inteligencja: czy komputery mogą myśleć?
* Kodowanie i kompresja danych: opis najpopularniejszych metod kodowania i kompresji danych -- systemu kryptograficznego z kluczem publicznym i metody Huffmana
W książce znajdziesz również liczne przykłady i zadania, które pomogą Ci sprawdzić swoją wiedzę. Kod źródłowy znajdziesz na dołączonej dyskietce.
Metody numeryczne są to sposoby rozwiązywania złożonych problemów matematycznych za pomocą narzędzi obliczeniowych udostępnianych przez popularne języki programowania. Jeden z najpopularniejszych języków -- Pascal, będący podstawą języka ObjectPascal wykorzystywanego w Delphi, pozwala na bardzo łatwą implementację mechanizmów obliczeń numerycznych. Specyfika projektowania aplikacji w środowisku Delphi pozwala na utworzenie komponentów realizujących algorytmy numeryczne i stosowanie ich w wielu aplikacjach.
Książka "Algorytmy numeryczne w Delphi. Księga eksperta" przedstawia najczęściej wykorzystywane metody numeryczne wraz z przykładami ich implementacji w języku ObjectPascal. Każde zagadnienie jest omówione zarówno od strony teoretycznej, jak i praktycznej, co ułatwia jego zrozumienie i pozwala na modyfikacje zamieszczonych w książce kodów źródłowych.
* Typy, funkcje, klasy i procedury wykorzystywane w algorytmach numerycznych
* Algebra macierzy i równania liniowe
* Badanie funkcji
* Rozwiązywanie równań nieliniowych i wyznaczanie wartości własnych macierzy
* Układy równań różniczkowych liniowych i nieliniowych
* Przekształcenia Fouriera i Laplace’a
Niemal każdy problem obliczeniowy można rozwiązać za pomocą metod numerycznych. Nie musisz więc wymyślać ponownie koła -- wystarczy, że poznasz opisane w tej książce algorytmy.
Struktury danych i techniki obiektowe na przykładzie Javy 5.0Wydawnictwo Helion
Przy tworzeniu systemów informatycznych najważniejsze zadania wykonuje się, zanim powstanie pierwszy fragment kodu źródłowego. Wymogi stawiane współczesnym aplikacjom powodują, że inżynieria oprogramowania staje się kwestią kluczową. Opracowanie odpowiedniego projektu oraz właściwy dobór technologii i metodologii zapewniają szybką i efektywną pracę nad systemem. Niezwykle ważne jest poznanie dostępnych w języku Java struktur danych i umiejętność ich wykorzystania. Prawidłowo dobrana struktura danych znacznie przyspiesza nie tylko implementację aplikacji, ale również działanie gotowego systemu.
Książka "Struktury danych i techniki obiektowe na przykładzie Javy 5.0" przedstawia podstawowe struktury danych i sposoby ich wykorzystania podczas programowania obiektowego. Wszystkie wiadomości zostały zaprezentowane z uwzględnieniem reguł nowoczesnej inżynierii oprogramowania. Czytając kolejne rozdziały książki, poznasz najlepsze zastosowania różnych struktur danych oraz wady i zalety ich implementacji. Przede wszystkim jednak zrozumiesz potrzebę stosowania tak wielu struktur danych.
* Cykl życia oprogramowania
* Zastosowanie języka UML w projektowaniu systemów
* Obsługa błędów i wyjątków
* Testowanie oprogramowania
* Dziedziczenie i hierarchia klas
* Listy jedno- i dwukierunkowe
* Interfejs Collection
* Stosy i kolejki
* Algorytmy rekurencyjne
* Sortowanie danych
* Drzewa wyszukiwania
* Grafy
Po przeczytaniu tej książki zrozumiesz zasadę:
"Pomyśl, a dopiero potem pisz kod".
Wprowadzenie do problematyki algorytmów i struktur danych
* Badanie złożoności algorytmów
* Analiza i implementacja algorytmów
* Zasady testowania kodu
Algorytmy leżą u podstaw programowania. Zasady rozwiązywania typowych problemów programistycznych, opisane w postaci blokowej lub za pomocą uniwersalnego "pseudokodu", są wykorzystywane codziennie przez tysiące informatyków na całym świecie. Właściwe zrozumienie zarówno samych algorytmów, jak i zasad ich stosowania w praktyce, jest kluczem do tworzenia wydajnych aplikacji. Umiejętność oceny efektywności i złożoności algorytmów przyda się również przy wyborze najlepszego rozwiązania określonego problemu.
Książka "Algorytmy. Od podstaw" przedstawia podstawowe zagadnienia związane z algorytmami. Dzięki niej nauczysz się wyznaczać złożoność obliczeniową algorytmów i implementować algorytmy w programach. Poznasz algorytmy sortowania, przeszukiwania i przetwarzania danych. Dowiesz się, czym są testy jednostkowe i dlaczego ich stosowanie jest tak ważne podczas tworzenia oprogramowania.
W książce omówiono m.in. następujące zagadnienia:
* Testy jednostkowe i biblioteka JUnit
* Iteracja i rekurencja
* Kolejki FIFO
* Listy i stosy
* Algorytmy sortowania
* Binarne wyszukiwanie i zastępowanie
* Zbiory, mapy i drzewa wyszukiwawcze
* Wyszukiwanie tekstu
Poznaj sprawdzone i powszechnie używane algorytmy
i zastosuj je w swoich aplikacjach.
Struktura organizacyjna i architektura systemów komputerowychWydawnictwo Helion
Komputery już dawno stały się zjawiskiem powszechnym i nie są już traktowane jak magiczne skrzynki. Praktycznie wszyscy znają już możliwości ich praktycznego wykorzystania. W dobie intuicyjnych systemów operacyjnych, technologii plug-and-play i postępującego uproszczenia wszelkich operacji związanych z komputerami wiedza o architekturze i organizacji systemów komputerowych może wydawać się potrzebna jedynie wąskiej grupie specjalistów-sprzętowców. Jest jednak inaczej. Ogólna znajomość tego, co kryje się pod "maską" komputera potrzebna jest każdemu użytkownikowi komputera. Dzięki niej programista zrozumie, z czego wynikają błędy w działaniu programu, twórca systemów czasu rzeczywistego zoptymalizuje wykorzystanie procesora przez system, a osoba decydująca się na zakup nowego sprzętu we właściwy sposób zinterpretuje "obiektywne" testy przytaczane przez producentów w materiałach reklamowych.
Struktura organizacyjna i architektura systemów komputerowych to przystępne omówienie organizacji i architektury współczesnych komputerów. Książka, stworzona zgodnie z założeniami komitetu ACM-IEEE Computing Curricula 2001, nadaje się idealnie jako podręcznik dla kursu wprowadzającego w tą tematykę. Zawarte w niej zagadnienia zilustrowane są licznymi przykładami zaczerpniętymi z rzeczywistego świata, co dodatkowo ułatwia ich zrozumienie.
* Historia rozwoju komputerów.
* Sposoby przedstawiania danych, notacje i kody.
* Logika binarna i algebra Boole’a.
* Organizacja pracy systemu komputerowego, cykle maszynowe, magistrala, lista rozkazów, asembler.
* Tryby adresowania.
* Przechowywanie danych w pamięci komputera.
* Narzędzia programistyczne i systemy operacyjne.
* Alternatywne architektury komputerów.
* Analiza wydajności systemów komputerowych.
* Sieci komputerowe.
Doskonale dobrane proporcje pomiędzy objętością tekstu i poziomem szczegółowości oraz opisywanie wyłącznie istotnych aspektów zagadnienia powodują, że książka stanowi doskonałe źródło naprawdę przydatnej wiedzy.
Kompendium wiedzy o architekturze komputerów PC
Znajomość architektury współczesnych komputerów PC to wiedza niezbędna serwisantom, programistom i projektantom urządzeń współpracujących z komputerami. Przyda się także każdemu użytkownikowi komputera, który chciałby samodzielnie znaleźć przyczyny nieprawidłowego działania swojego sprzętu, czy też po prostu dowiedzieć się, jak działa pecet. Informacje o poszczególnych komponentach komputera są, niestety, trudno dostępne i rozproszone w wielu dokumentach, specyfikacjach i schematach. Konieczność przeszukiwania tysięcy dokumentów dość skutecznie zniechęca wielu żądnych wiedzy użytkowników komputerów.
Książka "Anatomia PC. Wydanie IX" to kompletne opracowanie, zawierające wyczerpujące informacje o architekturze komputerów PC i ich komponentów. Najnowsze wydanie tej klasycznej i cieszącej się ogromną popularnością pozycji jest, podobnie jak poprzednie wydania, prawdziwą skarbnicą wiedzy dotyczącej współczesnych pecetów opisuje zarówno rozwiązania klasyczne, jak i nowości z ostatnich miesięcy. Dzięki książce rozwiążesz wszystkie problemy ze sprzętem, zdiagnozujesz usterki i zaprojektujesz urządzenia poprawnie współpracujące z komputerem.
"Anatomia PC. Wydanie IX" opisuje następujące zagadnienia:
* Mikroprocesory z rodziny x86 wraz z najnowszymi Intel 4 Extreme Edition, koprocesory i rozszerzenia, takie jak: MMX, 3DNow, SSE, SSE2, SSE3 i HT
* Architektury komputerów PC XT, AT, 386, 486 i Pentium, systemów jedno- i wieloprocesorowych oraz komputerów przenośnych
* Układy pamięciowe stosowane w komputerach PC: SIMM, DRAM, SDRAM, DDR oraz obsługa pamięci
* Chipsety Intel, VIA, SiS, i865/875, obsługa przerwań, magistrala PCI i kanał DMA
* Obsługa stacji dyskietek i dysków twardych - organizacja i odczyt danych, praca kontrolera, macierze RAID
* Złącza ATA, SCSI i FireWire
* Karty grafiki, przetwarzanie obrazu, kompresja MPEG, generowanie grafiki 3D i magistrala AGP
* Obsługa klawiatury
* Złącze szeregowe, równoległe, USB i IrDA
* System oszczędzania energii
* Nośniki optyczne
* Karty dźwiękowe
* Sieci i BlueTooth
* Zasilacze awaryjne
* BIOS
Dodatkowo książka zawiera informacje o diagnozowaniu usterek komputera za pomocą Linuksa, opisy mikroprocesorów firm Intel, AMD i Cyrix, w tym najnowszych jednostek 64-bitowych oraz serii Intel Extreme Edition. Znajdują się w niej także adresy witryn internetowych producentów sprzętu i oprogramowania diagnostycznego.
Książka "Algorytmy w C" jest doskonałą pomocą dla programistów, którym w codziennej pracy potrzebne są sprawdzone rozwiązania. Nie ma tu teoretycznych dywagacji tak charakterystycznych dla większości książek o strukturach danych i algorytmach. Znajdziesz w niej za to przystępnie podane informacje i praktyczne techniki programowania.
Wyjątkowo elegancki styl programowania i pisania autora, Kyle’a Loudona, ułatwia poznanie najważniejszych struktur danych, takich jak listy, stosy, kolejki, zbiory, sterty, kolejki priorytetowe i grafy. Autor prezentuje użycie algorytmów sortujących, wyszukiwania, analiz numerycznych, kompresji danych, szyfrowania danych, typowych algorytmów obsługi grafów oraz geometrii analitycznej. W rozdziałach poświęconych kompresji i szyfrowaniu czytelnik znajdzie nie tylko gotowy, szybki w działaniu kod, ale też informacje przydatne dla osób, które nigdy nie miały czasu ani chęci zagłębiać się w omawiane zagadnienia.
W tekście umieszczono także kody wraz z przykładami zastosowania poszczególnych struktur danych i algorytmów. Komplet kodów źródłowych znajduje się na płycie CD-ROM. Kod ten został napisany w taki sposób, byś łatwo mógł go wykorzystać we własnych aplikacjach.
W książce omówiono:
* Wskaźniki
* Rekurencję
* Analizę algorytmów
* Struktury danych (listy, stosy, kolejki, zbiory, tablice asocjacyjne, drzewa, sterty, kolejki priorytetowe i grafy)
* Sortowanie i wyszukiwanie
* Metody numeryczne
* Kompresję danych
* Szyfrowanie danych
* Algorytmy operujące na grafach
* Algorytmy przydatne do obliczeń geometrycznych.
Wielu programistów poszukuje książki, która przedstawiłaby implementacje znanych algorytmów w Perlu. Niestety w podręcznikach do tego języka trudno znaleźć informacje na ten temat. Informatycy opracowali wiele technik związanych z często spotykanymi problemami, takimi jak:
* Przybliżone dopasowywanie tekstów (uwzględniające literówki)
* Znajdowanie korelacji w zbiorach danych
* Algorytmy związane z grami
* Przewidywanie zjawisk (np. obciążenia serwera WWW)
* Dopasowywanie wielomianowe i za pomocą funkcji sklejanych
* Szyfrowanie informacji
Dzięki algorytmom przedstawionym w niniejszej książce będziesz mógł poradzić sobie z tymi problemami używając wydajnego i łatwego do nauczenia się języka, jakim jest Perl.
Autorzy zakładają, że opanowałeś już składnię Perla i znasz jego podstawowe funkcje. Książka "Algorytmy w Perlu" przystępnie objaśni Ci, kiedy używać klasycznych technik programistycznych i w jakich rodzajach aplikacji znajdują one swoje zastosowanie, a przede wszystkim pokaże Ci, jak je implementować w Perlu.
Jeśli jesteś początkującym programistą, poznasz najważniejsze algorytmy, które pozwolą Ci rozwiązywać problemy programistyczne w sposób profesjonalny. Nawet jeśli znasz już podstawy algorytmiki, będziesz zapewne zaskoczony z jaką łatwością można je zastosować w Perlu. W książce znajdziesz nawet obowiązkowy program rysujący fraktale.
Jest to pierwsza książka spośród licznych pozycji poświęconych algorytmom, która demonstruje ich użycie za pomocą Perla.
Autorami są m.in. Jon Orwant, redaktor The Perl Journal i Jarkko Hietaniemi -- zarządzający biblioteką modułów CPAN. Wszyscy autorzy są stałymi współpracownikami CPAN, stąd wiele z przytoczonych tu fragmentów kodu możesz znaleźć w tej bibliotece.
"Poświęciłem lekturze wiele czasu przeznaczonego na sen -- tak ekscytująca jest ta książka"
Tom Christiansen
W niniejszej książce przedstawiono struktury danych i algorytmy stanowiące podstawę współczesnego programowania komputerów. Algorytmy są niczym przepis na rozwiązanie postawionego przed programistę problemu. Są one nierozerwalnie związane ze strukturami danych - listami, rekordami, tablicami, kolejkami, drzewami... podstawowymi elementami wiedzy każdego programisty.
Książka obejmuje szeroki zakres materiału, a do jej lektury wystarczy znajomość dowolnego języka programowania strukturalnego (np. Pascala). Opis klasycznych algorytmów uzupełniono o algorytmy związane z zarządzaniem pamięcią operacyjną i pamięciami zewnętrznymi.
Książka przedstawia algorytmy i struktury danych w kontekście rozwiązywania problemów za pomocą komputera. Z tematyką rozwiązywania problemów powiązano zagadnienie zliczania kroków oraz złożoności czasowej - wynika to z głębokiego przekonania autorów tej książki, iż wraz z pojawianiem się coraz szybszych komputerów, pojawiać się będą także coraz bardziej złożone problemy do rozwiązywania i - paradoksalnie - złożoność obliczeniowa używanych algorytmów zyskiwać będzie na znaczeniu.
W książce omówiono m.in.:
* Tradycyjne struktury danych: listy, kolejki, stosy
* Drzewa i operacje na strukturach drzew
* Typy danych oparte na zbiorach, słowniki i kolejki priorytetowe wraz ze sposobami ich implementacji
* Grafy zorientowane i niezorientowane
* Algorytmy sortowania i poszukiwania mediany
* Asymptotyczne zachowanie się procedur rekurencyjnych
* Techniki projektowania algorytmów: "dziel i rządź", wyszukiwanie lokalne i programowanie dynamiczne
* Zarządzanie pamięcią, B-drzewa i struktury indeksowe
Każdemu rozdziałowi towarzyszy zestaw ćwiczeń, o zróżnicowanym stopniu trudności, pomagających sprawdzić swoją wiedzę. "Algorytmy i struktury danych" to doskonały podręcznik dla studentów informatyki i pokrewnych kierunków, a także dla wszystkich zainteresowanych tą tematyką.
Kompletny przewodnik po języku asemblera
Asembler, mimo że jest zdecydowanie trudniejszy w nauce niż języki programowania wysokiego poziomu, jest wśród programisów bardzo popularny. Tworzone w nim programy są mniejsze, zajmują mniej pamięci i miejsca na dysku, a przede wszystkim działają szybciej. Opracowano język HLA, dzięki któremu programowanie w asemblerze przebiega płynnie i polega na analizie implementacji poszczególnych, wysokopoziomowych konstrukcji, znanych z języków takich jak C, C++ czy Pascal.
Książka "Asembler. Sztuka programowania" to podręcznik programowania w języku asemblera oparty na języku HLA. Opisuje 32-bitową architekturę procesorów Intel oraz zasady tworzenia programów w języku HLA. Przedstawia sposoby pisania, kompilacji i uruchamiania programów wykorzystujących różne, nawet najbardziej złożone typy danych.
* Wprowadzenie do języka HLA
* Sposoby reprezentacji danych
* Organizacja pamięci i tryby adresowania
* Typy danych
* Podział programu na procedury i moduły
* Sterowanie wykonaniem programu
* Instrukcje arytmetyczne
* Operacje na plikach
* Operacje bitowe i łańcuchowe
* Makrodefinicje
* Klasy i obiekty
* Połączenie asemblera z programami w innych językach
Przekonaj się, jak prosty jest język asemblera.
Wejdź w świat programowania w języku asemblera
* Dowiedz się, kiedy użycie asemblera jest niezbędne
* Poznaj zasady programowania w asemblerze
* Napisz szybkie i wydajne programy dla DOS-a i Windows
* Zdobądź wiedzę o zasadach działania procesora i pamięci
Uważasz, że możliwości języków programowania wysokiego poziomu nie pozwalają na napisanie programu, którego potrzebujesz? Chcesz stworzyć sterownik, program rezydentny, demo lub... wirusa? Interesuje Cię, co dzieje się w komputerze podczas wykonywania programu?
Wykorzystaj potencjał asemblera!
Programowanie w języku niskiego poziomu daje niemal nieograniczoną kontrolę nad sprzętem i działaniem aplikacji. Programy napisane w języku asemblera działają szybko, są niewielkie i zajmują mało pamięci. Są bardzo wydajne i otwierają dostęp do takich obszarów komputera, do których dostęp z poziomu C++ czy Visual Basica jest niemożliwy.
Książka "Praktyczny kurs asemblera" wprowadzi Cię w świat programowania w tym języku. Dowiesz się, jak działa procesor, w jaki sposób komunikuje się z pamięcią i pozostałymi elementami komputera. Poznasz typy rozkazów procesora, tryby adresowania i zasady tworzenia programów w asemblerze. Lepiej poznasz swój komputer i dowiesz się, w jaki sposób zapamiętuje i przetwarza dane. Komputer przestanie być dla Ciebie "czarną skrzynką" wykonującą w czarodziejski sposób Twoje polecenia.
* Podstawowe wiadomości o architekturze procesorów Intel
* Organizacja pamięci i tryby adresowania
* Omówienie listy rozkazów procesora
* Narzędzia do tworzenia programów w języku asemblera
* Struktura programu w asemblerze
* Definiowanie zmiennych
* Tworzenie podprogramów i makrorozkazów
* Wykorzystanie funkcji BIOS-a oraz MS-DOS
* Programy w asemblerze uruchamiane w systemie Windows
* Optymalizacja kodu
* Tworzenie modułów dla innych języków programowania
Po przeczytaniu tej książki przestaniesz postrzegać asemblera jako zbiór magicznych zaklęć, zrozumiałych jedynie dla brodatych guru pamiętających jeszcze czasy komputerów zajmujących powierzchnię sali gimnastycznej. Napiszesz programy, których uruchomienie nie będzie wymagało od użytkownika posiadania superkomputera. Poznasz wszystkie, nawet najgłębiej ukryte, możliwości komputera.
Programowanie w Prologu różni się zasadniczo od programowania w językach strukturalnych, takich jak Pascal czy C i językach obiektowych jak Java. Dla wielu osób zaczynających przygodę z Prologiem zaskoczeniem jest fakt, że pisanie programu w tym języku nie polega na kodowaniu algorytmu. Programista opisuje obiekty i związki między nimi, a także podaje warunki, jakie powinno spełniać szukane rozwiązanie. System sam przeprowadza obliczenia w oparciu o podane zależności logiczne, zaś programista jedynie częściowo może wpływać na sposób działania programu.
Książka "Prolog. Programowanie" to podręcznik tego niezwykłego języka programowania stosowanego przy rozwiązywaniu problemów z różnych dziedzin: od logiki matematycznej i symbolicznego rozwiązywania równań przez analizę języka naturalnego, aż do zagadnień związanych ze sztuczną inteligencją. Zawiera ona:
* Wprowadzenie do Prologu
* Podstawowe struktury danych
* Nawracanie, sterowanie nawracaniem za pomocą symbolu odcięcia
* Operacje wejścia/wyjścia
* Predykaty
* Składnię reguł gramatycznych i analizę języka naturalnego
* Wiele przykładowych programów
Wszystkim rozdziałom towarzyszą ćwiczenia. Uzupełnieniem tekstu książki są dodatki omawiające m.in. rozwiązania ćwiczeń i różnice między najważniejszymi wersjami Prologu.
"Prolog. Programowanie" to książka dla studentów matematyki i informatyki, a także dla wszystkich zainteresowanych programowaniem opartym na regułach logicznych. Jeśli chcesz podjąć wyzwanie i nauczyć się Prologu, jest książka dla Ciebie.
Praktyczne rozwiązania dla zaawansowanych programistów
Do tworzenia wydajnych programów nie wystarczy teoretyczna wiedza o algorytmach, strukturach danych i inżynierii oprogramowania. Istnieje pokaźna liczba sztuczek, sprytnych technik i praktycznych rozwiązań, których znajomość jest niezbędna każdemu programiście.
Niniejsza książka zawiera pokaźny zestaw technik, które pomogą zaoszczędzić sporo czasu. Techniki te zostały opracowane przez twórców kodu poszukujących eleganckich i wydajnych sposobów tworzenia lepszego oprogramowania. W "Uczcie programistów" doświadczony programista Hank Warren dzieli się z Czytelnikami znanymi sobie sztuczkami, które zgromadził wraz z imponującym doświadczeniem w dziedzinie programowania aplikacji i systemów operacyjnych. Większość z tych sztuczek jest niezwykle praktyczna, niektóre zostały przedstawione jako ciekawostki lub zaskakujące rozwiązania. Ich zestawienie stanowi niesamowitą kolekcję, która będzie pomocna nawet dla najbardziej doświadczonych programistów w rozszerzeniu ich umiejętności.
W książce opisano następujące zagadnienia:
* Obszerna kolekcja użytecznych sztuczek programistycznych
* Drobne algorytmy rozwiązujące często spotykane problemy
* Algorytmy kontroli przekroczenia ograniczeń
* Zmiana kolejności bitów i bajtów
* Dzielenie całkowite i dzielenie przez stałe
* Elementarne operacje na liczbach całkowitych
* Kod Gray"a
* Krzywa Hilberta
* Formuły wyznaczania liczb pierwszych
Niniejsza książka jest doskonałą pozycją dla wszystkich programistów, którzy mają zamiar tworzyć wydajny kod. "Uczta programistów" nauczy Cię tworzenia aplikacji wysokiej jakości -- wyższej niż wymagana na uczelniach i kursach programowania.
Master Thesis - Comparative analysis of programming Environments based on Rub...Adam Skołuda
In this thesis, we analyzed technologies for creating web applications, using Ruby and JavaScript. Were chosen two tools for creating frontend and three responsible for the backend. The main emphasis has been on a comparison of selected tools. The preface provides background information to the problem, presents the purpose and division of work. This also explains the motivation to take the topic of work and arrangement of chapters. The theoretical introduction describes the essential issues of web application architecture, the understanding of which is crucial for the realization of the theme. Description of the technology is an important chapter, which describes the selected libraries. These chapters lead to the multivariate analysis. This chapter is a comparison of selected tools, aimed to identify the best in each category. At the end, there is a summary of the work carried out, the conclusions of the study, as well as a subjective assessment of examined technologies. It also takes a polemic about the future direction of web applications.
Strukturalna organizacja systemów komputerowych. Wydanie VWydawnictwo Helion
Doskonałe omówienie zasad działania współczesnych komputerów
* Dowiedz się, jak działają procesory i magistrale
* Poznaj reguły algebry logiki
* Odkryj tajemnice współczesnych systemów operacyjnych
Dla większości użytkowników komputerów, nawet tych, dla których komputer jest narzędziem pracy, wiedza o tym urządzeniu kończy się na umiejętności instalowania i uruchamiania aplikacji. Współczesne, intuicyjne systemy operacyjne, technologie maksymalnie upraszczające pracę z komputerem, łatwe w obsłudze aplikacje -- wszystko to powoduje, że znajomość zasad funkcjonowania komputerów wydaje się nam niepotrzebna. Tymczasem taka wiedza może okazać się przydatna nie tylko specjaliście, ale również zwykłemu użytkownikowi. Dzięki niej twórcy aplikacji są w stanie zoptymalizować ich działanie i zrozumieć przyczyny błędów, projektanci urządzeń peryferyjnych wybrać najlepszy sposób komunikacji swojego produktu z komputerem, a osoby zainteresowane kupnem nowego sprzętu dokonać świadomego wyboru.
W książce "Strukturalna organizacja systemów komputerowych. Wydanie V" zaprezentowano system komputerowy w ujęciu hierarchicznym, jako zespół zależnych od siebie warstw. Poznajemy go, poczynając od poziomu "logiki cyfrowej", poprzez mikroarchitekturę i poziom maszynowy, aż do poziomu systemu operacyjnego i języka asemblera. Książka przedstawia również historię rozwoju komputerów, zadania systemów operacyjnych, zasady programowania w języku maszynowym oraz architektury najpopularniejszych procesorów.
* Procesory i pamięć operacyjna
* Wykonywanie rozkazów języka maszynowego
* Operacje wejścia i wyjścia
* Arytmetyka cyfrowa
* Magistrale ISA, PCI oraz PCI Express
* Przetwarzanie danych przez procesory
* Programowanie w języku asemblera
* Działanie systemów operacyjnych
* Przetwarzanie rozproszone i obliczenia równoległe
Dowiedz się jak działa Twój komputer.
Wykorzystaj Excel w swojej firmie
* Przeprowadzaj analizy statystyczne.
* Steruj procesami w firmie.
* Monitoruj obciążenie systemów.
Excel jest jedną z najpopularniejszych aplikacji biurowych, znaną niemal wszystkim posiadaczom komputerów. Jednak większość użytkowników wykorzystuje jedynie część możliwości tej aplikacji, nie wiedząc, że -- oprócz obliczania sum i średnich w standardowych arkuszach -- może ona ułatwić pracę na wiele sposobów. Narzędzia oferowane przez Excel, m.in. te, które służą do analizy i wizualizacji, warto stosować w znacznie szerszym zakresie, gromadząc i przetwarzając dane z wielu innych systemów.
Książka "Excel. Analiza danych biznesowych" przedstawia sposoby zastosowania tej aplikacji do realizacji zadań związanych z kierowaniem przedsiębiorstwem bądź zespołem produkcyjnym. Czytając ją, poznasz przykładowe aplikacje Excela i nauczysz się korzystać z wbudowanych w ten program narzędzi. Dowiesz się, jak przeprowadzać analizy za pomocą wykresów i tabel przestawnych, wyznaczać trendy na podstawie danych historycznych, korzystać z modułu Solver oraz tworzyć własne moduły obliczeniowe.
* Obliczenia i analizy statystyczne
* Korzystanie z tabel i wykresów przestawnych
* Tworzenie modeli matematycznych
* Prognozowanie obciążenia
* Monitorowanie systemów i procesów
* Optymalizowanie funkcji
* Import danych ze źródeł zewnętrznych
* Prezentacja danych
Przekonaj się, jak bardzo Excel może usprawnić działanie Twojej firmy.
Błyskawiczny kurs programowania aplikacji w języku C
Język C, mimo prawie 30-letniej historii, cieszy się niesłabnącą popularnością wśród programistów. Wszyscy jego użytkownicy cenią w nim prostą i czytelną składnię, niewielki i łatwy do zapamiętania zakres słów kluczowych oraz duże możliwości, dzięki którym za pomocą C można rozwiązać niemal każde zagadnienie programistyczne. Zewnętrzne biblioteki, dostępne w sieci oraz dołączane do najpopularniejszych narzędzi programistycznych, dodatkowo rozszerzają możliwości C.
Książka "Programowanie w języku C. Szybki start" to podręcznik dla tych, którzy chcą poznać C w praktyce i nie chcą przebijać się przez dziesiątki stron opisów teoretycznych. Każde zagadnienie -- od najprostszych, związanych ze strukturą programu i zasadami kompilacji aż do złożonych typów danych i obsługi plików zewnętrznych -- jest przedstawione w postaci bogato ilustrowanej sekwencji czynności. Wykonując kolejne przykłady z książki, poznasz wszystkie podstawowe wiadomości o programowaniu w języku C.
* Struktura programu w języku C
* Typy danych
* Sterowanie działaniem programu
* Korzystanie ze standardowego wejścia i wyjścia
* Deklarowanie i stosowanie funkcji
* Dyrektywy preprocesora
* Wskaźniki i zarządzanie pamięcią
* Obsługa plików
* Złożone typy danych
Poznaj zalety i możliwości najpopularniejszego języka programowania.
Badanie struktur danych, elementarnych składników wykorzystywanych w informatyce, jest podstawą, w oparciu o którą możesz zdobywać cenne umiejętności. Znajomość struktur danych jest niezbędna studentom, którzy chcą programować czy też testować oprogramowanie.
W niniejszej książce zwrócono uwagę na trzy ważne aspekty struktur danych: po pierwsze, na związek struktur danych z algorytmami, między innymi na złożoność obliczeniową algorytmów. Po drugie, struktury te prezentowane są w sposób zgodny z zasadami projektowania obiektowego i obiektowym paradygmatem programowania. Po trzecie, ważną częścią książki są implementacje struktur danych w języku C++.
Książka prezentuje:
* Podstawy projektowania obiektowego w C++
* Analizę złożoności
* Listy powiązane
* Stosy i kolejki
* Rekurencję
* Drzewa binarne
* Sterty
* Drzewa wielokrotne
* Grafy
* Sortowanie i mieszanie
* Kompresja danych
* Zarządzanie pamięcią
Książka ta dostarcza studentom informatyki nie tylko niezbędnej wiedzy na temat algorytmów i struktur danych, ale prezentuje jednocześnie sposoby ich implementacji w języku C++, obecnie jednym z wiodących języków programowania. Dostarcza ona więc nie tylko wiedzy teoretycznej, ale również pozwala rozwinąć praktyczne umiejętności przydatnych w przyszłej pracy zawodowej.
Asembler dla procesorów Intel. Vademecum profesjonalistyWydawnictwo Helion
Chociaż świat programowania nieodwołalnie zdominowany jest przez języki wyższego poziomu (takie jak C, C++ czy Java), znajomość asemblera jest nadal wysoko ceniona. Użycie języka maszynowego pozwala na pisanie niezwykle wydajnych programów, odwołujących się bezpośrednio do sprzętu, wykorzystujących w 100% możliwości hardware"u.
Książka "Asembler dla procesorów Intel. Vademecum profesjonalisty" to kompletny przewodnik po języku programowania najpopularniejszej rodziny procesorów. Możesz ją traktować jako podręcznik asemblera lub jako kompendium wiedzy, do którego zawsze będziesz mógł się odwołać, gdy zajdzie taka potrzeba. Znajdziesz w niej informacje dotyczące:
* architektury mikroprocesorów i zestawu rozkazów procesorów z rodziny Intel 80x86
* dyrektyw, makr i operatorów języka asembler oraz podstawowej struktury programu
* metodologii programowania oraz sposobów użycia języka asembler do tworzenia narzędzi systemowych i aplikacji
* sposobów pracy z urządzeniami sprzętowymi
* interakcji między programem napisanym w języku asembler, systemem operacyjnym a innymi aplikacjami
* śledzenia przebiegu wykonania programu za pomocą debugera
Oprócz krótkich przykładów książka "Asembler dla procesorów Intel. Vademecum profesjonalisty" zawiera 75 gotowych do uruchomienia programów, które realizują koncepcje prezentowane w tekście. Znajdujące się na końcu książki dodatki stanowią przewodniki po przerwaniach MS-DOS i mnemonikach kodu maszynowego.
Profesjonalne programowanie. Część 1. Zrozumieć komputerWydawnictwo Helion
Chcesz zostać programistą doskonałym?
Zacznij od poznania szczegółów działania komputera
* Zapis wartości liczbowych oraz arytmetyka zmiennoprzecinkowa i binarna
* Organizacja dostępu do pamięci komputera
* Proces wykonywania programu oraz operacje wejścia i wyjścia
Kod napisany przez profesjonalnego programistę jest wydajny i efektywny. Aby tworzyć wydajny kod, należy poznać architekturę komputera i sposób, w jaki program jest wykonywany. Zrozumienie tego, w jaki sposób komputer realizuje kolejne instrukcje programu i jak słowa kluczowe języków wysokiego poziomu są przenoszone na rozkazy procesora, jest kluczem do napisania kodu, który po skompilowaniu da szybko i bezbłędnie działający program.
"Profesjonalne programowanie. Część 1. Zrozumieć komputer" to pierwszy tom serii książek przeznaczonych dla tych programistów, którzy chcą podnieść swoje kwalifikacje. Przedstawia wewnętrzną architekturę komputera od strony, której znajomość jest niezbędna programiście. Opisuje sposoby zapisu wartości liczbowych i tekstów, działania na liczbach binarnych i zmiennoprzecinkowych oraz logikę Boole’a. Czytając tę książkę, dowiesz się, w jaki sposób procesor przetwarza rozkazy asemblera, jak odbywa się dostęp do danych zapisanych w pamięci oraz jak przesyłane są dane do i z urządzeń zewnętrznych.
* Zapis liczb w systemie binarnym, ósemkowym i szesnastkowym
* Działania na liczbach binarnych i zmiennoprzecinkowych
* Sposoby reprezentacji danych znakowych
* Organizacja pamięci i tryby adresowania
* Złożone typy danych
* Projektowanie układów cyfrowych i logika Boole’a
* Architektura procesora i rozkazy asemblera
* Operacje wejścia i wyjścia
Jeśli chcesz, aby napisane przez Ciebie oprogramowanie budziło podziw, koniecznie przeczytaj tę książkę.
Teoria i praktyka prowadzenia projektów programistycznych
* Naucz się zasad programowania ekstremalnego i zastosuj je w praktyce
* Od konceptualizacji do przekazania działającego systemu -- poznaj najlepsze sposoby pracy na każdym etapie tworzenia oprogramowania
* Poznaj znaczenie wszystkich uczestników procesu tworzenia oprogramowania: programistów, menedżerów i klientów
* Dowiedz się, jak rozwiązać najczęstsze problemy powstające przy wdrażaniu metodologii programowania ekstemalnego
"eXtreme programming" przedstawia nową metodologię i praktykę programowania w przystępny, a jednocześnie kompleksowy sposób. Autorzy omawiają podstawowe pojęcia programowania ekstremalnego: planowanie edycji, programowanie w parach, wczesne testowanie, "zręczne modelowanie" i refaktoryzację. Zostały one zaprezentowane na przykładzie konkretnego projektu, którego realizację omówiono w książce.
Kto powinien przeczytać tę książkę? Będzie ona niewątpliwie pożyteczną lekturą dla każdego, kto choć częściowo związał swe życie z tworzeniem oprogramowania -- programisty, menedżera czy koordynatora projektu. I nawet gdyby miało skończyć się tylko na czytaniu -- bez praktycznego zastosowania w najbliższym projekcie poznanych reguł, wiedza o programowaniu ekstremalnym okaże się bez wątpienia pożyteczna.
* Naucz się zasad programowania ekstremalnego i zastosuj je w praktyce
* Od konceptualizacji do oddania działającego systemu -- poznaj najlepsze sposoby pracy na każdym etapie tworzenia programowania
* Poznaj znaczenie wszystkich uczestników procesu tworzenia oprogramowania: programistów, menedżerów i klientów
* Dowiedz się, jak rozwiązać najczęstsze problemy powstające przy wdrażaniu metodologii programowania ekstemalnego
Przysłowie "kto pyta, nie błądzi" nie zawiera całej prawdy. Nie wystarczy pytać, trzeba jeszcze znajdować odpowiedzi. Książka "Programowanie w języku C. FAQ" to zbiór kilkuset odpowiedzi na najczęściej zadawane pytania na temat tego języka programowania. Z pewnością część z przedstawionych tu pytań już pojawiła się w Twojej praktyce programistycznej (pamiętasz, ile czasu straciłeś poszukując odpowiedzi?). Inne problemy dopiero się pojawią i jeśli na Twojej półce będzie ta książka, szybko znajdziesz w niej zwięzłe, ale wyczerpujące rozwiązanie często wzbogacone przykładem kodu źródłowego.
Chociaż książka żadną miarą nie powinna być traktowana jako podręcznik, z którego można nauczyć się programowania w C, z pewnością przyda się każdej osobie używającej tego języka w codziennej praktyce. Autor porusza wiele przydatnych zagadnień obejmujących szeroki zestaw tematów.
Omówiono między innymi:
* Deklaracje
* Struktury i unie
* Puste wskaźniki
* Wyrażenia
* Makroprocesor
* Alokację pamięci
* Różnice między standardami C
* Standardową bibliotekę wejścia-wyjścia
* Kwestie związane z systemami operacyjnymi
Modelowanie danych to umiejętność stosunkowo rzadko poszukiwana na rynku. Firmy chętniej zatrudniają programistów i administratorów baz danych. Jednak zaprojektowanie efektywnych mechanizmów przechowywania danych ma duże znaczenie przy tworzeniu korporacyjnych aplikacji bazodanowych. Dopiero w sytuacji, gdy systemy zaczynają działać niewłaściwie, okazuje się, że przyczyną jest niepoprawny projekt bazy danych. Odpowiednio przeprowadzony proces modelowania danych może ułatwić rozwiązywanie problemów z aplikacją.
Książka "Modelowanie danych" to wyczerpujące omówienie tego procesu i niezbędne źródło wiedzy dla każdego projektanta baz danych, który chce opracować wydajny i niezawodny system. Przedstawia modelowanie oparte na modelu relacyjnym, jego matematyczne podstawy i praktyczne wdrożenia. Czytając tę książkę, poznasz różne typy modeli. Dowiesz się, jaki poziom szczegółowości reprezentuje każdy z nich i jak je zaimplementować w konkretnych projektach informatycznych.
W książce omówiono także:
* Cykl istnienia danych
* Podstawowe pojęcia modelowania relacyjnego
* Reguły Codda dotyczące relacyjnych baz danych
* Normalizacja danych
* Analiza logiczna i fizyczna
* Modelowanie procesów biznesowych
* Tworzenie modelu logicznego
* Przekształcanie modelu logicznego w fizyczny
* Stosowanie metadanych
* Praktyki modelowania danych
Dzięki wiadomościom z tej książki staniesz się specjalistą w zakresie modelowania danych.
SQL jest uznawanym za standard językiem programowania służącym do tworzenia, modyfikowania oraz pobierania informacji przechowywanych przez systemy zarządzania relacyjnymi bazami danych. Chociaż każdy system bazodanowy używa nieco innego dialektu tego języka, często rozbudowując go o dodatkowe funkcje, podstawowe instrukcje SQL są wspólne dla wszystkich systemów: od Accessa do Oracle'a.
Bogata w ilustracje, napisana przystępnym językiem książka "SQL. Szybki start" pozwoli Ci nauczyć się SQL-a i zacząć pracę z relacyjną bazą danych, niezależnie od tego, który system wybierzesz. Autor kładzie szczególny nacisk na realizację konkretnych zadań, przedstawiając kolejne kroki, jakie należy wykonać, by rozwiązać dany problem. Dzięki temu książka jest nie tylko przewodnikiem po języku SQL i jego odmianach, ale także doskonałą pomocą, po którą będziesz często sięgał w swojej praktyce programistycznej.
W książce omówiono m.in.:
* Najpopularniejsze systemy bazodanowe, ich wady i zalety
* Relacyjny model danych
* Podstawy języka SQL: składnię i najważniejsze typy danych
* Pobieranie danych za pomocą zapytań
* Operatory i funkcje SQL
* Filtrowanie, grupowanie i sortowanie wyników zapytań
* Dodawanie, usuwanie i modyfikowanie danych
* Korzystanie z indeksów
* Używanie perspektyw
* Stosowanie transakcji
Matlab to środowisko służące do przeprowadzania obliczeń numerycznych i rozwiązywania złożonych zagadnień matematycznych. Wydajne i szybkie algorytmy oraz doskonałe mechanizmy analityczne czynią z niego doskonałe narzędzia zarówno dla matematyka, jak i dla ekonomisty lub genetyka. Język programowania Matlaba umożliwia tworzenie własnych aplikacji, a ogromna ilość bibliotek zewnętrznych ułatwia zastosowanie tych aplikacji do różnych celów. Matlab to dziś standard w laboratoriach badawczych. Coraz częściej wykorzystuje się go również na uczelniach -- na niektórych jest nawet elementem programu zajęć. Oczywiście nic nie stoi na przeszkodzie, aby jego możliwości wykorzystywać również podczas nauki matematyki w szkole.
Książka "Matlab. Ćwiczenia" to zbiór praktycznych ćwiczeń, dzięki którym poznasz możliwości Matlaba i zasady korzystania z niego. W książce opisane jest tworzenie programów, wykorzystywanie Matlaba do obliczeń matematycznych – zarówno podstawowych jak i tych najbardziej skomplikowanych oraz tworzenie graficznej reprezentacji wyników obliczeń.
* Środowisko Matlaba
* Zasady programowania w Matlabie
* Funkcje matematyczne
* Operacje na macierzach
* Wyznaczanie pochodnych i całek
* Sterowanie przebiegiem programu
* Tworzenie różnych typów wykresów
Przekonaj się, jak bardzo możesz przyspieszyć swoją pracę korzystając z odpowiedniego narzędzia obliczeniowego.
Wykorzystaj pełnię możliwości baz danych
* Na czym polega model relacyjny?
* W jaki sposób pobierać dane z bazy?
* Jak projektować bazy danych i tabele?
Systemy zarządzania bazami danych to aplikacje, które spotkać można praktycznie w każdej firmie.
Na rynku dostępnych jest wiele takich narzędzi, różniących się od siebie wydajnością, wymaganiami sprzętowymi, potencjalnymi zastosowaniami i - przede wszystkim — ceną. Użytkownicy mogą wybierać zarówno wśród rozwiązań komercyjnych, jak i nieustępujących im rozwiązań bezpłatnych. Cechą łączącą wszystkie systemy zarządzania bazami danych jest język, na którym opiera się praca z nimi - SQL. To ustandaryzowany zbiór poleceń pozwalających na niemal dowolne manipulacje danymi zgromadzonymi w bazach, tworzenie nowych baz oraz administrowanie serwerami baz danych. Bez jego znajomości wykorzystanie pełni możliwości bazy danych jest praktycznie niemożliwe.
„Praktyczny kurs SQL” to książka, dzięki której poznasz ten język. Czytając ją, dowiesz się, czym jest relacyjność w bazach danych, jak skonstruowane są takie bazy i czym są postaci normalne. Nauczysz się pobierać dane w oparciu o różne kryteria, przetwarzać uzyskane wyniki i wyświetlać je na ekranie w odpowiedni sposób. Poznasz funkcje pozwalające na modyfikację istniejących i dodawanie nowych danych, zastosujesz zapytania złożone i podzapytania oraz wykorzystasz mechanizmy transakcji. Przeczytasz także o projektowaniu baz danych oraz definiowaniu i nadawaniu uprawnień do korzystania z nich.
* Modele baz danych
* Postaci normalne w modelu relacyjnym
* Historia języka SQL
* Pobieranie danych za pomocą instrukcji SELECT
* Dobór kryteriów wybierania
* Przetwarzanie wyników zapytań
* Zapytania złożone i podzapytania
* Transakcje
* Modyfikowanie i dodawanie danych
* Projektowanie baz danych
* Uprawnienia
Uzupełnieniem do książki jest udostępniona tutaj baza danych.
Poznaj w praktyce język będący podstawą wszystkich nowoczesnych systemów zarządzania bazami danych.
Doskonały przewodnik po najnowszej wersji języka PHP
dla twórców dynamicznych serwisów WWW
Książka "PHP. Programowanie. Wydanie III" to kolejne wydanie praktycznego przewodnika dla programistów stron internetowych. Jeden z najlepszych programistów PHP -- Leon Atkinson, uczy wszystkiego, co potrzebujesz, by stworzyć dobrą i szybką aplikację sieciową. Dokładnie opisuje składnię PHP i kluczowe elementy języka. Atkinson przedstawia także najważniejsze funkcje PHP, w tym funkcje wejścia-wyjścia, przetwarzania danych, matematyczne, daty, czasu, konfiguracji, funkcje umożliwiające współpracę z bazami danych, funkcje graficzne i sieciowe. Prezentuje on również działanie PHP na przykładach realizujących sortowanie, przeszukiwanie, analizę łańcuchów i inne zadania.
Książka składa się z czterech części:
* wstępu do programowania,
* przewodnika po wszystkich funkcjach,
* przeglądu typowych problemów programistycznych
* części umożliwiającej zastosowanie zdobytej wiedzy przy tworzeniu witryn.
Pierwsza część zajmuje się kwestiami dotyczącymi wszystkich języków programowania: jak wygląda skrypt PHP, jak sterować przebiegiem programu i jak zarządzać danymi.
Część druga organizuje funkcje według ich zastosowania i zawiera przykłady ich zastosowania. PHP udostępnia bardzo dużo funkcji, dlatego część ta jest najobszerniejsza.
Część trzecia zajmuje się rozwiązywaniem typowych problemów programistycznych, takich jak sortowanie czy generowanie grafiki.
Ostatnia część udziela porad dotyczących tworzenia całych witryn sieciowych za pomocą PHP.
* Poznaj wzorce projektowe w PHP, techniki programowania obiektowego i możliwości wykorzystania języka XML
* Wykorzystaj nowe funkcje i możliwości PHP 5
* Napisz wydajne aplikacje internetowe, wykorzystując najlepsze praktyki inżynierii oprogramowania
Windows Movie Maker dołączany do systemu Windows XP to doskonałe narzędzie do domowego montażu cyfrowych filmów wideo. Jest prosty w obsłudze, posiada spore możliwości, a montaż filmów za jego pomocą jest przyjemną zabawą. Movie Maker pozwala na przeniesienie klipów z kamery cyfrowej, zaimportowanie materiałów z dysku, rozmieszczenie ujęć i połączenie ich przejściami, a także udźwiękowienie i dodanie efektów specjalnych. Gotowy film można wysłać pocztą elektroniczną, zapisać na dysku lub płycie CD albo opublikować w internecie.
Książka "Tworzenie filmów w Windows XP. Projekty" przedstawia proces tworzenia filmu wideo. Opisuje kolejne kroki prowadzące do zmontowania cyfrowego filmu wideo z przechwyconych ujęć i zaimportowanych materiałów. Nie znajdziesz w niej jednak długich opisów i dziesiątek parametrów. Każde zagadnienie jest przedstawione za pomocą zrzutów ekranu i krótkich instrukcji. Dzięki temu w ciągu kilku godzin zrealizujesz swój pierwszy projekt w Movie Makerze.
* Elementy interfejsu użytkownika
* Przechwytywanie klipów z kamery wideo
* Import materiałów źródłowych
* Tworzenie wstępnego montażu
* Dodawanie przejść i efektów specjalnych
* Nakładanie plansz tytułowych i napisów
* Udźwiękowienie filmu
* Korzystanie z funkcji Autofilm
* Eksport zmontowanego filmu
Przekonaj się, jak proste może być tworzenie własnych filmów wideo.
Przedstaw się światu!
* Jak zbudować elegancką stronę z blogiem?
* Jak tworzyć wyspecjalizowane przeglądarki bloga?
* Jak dodawać do własnego serwisu blogowego kanał RSS?
Prowadzenie bloga to nowy sposób na zwiększenie aktywności społecznej - szansa na zaistnienie w rzeczywistości wirtualnej, mająca swoje odbicie w tak zwanym „prawdziwym życiu”. Dlatego blogi piszą dziś niemal wszyscy: politycy, marketingowcy, celebryci, biznesmeni. Forma publicznie dostępnego pamiętnika pozwala na szeroką prezentację własnych poglądów, przekonań czy wartości. Z tego powodu blogi wykorzystywane są też jako wortale poświęcone określonej tematyce, promujące idee lub produkty. Ich użytkownicy stworzyli nawet własną społeczność, która 31 sierpnia obchodzi swoje święto - Dzień Bloga. Już dziś możesz do nich dołączyć!
„Blog, więcej niż internetowy pamiętnik” to książka, która pokaże Ci, jak założyć i prowadzić własny blog, a także aktywnie korzystać z innych blogów. Dowiesz się z niej, jak skorzystać z oprogramowania obsługującego serwisy blogowe, jak zintegrować języki PHP, HTML, CSS i SQL, aby stworzyć elegancką stronę prezentującą Twój blog. Nauczysz się budować własną bazę danych, przeznaczoną do przechowywania wpisów, a także zabezpieczać ją przed niepowołanymi modyfikacjami. I wreszcie poznasz sposób na dodanie do własnego serwisu kanału RSS, aby czytelnicy na bieżąco mogli obserwować pojawianie się nowych wpisów. Znajdziesz tu wszystko, czego potrzebujesz, aby zaprezentować światu swój blog!
* Obsługa okna tworzenia bloga
* Modyfikowanie wyglądu bloga
* Publikowanie w określonym terminie
* Rozbudowa bloga
* Instalacja czytnika RSS
* Subskrybowanie blogów za pomocą RSS
* Instalacja oprogramowania własnego serwera
* Baza danych i modyfikacja danych
* Projektowanie struktury bloga
* Zakładanie konta użytkownika
* Zakładanie bazy danych i tabeli danych
* Nadawanie uprawnień do korzystania z tabeli
* Przygotowanie szablonu i tworzenie strony www
* Automatyzowanie, blokowanie i trwałe usuwanie wpisu
* Tworzenie formularza wyszukiwania
* Tworzenie kanału RSS i wypełnianie go treścią
* Pobieranie programu Weber
Blog to prosty i fascynujący sposób, aby świat dowiedział się o Twoim istnieniu!
W niniejszej książce przedstawiono struktury danych i algorytmy stanowiące podstawę współczesnego programowania komputerów. Algorytmy są niczym przepis na rozwiązanie postawionego przed programistę problemu. Są one nierozerwalnie związane ze strukturami danych - listami, rekordami, tablicami, kolejkami, drzewami... podstawowymi elementami wiedzy każdego programisty.
Książka obejmuje szeroki zakres materiału, a do jej lektury wystarczy znajomość dowolnego języka programowania strukturalnego (np. Pascala). Opis klasycznych algorytmów uzupełniono o algorytmy związane z zarządzaniem pamięcią operacyjną i pamięciami zewnętrznymi.
Książka przedstawia algorytmy i struktury danych w kontekście rozwiązywania problemów za pomocą komputera. Z tematyką rozwiązywania problemów powiązano zagadnienie zliczania kroków oraz złożoności czasowej - wynika to z głębokiego przekonania autorów tej książki, iż wraz z pojawianiem się coraz szybszych komputerów, pojawiać się będą także coraz bardziej złożone problemy do rozwiązywania i - paradoksalnie - złożoność obliczeniowa używanych algorytmów zyskiwać będzie na znaczeniu.
W książce omówiono m.in.:
* Tradycyjne struktury danych: listy, kolejki, stosy
* Drzewa i operacje na strukturach drzew
* Typy danych oparte na zbiorach, słowniki i kolejki priorytetowe wraz ze sposobami ich implementacji
* Grafy zorientowane i niezorientowane
* Algorytmy sortowania i poszukiwania mediany
* Asymptotyczne zachowanie się procedur rekurencyjnych
* Techniki projektowania algorytmów: "dziel i rządź", wyszukiwanie lokalne i programowanie dynamiczne
* Zarządzanie pamięcią, B-drzewa i struktury indeksowe
Każdemu rozdziałowi towarzyszy zestaw ćwiczeń, o zróżnicowanym stopniu trudności, pomagających sprawdzić swoją wiedzę. "Algorytmy i struktury danych" to doskonały podręcznik dla studentów informatyki i pokrewnych kierunków, a także dla wszystkich zainteresowanych tą tematyką.
Kompletny przewodnik po języku asemblera
Asembler, mimo że jest zdecydowanie trudniejszy w nauce niż języki programowania wysokiego poziomu, jest wśród programisów bardzo popularny. Tworzone w nim programy są mniejsze, zajmują mniej pamięci i miejsca na dysku, a przede wszystkim działają szybciej. Opracowano język HLA, dzięki któremu programowanie w asemblerze przebiega płynnie i polega na analizie implementacji poszczególnych, wysokopoziomowych konstrukcji, znanych z języków takich jak C, C++ czy Pascal.
Książka "Asembler. Sztuka programowania" to podręcznik programowania w języku asemblera oparty na języku HLA. Opisuje 32-bitową architekturę procesorów Intel oraz zasady tworzenia programów w języku HLA. Przedstawia sposoby pisania, kompilacji i uruchamiania programów wykorzystujących różne, nawet najbardziej złożone typy danych.
* Wprowadzenie do języka HLA
* Sposoby reprezentacji danych
* Organizacja pamięci i tryby adresowania
* Typy danych
* Podział programu na procedury i moduły
* Sterowanie wykonaniem programu
* Instrukcje arytmetyczne
* Operacje na plikach
* Operacje bitowe i łańcuchowe
* Makrodefinicje
* Klasy i obiekty
* Połączenie asemblera z programami w innych językach
Przekonaj się, jak prosty jest język asemblera.
Wejdź w świat programowania w języku asemblera
* Dowiedz się, kiedy użycie asemblera jest niezbędne
* Poznaj zasady programowania w asemblerze
* Napisz szybkie i wydajne programy dla DOS-a i Windows
* Zdobądź wiedzę o zasadach działania procesora i pamięci
Uważasz, że możliwości języków programowania wysokiego poziomu nie pozwalają na napisanie programu, którego potrzebujesz? Chcesz stworzyć sterownik, program rezydentny, demo lub... wirusa? Interesuje Cię, co dzieje się w komputerze podczas wykonywania programu?
Wykorzystaj potencjał asemblera!
Programowanie w języku niskiego poziomu daje niemal nieograniczoną kontrolę nad sprzętem i działaniem aplikacji. Programy napisane w języku asemblera działają szybko, są niewielkie i zajmują mało pamięci. Są bardzo wydajne i otwierają dostęp do takich obszarów komputera, do których dostęp z poziomu C++ czy Visual Basica jest niemożliwy.
Książka "Praktyczny kurs asemblera" wprowadzi Cię w świat programowania w tym języku. Dowiesz się, jak działa procesor, w jaki sposób komunikuje się z pamięcią i pozostałymi elementami komputera. Poznasz typy rozkazów procesora, tryby adresowania i zasady tworzenia programów w asemblerze. Lepiej poznasz swój komputer i dowiesz się, w jaki sposób zapamiętuje i przetwarza dane. Komputer przestanie być dla Ciebie "czarną skrzynką" wykonującą w czarodziejski sposób Twoje polecenia.
* Podstawowe wiadomości o architekturze procesorów Intel
* Organizacja pamięci i tryby adresowania
* Omówienie listy rozkazów procesora
* Narzędzia do tworzenia programów w języku asemblera
* Struktura programu w asemblerze
* Definiowanie zmiennych
* Tworzenie podprogramów i makrorozkazów
* Wykorzystanie funkcji BIOS-a oraz MS-DOS
* Programy w asemblerze uruchamiane w systemie Windows
* Optymalizacja kodu
* Tworzenie modułów dla innych języków programowania
Po przeczytaniu tej książki przestaniesz postrzegać asemblera jako zbiór magicznych zaklęć, zrozumiałych jedynie dla brodatych guru pamiętających jeszcze czasy komputerów zajmujących powierzchnię sali gimnastycznej. Napiszesz programy, których uruchomienie nie będzie wymagało od użytkownika posiadania superkomputera. Poznasz wszystkie, nawet najgłębiej ukryte, możliwości komputera.
Programowanie w Prologu różni się zasadniczo od programowania w językach strukturalnych, takich jak Pascal czy C i językach obiektowych jak Java. Dla wielu osób zaczynających przygodę z Prologiem zaskoczeniem jest fakt, że pisanie programu w tym języku nie polega na kodowaniu algorytmu. Programista opisuje obiekty i związki między nimi, a także podaje warunki, jakie powinno spełniać szukane rozwiązanie. System sam przeprowadza obliczenia w oparciu o podane zależności logiczne, zaś programista jedynie częściowo może wpływać na sposób działania programu.
Książka "Prolog. Programowanie" to podręcznik tego niezwykłego języka programowania stosowanego przy rozwiązywaniu problemów z różnych dziedzin: od logiki matematycznej i symbolicznego rozwiązywania równań przez analizę języka naturalnego, aż do zagadnień związanych ze sztuczną inteligencją. Zawiera ona:
* Wprowadzenie do Prologu
* Podstawowe struktury danych
* Nawracanie, sterowanie nawracaniem za pomocą symbolu odcięcia
* Operacje wejścia/wyjścia
* Predykaty
* Składnię reguł gramatycznych i analizę języka naturalnego
* Wiele przykładowych programów
Wszystkim rozdziałom towarzyszą ćwiczenia. Uzupełnieniem tekstu książki są dodatki omawiające m.in. rozwiązania ćwiczeń i różnice między najważniejszymi wersjami Prologu.
"Prolog. Programowanie" to książka dla studentów matematyki i informatyki, a także dla wszystkich zainteresowanych programowaniem opartym na regułach logicznych. Jeśli chcesz podjąć wyzwanie i nauczyć się Prologu, jest książka dla Ciebie.
Praktyczne rozwiązania dla zaawansowanych programistów
Do tworzenia wydajnych programów nie wystarczy teoretyczna wiedza o algorytmach, strukturach danych i inżynierii oprogramowania. Istnieje pokaźna liczba sztuczek, sprytnych technik i praktycznych rozwiązań, których znajomość jest niezbędna każdemu programiście.
Niniejsza książka zawiera pokaźny zestaw technik, które pomogą zaoszczędzić sporo czasu. Techniki te zostały opracowane przez twórców kodu poszukujących eleganckich i wydajnych sposobów tworzenia lepszego oprogramowania. W "Uczcie programistów" doświadczony programista Hank Warren dzieli się z Czytelnikami znanymi sobie sztuczkami, które zgromadził wraz z imponującym doświadczeniem w dziedzinie programowania aplikacji i systemów operacyjnych. Większość z tych sztuczek jest niezwykle praktyczna, niektóre zostały przedstawione jako ciekawostki lub zaskakujące rozwiązania. Ich zestawienie stanowi niesamowitą kolekcję, która będzie pomocna nawet dla najbardziej doświadczonych programistów w rozszerzeniu ich umiejętności.
W książce opisano następujące zagadnienia:
* Obszerna kolekcja użytecznych sztuczek programistycznych
* Drobne algorytmy rozwiązujące często spotykane problemy
* Algorytmy kontroli przekroczenia ograniczeń
* Zmiana kolejności bitów i bajtów
* Dzielenie całkowite i dzielenie przez stałe
* Elementarne operacje na liczbach całkowitych
* Kod Gray"a
* Krzywa Hilberta
* Formuły wyznaczania liczb pierwszych
Niniejsza książka jest doskonałą pozycją dla wszystkich programistów, którzy mają zamiar tworzyć wydajny kod. "Uczta programistów" nauczy Cię tworzenia aplikacji wysokiej jakości -- wyższej niż wymagana na uczelniach i kursach programowania.
Master Thesis - Comparative analysis of programming Environments based on Rub...Adam Skołuda
In this thesis, we analyzed technologies for creating web applications, using Ruby and JavaScript. Were chosen two tools for creating frontend and three responsible for the backend. The main emphasis has been on a comparison of selected tools. The preface provides background information to the problem, presents the purpose and division of work. This also explains the motivation to take the topic of work and arrangement of chapters. The theoretical introduction describes the essential issues of web application architecture, the understanding of which is crucial for the realization of the theme. Description of the technology is an important chapter, which describes the selected libraries. These chapters lead to the multivariate analysis. This chapter is a comparison of selected tools, aimed to identify the best in each category. At the end, there is a summary of the work carried out, the conclusions of the study, as well as a subjective assessment of examined technologies. It also takes a polemic about the future direction of web applications.
Strukturalna organizacja systemów komputerowych. Wydanie VWydawnictwo Helion
Doskonałe omówienie zasad działania współczesnych komputerów
* Dowiedz się, jak działają procesory i magistrale
* Poznaj reguły algebry logiki
* Odkryj tajemnice współczesnych systemów operacyjnych
Dla większości użytkowników komputerów, nawet tych, dla których komputer jest narzędziem pracy, wiedza o tym urządzeniu kończy się na umiejętności instalowania i uruchamiania aplikacji. Współczesne, intuicyjne systemy operacyjne, technologie maksymalnie upraszczające pracę z komputerem, łatwe w obsłudze aplikacje -- wszystko to powoduje, że znajomość zasad funkcjonowania komputerów wydaje się nam niepotrzebna. Tymczasem taka wiedza może okazać się przydatna nie tylko specjaliście, ale również zwykłemu użytkownikowi. Dzięki niej twórcy aplikacji są w stanie zoptymalizować ich działanie i zrozumieć przyczyny błędów, projektanci urządzeń peryferyjnych wybrać najlepszy sposób komunikacji swojego produktu z komputerem, a osoby zainteresowane kupnem nowego sprzętu dokonać świadomego wyboru.
W książce "Strukturalna organizacja systemów komputerowych. Wydanie V" zaprezentowano system komputerowy w ujęciu hierarchicznym, jako zespół zależnych od siebie warstw. Poznajemy go, poczynając od poziomu "logiki cyfrowej", poprzez mikroarchitekturę i poziom maszynowy, aż do poziomu systemu operacyjnego i języka asemblera. Książka przedstawia również historię rozwoju komputerów, zadania systemów operacyjnych, zasady programowania w języku maszynowym oraz architektury najpopularniejszych procesorów.
* Procesory i pamięć operacyjna
* Wykonywanie rozkazów języka maszynowego
* Operacje wejścia i wyjścia
* Arytmetyka cyfrowa
* Magistrale ISA, PCI oraz PCI Express
* Przetwarzanie danych przez procesory
* Programowanie w języku asemblera
* Działanie systemów operacyjnych
* Przetwarzanie rozproszone i obliczenia równoległe
Dowiedz się jak działa Twój komputer.
Wykorzystaj Excel w swojej firmie
* Przeprowadzaj analizy statystyczne.
* Steruj procesami w firmie.
* Monitoruj obciążenie systemów.
Excel jest jedną z najpopularniejszych aplikacji biurowych, znaną niemal wszystkim posiadaczom komputerów. Jednak większość użytkowników wykorzystuje jedynie część możliwości tej aplikacji, nie wiedząc, że -- oprócz obliczania sum i średnich w standardowych arkuszach -- może ona ułatwić pracę na wiele sposobów. Narzędzia oferowane przez Excel, m.in. te, które służą do analizy i wizualizacji, warto stosować w znacznie szerszym zakresie, gromadząc i przetwarzając dane z wielu innych systemów.
Książka "Excel. Analiza danych biznesowych" przedstawia sposoby zastosowania tej aplikacji do realizacji zadań związanych z kierowaniem przedsiębiorstwem bądź zespołem produkcyjnym. Czytając ją, poznasz przykładowe aplikacje Excela i nauczysz się korzystać z wbudowanych w ten program narzędzi. Dowiesz się, jak przeprowadzać analizy za pomocą wykresów i tabel przestawnych, wyznaczać trendy na podstawie danych historycznych, korzystać z modułu Solver oraz tworzyć własne moduły obliczeniowe.
* Obliczenia i analizy statystyczne
* Korzystanie z tabel i wykresów przestawnych
* Tworzenie modeli matematycznych
* Prognozowanie obciążenia
* Monitorowanie systemów i procesów
* Optymalizowanie funkcji
* Import danych ze źródeł zewnętrznych
* Prezentacja danych
Przekonaj się, jak bardzo Excel może usprawnić działanie Twojej firmy.
Błyskawiczny kurs programowania aplikacji w języku C
Język C, mimo prawie 30-letniej historii, cieszy się niesłabnącą popularnością wśród programistów. Wszyscy jego użytkownicy cenią w nim prostą i czytelną składnię, niewielki i łatwy do zapamiętania zakres słów kluczowych oraz duże możliwości, dzięki którym za pomocą C można rozwiązać niemal każde zagadnienie programistyczne. Zewnętrzne biblioteki, dostępne w sieci oraz dołączane do najpopularniejszych narzędzi programistycznych, dodatkowo rozszerzają możliwości C.
Książka "Programowanie w języku C. Szybki start" to podręcznik dla tych, którzy chcą poznać C w praktyce i nie chcą przebijać się przez dziesiątki stron opisów teoretycznych. Każde zagadnienie -- od najprostszych, związanych ze strukturą programu i zasadami kompilacji aż do złożonych typów danych i obsługi plików zewnętrznych -- jest przedstawione w postaci bogato ilustrowanej sekwencji czynności. Wykonując kolejne przykłady z książki, poznasz wszystkie podstawowe wiadomości o programowaniu w języku C.
* Struktura programu w języku C
* Typy danych
* Sterowanie działaniem programu
* Korzystanie ze standardowego wejścia i wyjścia
* Deklarowanie i stosowanie funkcji
* Dyrektywy preprocesora
* Wskaźniki i zarządzanie pamięcią
* Obsługa plików
* Złożone typy danych
Poznaj zalety i możliwości najpopularniejszego języka programowania.
Badanie struktur danych, elementarnych składników wykorzystywanych w informatyce, jest podstawą, w oparciu o którą możesz zdobywać cenne umiejętności. Znajomość struktur danych jest niezbędna studentom, którzy chcą programować czy też testować oprogramowanie.
W niniejszej książce zwrócono uwagę na trzy ważne aspekty struktur danych: po pierwsze, na związek struktur danych z algorytmami, między innymi na złożoność obliczeniową algorytmów. Po drugie, struktury te prezentowane są w sposób zgodny z zasadami projektowania obiektowego i obiektowym paradygmatem programowania. Po trzecie, ważną częścią książki są implementacje struktur danych w języku C++.
Książka prezentuje:
* Podstawy projektowania obiektowego w C++
* Analizę złożoności
* Listy powiązane
* Stosy i kolejki
* Rekurencję
* Drzewa binarne
* Sterty
* Drzewa wielokrotne
* Grafy
* Sortowanie i mieszanie
* Kompresja danych
* Zarządzanie pamięcią
Książka ta dostarcza studentom informatyki nie tylko niezbędnej wiedzy na temat algorytmów i struktur danych, ale prezentuje jednocześnie sposoby ich implementacji w języku C++, obecnie jednym z wiodących języków programowania. Dostarcza ona więc nie tylko wiedzy teoretycznej, ale również pozwala rozwinąć praktyczne umiejętności przydatnych w przyszłej pracy zawodowej.
Asembler dla procesorów Intel. Vademecum profesjonalistyWydawnictwo Helion
Chociaż świat programowania nieodwołalnie zdominowany jest przez języki wyższego poziomu (takie jak C, C++ czy Java), znajomość asemblera jest nadal wysoko ceniona. Użycie języka maszynowego pozwala na pisanie niezwykle wydajnych programów, odwołujących się bezpośrednio do sprzętu, wykorzystujących w 100% możliwości hardware"u.
Książka "Asembler dla procesorów Intel. Vademecum profesjonalisty" to kompletny przewodnik po języku programowania najpopularniejszej rodziny procesorów. Możesz ją traktować jako podręcznik asemblera lub jako kompendium wiedzy, do którego zawsze będziesz mógł się odwołać, gdy zajdzie taka potrzeba. Znajdziesz w niej informacje dotyczące:
* architektury mikroprocesorów i zestawu rozkazów procesorów z rodziny Intel 80x86
* dyrektyw, makr i operatorów języka asembler oraz podstawowej struktury programu
* metodologii programowania oraz sposobów użycia języka asembler do tworzenia narzędzi systemowych i aplikacji
* sposobów pracy z urządzeniami sprzętowymi
* interakcji między programem napisanym w języku asembler, systemem operacyjnym a innymi aplikacjami
* śledzenia przebiegu wykonania programu za pomocą debugera
Oprócz krótkich przykładów książka "Asembler dla procesorów Intel. Vademecum profesjonalisty" zawiera 75 gotowych do uruchomienia programów, które realizują koncepcje prezentowane w tekście. Znajdujące się na końcu książki dodatki stanowią przewodniki po przerwaniach MS-DOS i mnemonikach kodu maszynowego.
Profesjonalne programowanie. Część 1. Zrozumieć komputerWydawnictwo Helion
Chcesz zostać programistą doskonałym?
Zacznij od poznania szczegółów działania komputera
* Zapis wartości liczbowych oraz arytmetyka zmiennoprzecinkowa i binarna
* Organizacja dostępu do pamięci komputera
* Proces wykonywania programu oraz operacje wejścia i wyjścia
Kod napisany przez profesjonalnego programistę jest wydajny i efektywny. Aby tworzyć wydajny kod, należy poznać architekturę komputera i sposób, w jaki program jest wykonywany. Zrozumienie tego, w jaki sposób komputer realizuje kolejne instrukcje programu i jak słowa kluczowe języków wysokiego poziomu są przenoszone na rozkazy procesora, jest kluczem do napisania kodu, który po skompilowaniu da szybko i bezbłędnie działający program.
"Profesjonalne programowanie. Część 1. Zrozumieć komputer" to pierwszy tom serii książek przeznaczonych dla tych programistów, którzy chcą podnieść swoje kwalifikacje. Przedstawia wewnętrzną architekturę komputera od strony, której znajomość jest niezbędna programiście. Opisuje sposoby zapisu wartości liczbowych i tekstów, działania na liczbach binarnych i zmiennoprzecinkowych oraz logikę Boole’a. Czytając tę książkę, dowiesz się, w jaki sposób procesor przetwarza rozkazy asemblera, jak odbywa się dostęp do danych zapisanych w pamięci oraz jak przesyłane są dane do i z urządzeń zewnętrznych.
* Zapis liczb w systemie binarnym, ósemkowym i szesnastkowym
* Działania na liczbach binarnych i zmiennoprzecinkowych
* Sposoby reprezentacji danych znakowych
* Organizacja pamięci i tryby adresowania
* Złożone typy danych
* Projektowanie układów cyfrowych i logika Boole’a
* Architektura procesora i rozkazy asemblera
* Operacje wejścia i wyjścia
Jeśli chcesz, aby napisane przez Ciebie oprogramowanie budziło podziw, koniecznie przeczytaj tę książkę.
Teoria i praktyka prowadzenia projektów programistycznych
* Naucz się zasad programowania ekstremalnego i zastosuj je w praktyce
* Od konceptualizacji do przekazania działającego systemu -- poznaj najlepsze sposoby pracy na każdym etapie tworzenia oprogramowania
* Poznaj znaczenie wszystkich uczestników procesu tworzenia oprogramowania: programistów, menedżerów i klientów
* Dowiedz się, jak rozwiązać najczęstsze problemy powstające przy wdrażaniu metodologii programowania ekstemalnego
"eXtreme programming" przedstawia nową metodologię i praktykę programowania w przystępny, a jednocześnie kompleksowy sposób. Autorzy omawiają podstawowe pojęcia programowania ekstremalnego: planowanie edycji, programowanie w parach, wczesne testowanie, "zręczne modelowanie" i refaktoryzację. Zostały one zaprezentowane na przykładzie konkretnego projektu, którego realizację omówiono w książce.
Kto powinien przeczytać tę książkę? Będzie ona niewątpliwie pożyteczną lekturą dla każdego, kto choć częściowo związał swe życie z tworzeniem oprogramowania -- programisty, menedżera czy koordynatora projektu. I nawet gdyby miało skończyć się tylko na czytaniu -- bez praktycznego zastosowania w najbliższym projekcie poznanych reguł, wiedza o programowaniu ekstremalnym okaże się bez wątpienia pożyteczna.
* Naucz się zasad programowania ekstremalnego i zastosuj je w praktyce
* Od konceptualizacji do oddania działającego systemu -- poznaj najlepsze sposoby pracy na każdym etapie tworzenia programowania
* Poznaj znaczenie wszystkich uczestników procesu tworzenia oprogramowania: programistów, menedżerów i klientów
* Dowiedz się, jak rozwiązać najczęstsze problemy powstające przy wdrażaniu metodologii programowania ekstemalnego
Przysłowie "kto pyta, nie błądzi" nie zawiera całej prawdy. Nie wystarczy pytać, trzeba jeszcze znajdować odpowiedzi. Książka "Programowanie w języku C. FAQ" to zbiór kilkuset odpowiedzi na najczęściej zadawane pytania na temat tego języka programowania. Z pewnością część z przedstawionych tu pytań już pojawiła się w Twojej praktyce programistycznej (pamiętasz, ile czasu straciłeś poszukując odpowiedzi?). Inne problemy dopiero się pojawią i jeśli na Twojej półce będzie ta książka, szybko znajdziesz w niej zwięzłe, ale wyczerpujące rozwiązanie często wzbogacone przykładem kodu źródłowego.
Chociaż książka żadną miarą nie powinna być traktowana jako podręcznik, z którego można nauczyć się programowania w C, z pewnością przyda się każdej osobie używającej tego języka w codziennej praktyce. Autor porusza wiele przydatnych zagadnień obejmujących szeroki zestaw tematów.
Omówiono między innymi:
* Deklaracje
* Struktury i unie
* Puste wskaźniki
* Wyrażenia
* Makroprocesor
* Alokację pamięci
* Różnice między standardami C
* Standardową bibliotekę wejścia-wyjścia
* Kwestie związane z systemami operacyjnymi
Modelowanie danych to umiejętność stosunkowo rzadko poszukiwana na rynku. Firmy chętniej zatrudniają programistów i administratorów baz danych. Jednak zaprojektowanie efektywnych mechanizmów przechowywania danych ma duże znaczenie przy tworzeniu korporacyjnych aplikacji bazodanowych. Dopiero w sytuacji, gdy systemy zaczynają działać niewłaściwie, okazuje się, że przyczyną jest niepoprawny projekt bazy danych. Odpowiednio przeprowadzony proces modelowania danych może ułatwić rozwiązywanie problemów z aplikacją.
Książka "Modelowanie danych" to wyczerpujące omówienie tego procesu i niezbędne źródło wiedzy dla każdego projektanta baz danych, który chce opracować wydajny i niezawodny system. Przedstawia modelowanie oparte na modelu relacyjnym, jego matematyczne podstawy i praktyczne wdrożenia. Czytając tę książkę, poznasz różne typy modeli. Dowiesz się, jaki poziom szczegółowości reprezentuje każdy z nich i jak je zaimplementować w konkretnych projektach informatycznych.
W książce omówiono także:
* Cykl istnienia danych
* Podstawowe pojęcia modelowania relacyjnego
* Reguły Codda dotyczące relacyjnych baz danych
* Normalizacja danych
* Analiza logiczna i fizyczna
* Modelowanie procesów biznesowych
* Tworzenie modelu logicznego
* Przekształcanie modelu logicznego w fizyczny
* Stosowanie metadanych
* Praktyki modelowania danych
Dzięki wiadomościom z tej książki staniesz się specjalistą w zakresie modelowania danych.
SQL jest uznawanym za standard językiem programowania służącym do tworzenia, modyfikowania oraz pobierania informacji przechowywanych przez systemy zarządzania relacyjnymi bazami danych. Chociaż każdy system bazodanowy używa nieco innego dialektu tego języka, często rozbudowując go o dodatkowe funkcje, podstawowe instrukcje SQL są wspólne dla wszystkich systemów: od Accessa do Oracle'a.
Bogata w ilustracje, napisana przystępnym językiem książka "SQL. Szybki start" pozwoli Ci nauczyć się SQL-a i zacząć pracę z relacyjną bazą danych, niezależnie od tego, który system wybierzesz. Autor kładzie szczególny nacisk na realizację konkretnych zadań, przedstawiając kolejne kroki, jakie należy wykonać, by rozwiązać dany problem. Dzięki temu książka jest nie tylko przewodnikiem po języku SQL i jego odmianach, ale także doskonałą pomocą, po którą będziesz często sięgał w swojej praktyce programistycznej.
W książce omówiono m.in.:
* Najpopularniejsze systemy bazodanowe, ich wady i zalety
* Relacyjny model danych
* Podstawy języka SQL: składnię i najważniejsze typy danych
* Pobieranie danych za pomocą zapytań
* Operatory i funkcje SQL
* Filtrowanie, grupowanie i sortowanie wyników zapytań
* Dodawanie, usuwanie i modyfikowanie danych
* Korzystanie z indeksów
* Używanie perspektyw
* Stosowanie transakcji
Matlab to środowisko służące do przeprowadzania obliczeń numerycznych i rozwiązywania złożonych zagadnień matematycznych. Wydajne i szybkie algorytmy oraz doskonałe mechanizmy analityczne czynią z niego doskonałe narzędzia zarówno dla matematyka, jak i dla ekonomisty lub genetyka. Język programowania Matlaba umożliwia tworzenie własnych aplikacji, a ogromna ilość bibliotek zewnętrznych ułatwia zastosowanie tych aplikacji do różnych celów. Matlab to dziś standard w laboratoriach badawczych. Coraz częściej wykorzystuje się go również na uczelniach -- na niektórych jest nawet elementem programu zajęć. Oczywiście nic nie stoi na przeszkodzie, aby jego możliwości wykorzystywać również podczas nauki matematyki w szkole.
Książka "Matlab. Ćwiczenia" to zbiór praktycznych ćwiczeń, dzięki którym poznasz możliwości Matlaba i zasady korzystania z niego. W książce opisane jest tworzenie programów, wykorzystywanie Matlaba do obliczeń matematycznych – zarówno podstawowych jak i tych najbardziej skomplikowanych oraz tworzenie graficznej reprezentacji wyników obliczeń.
* Środowisko Matlaba
* Zasady programowania w Matlabie
* Funkcje matematyczne
* Operacje na macierzach
* Wyznaczanie pochodnych i całek
* Sterowanie przebiegiem programu
* Tworzenie różnych typów wykresów
Przekonaj się, jak bardzo możesz przyspieszyć swoją pracę korzystając z odpowiedniego narzędzia obliczeniowego.
Wykorzystaj pełnię możliwości baz danych
* Na czym polega model relacyjny?
* W jaki sposób pobierać dane z bazy?
* Jak projektować bazy danych i tabele?
Systemy zarządzania bazami danych to aplikacje, które spotkać można praktycznie w każdej firmie.
Na rynku dostępnych jest wiele takich narzędzi, różniących się od siebie wydajnością, wymaganiami sprzętowymi, potencjalnymi zastosowaniami i - przede wszystkim — ceną. Użytkownicy mogą wybierać zarówno wśród rozwiązań komercyjnych, jak i nieustępujących im rozwiązań bezpłatnych. Cechą łączącą wszystkie systemy zarządzania bazami danych jest język, na którym opiera się praca z nimi - SQL. To ustandaryzowany zbiór poleceń pozwalających na niemal dowolne manipulacje danymi zgromadzonymi w bazach, tworzenie nowych baz oraz administrowanie serwerami baz danych. Bez jego znajomości wykorzystanie pełni możliwości bazy danych jest praktycznie niemożliwe.
„Praktyczny kurs SQL” to książka, dzięki której poznasz ten język. Czytając ją, dowiesz się, czym jest relacyjność w bazach danych, jak skonstruowane są takie bazy i czym są postaci normalne. Nauczysz się pobierać dane w oparciu o różne kryteria, przetwarzać uzyskane wyniki i wyświetlać je na ekranie w odpowiedni sposób. Poznasz funkcje pozwalające na modyfikację istniejących i dodawanie nowych danych, zastosujesz zapytania złożone i podzapytania oraz wykorzystasz mechanizmy transakcji. Przeczytasz także o projektowaniu baz danych oraz definiowaniu i nadawaniu uprawnień do korzystania z nich.
* Modele baz danych
* Postaci normalne w modelu relacyjnym
* Historia języka SQL
* Pobieranie danych za pomocą instrukcji SELECT
* Dobór kryteriów wybierania
* Przetwarzanie wyników zapytań
* Zapytania złożone i podzapytania
* Transakcje
* Modyfikowanie i dodawanie danych
* Projektowanie baz danych
* Uprawnienia
Uzupełnieniem do książki jest udostępniona tutaj baza danych.
Poznaj w praktyce język będący podstawą wszystkich nowoczesnych systemów zarządzania bazami danych.
Doskonały przewodnik po najnowszej wersji języka PHP
dla twórców dynamicznych serwisów WWW
Książka "PHP. Programowanie. Wydanie III" to kolejne wydanie praktycznego przewodnika dla programistów stron internetowych. Jeden z najlepszych programistów PHP -- Leon Atkinson, uczy wszystkiego, co potrzebujesz, by stworzyć dobrą i szybką aplikację sieciową. Dokładnie opisuje składnię PHP i kluczowe elementy języka. Atkinson przedstawia także najważniejsze funkcje PHP, w tym funkcje wejścia-wyjścia, przetwarzania danych, matematyczne, daty, czasu, konfiguracji, funkcje umożliwiające współpracę z bazami danych, funkcje graficzne i sieciowe. Prezentuje on również działanie PHP na przykładach realizujących sortowanie, przeszukiwanie, analizę łańcuchów i inne zadania.
Książka składa się z czterech części:
* wstępu do programowania,
* przewodnika po wszystkich funkcjach,
* przeglądu typowych problemów programistycznych
* części umożliwiającej zastosowanie zdobytej wiedzy przy tworzeniu witryn.
Pierwsza część zajmuje się kwestiami dotyczącymi wszystkich języków programowania: jak wygląda skrypt PHP, jak sterować przebiegiem programu i jak zarządzać danymi.
Część druga organizuje funkcje według ich zastosowania i zawiera przykłady ich zastosowania. PHP udostępnia bardzo dużo funkcji, dlatego część ta jest najobszerniejsza.
Część trzecia zajmuje się rozwiązywaniem typowych problemów programistycznych, takich jak sortowanie czy generowanie grafiki.
Ostatnia część udziela porad dotyczących tworzenia całych witryn sieciowych za pomocą PHP.
* Poznaj wzorce projektowe w PHP, techniki programowania obiektowego i możliwości wykorzystania języka XML
* Wykorzystaj nowe funkcje i możliwości PHP 5
* Napisz wydajne aplikacje internetowe, wykorzystując najlepsze praktyki inżynierii oprogramowania
Similar to Projektowanie i analiza algorytmów (20)
Windows Movie Maker dołączany do systemu Windows XP to doskonałe narzędzie do domowego montażu cyfrowych filmów wideo. Jest prosty w obsłudze, posiada spore możliwości, a montaż filmów za jego pomocą jest przyjemną zabawą. Movie Maker pozwala na przeniesienie klipów z kamery cyfrowej, zaimportowanie materiałów z dysku, rozmieszczenie ujęć i połączenie ich przejściami, a także udźwiękowienie i dodanie efektów specjalnych. Gotowy film można wysłać pocztą elektroniczną, zapisać na dysku lub płycie CD albo opublikować w internecie.
Książka "Tworzenie filmów w Windows XP. Projekty" przedstawia proces tworzenia filmu wideo. Opisuje kolejne kroki prowadzące do zmontowania cyfrowego filmu wideo z przechwyconych ujęć i zaimportowanych materiałów. Nie znajdziesz w niej jednak długich opisów i dziesiątek parametrów. Każde zagadnienie jest przedstawione za pomocą zrzutów ekranu i krótkich instrukcji. Dzięki temu w ciągu kilku godzin zrealizujesz swój pierwszy projekt w Movie Makerze.
* Elementy interfejsu użytkownika
* Przechwytywanie klipów z kamery wideo
* Import materiałów źródłowych
* Tworzenie wstępnego montażu
* Dodawanie przejść i efektów specjalnych
* Nakładanie plansz tytułowych i napisów
* Udźwiękowienie filmu
* Korzystanie z funkcji Autofilm
* Eksport zmontowanego filmu
Przekonaj się, jak proste może być tworzenie własnych filmów wideo.
Przedstaw się światu!
* Jak zbudować elegancką stronę z blogiem?
* Jak tworzyć wyspecjalizowane przeglądarki bloga?
* Jak dodawać do własnego serwisu blogowego kanał RSS?
Prowadzenie bloga to nowy sposób na zwiększenie aktywności społecznej - szansa na zaistnienie w rzeczywistości wirtualnej, mająca swoje odbicie w tak zwanym „prawdziwym życiu”. Dlatego blogi piszą dziś niemal wszyscy: politycy, marketingowcy, celebryci, biznesmeni. Forma publicznie dostępnego pamiętnika pozwala na szeroką prezentację własnych poglądów, przekonań czy wartości. Z tego powodu blogi wykorzystywane są też jako wortale poświęcone określonej tematyce, promujące idee lub produkty. Ich użytkownicy stworzyli nawet własną społeczność, która 31 sierpnia obchodzi swoje święto - Dzień Bloga. Już dziś możesz do nich dołączyć!
„Blog, więcej niż internetowy pamiętnik” to książka, która pokaże Ci, jak założyć i prowadzić własny blog, a także aktywnie korzystać z innych blogów. Dowiesz się z niej, jak skorzystać z oprogramowania obsługującego serwisy blogowe, jak zintegrować języki PHP, HTML, CSS i SQL, aby stworzyć elegancką stronę prezentującą Twój blog. Nauczysz się budować własną bazę danych, przeznaczoną do przechowywania wpisów, a także zabezpieczać ją przed niepowołanymi modyfikacjami. I wreszcie poznasz sposób na dodanie do własnego serwisu kanału RSS, aby czytelnicy na bieżąco mogli obserwować pojawianie się nowych wpisów. Znajdziesz tu wszystko, czego potrzebujesz, aby zaprezentować światu swój blog!
* Obsługa okna tworzenia bloga
* Modyfikowanie wyglądu bloga
* Publikowanie w określonym terminie
* Rozbudowa bloga
* Instalacja czytnika RSS
* Subskrybowanie blogów za pomocą RSS
* Instalacja oprogramowania własnego serwera
* Baza danych i modyfikacja danych
* Projektowanie struktury bloga
* Zakładanie konta użytkownika
* Zakładanie bazy danych i tabeli danych
* Nadawanie uprawnień do korzystania z tabeli
* Przygotowanie szablonu i tworzenie strony www
* Automatyzowanie, blokowanie i trwałe usuwanie wpisu
* Tworzenie formularza wyszukiwania
* Tworzenie kanału RSS i wypełnianie go treścią
* Pobieranie programu Weber
Blog to prosty i fascynujący sposób, aby świat dowiedział się o Twoim istnieniu!
Pakiet biurowy MS Office jest jednym z podstawowych narzędzi wykorzystywanych we współczesnych firmach. Zawarty w nim system zarządzania bazami danych Access to wygodna w obsłudze aplikacja służąca do operowania na zbiorach danych. Dzięki prostocie obsługi, sporym możliwościom i wizualnym narzędziom stanowi doskonałe rozwiązanie dla przedsiębiorstw, w których duże znaczenie ma czas poświęcany na opanowanie nowych programów. Kreatory i rozbudowany system pomocy oferowane przez Accessa niezwykle upraszczają proces tworzenia bazy oraz aplikacji przeznaczonych do obsługi zgromadzonych w niej danych.
W książce "Access w biurze i nie tylko" znajdziesz omówienie podstawowych możliwości tego systemu. Nauczysz się tworzyć i otwierać istniejące bazy danych oraz tworzyć nowe. Dowiesz się, w jaki sposób projektować tabele i jak dobierać typy danych dla poszczególnych kolumn tabeli. Przeczytasz o relacjach, poznasz sposoby wybierania i wstawiania danych, a także manipulowania nimi za pomocą kwerend. W kolejnych rozdziałach znajdziesz informacje o tworzeniu formularzy i raportów oraz wyświetlaniu wykresów na podstawie danych zgromadzonych w bazie. Nauczysz się także pisać własne makra i poznasz podstawy języka Visual Basic for Applications.
* Otwieranie istniejących baz danych
* Tworzenie tabel
* Typy danych
* Tworzenie i modyfikowanie relacji
* Manipulowanie danymi za pomocą kwerend
* Konstruowanie formularzy
* Budowanie raportów
* Automatyzacja pracy za pomocą makropoleceń
* Tworzenie i wyświetlanie wykresów
Dane to dziś najcenniejszy towar. Naucz się nim zarządzać.
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczneWydawnictwo Helion
Zapewnij swojej witrynie miejsce w pierwszej dziesiątce!
* Jak działają wyszukiwarki?
* Jaki wpływ na pozycję serwisu mają linki przychodzące i wychodzące?
* Czy istnieją zagrożenia związane z niewłaściwym pozycjonowaniem?
Stworzenie serwisu WWW to dopiero połowa sukcesu w Internecie. Druga połowa to zapewnienie witrynie odpowiedniej popularności. A tę popularność może zagwarantować przede wszystkim wysokie miejsce w wynikach wyszukiwarek. Jak to osiągnąć? Od czego zacząć i jak monitorować skuteczność prowadzonych działań? Wszystkie odpowiedzi znajdziesz właśnie w tej książce!
Poprzez liczne przykłady i ćwiczenia autorzy zapoznają Cię ze sposobem działania wyszukiwarki Google i zasadami doboru właściwych słów kluczowych. Pokażą, jak najlepiej rozmieścić je na stronie. Ponadto dowiesz się, jaki wpływ na pozycję strony mają linki wychodzące oraz przychodzące, jak przebiega proces indeksowania strony, jak działają systemy wymiany linków oraz jak wykorzystać statystyki do obserwacji ruchu na stronie. Przeczytasz także o tym, jakie zagrożenia niesie ze sobą niewłaściwa procedura pozycjonowania.
* Sposób działania Google oraz innych wyszukiwarek
* Definiowanie fraz i słów kluczowych
* Wpływ linków przychodzących i wychodzących na pozycję strony
* Korzystanie z systemów wymiany linków
* Proces indeksacji witryny
* Zagrożenia związane z niewłaściwym pozycjonowaniem
* Wykorzystanie statystyk do śledzenia ruchu na stronie
* Sposoby reklamowania serwisu
Zwiększ oglądalność swojej witryny WWW!
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieWydawnictwo Helion
Lustereczko, powiedz przecie,
kto jest najwspanialszy w necie?
* Tworzenie i wykorzystywanie odpowiedniego wizerunku oraz zarabianie na nim
* Budowanie pożądanych marek bez wielkich nakładów finansowych
* Interaktywne relacje z klientami
* Wykorzystanie Internetu do rozwoju biznesu
* Narzędzia kreowania wizerunku w sieci
Jak Cię widzą (w sieci), tak Cię piszą
Internet jest nie tylko rewolucyjnym medium, pierwszym o naprawdę masowym zasięgu działania. Stanowi on przede wszystkim fascynujący alternatywny świat. Działa jak magnes, co roku przyciągając nowych użytkowników. Niczym używka, wciąż odnotowuje wydłużenie czasu kontaktu z odbiorcą. I last but not least — Internet to niekończący się pasaż handlowy, wymarzone miejsce spotkań podaży i popytu.
Poznaj specyfikę światowej sieci WWW i znajdź w niej właściwe miejsce dla Twojej marki. E-marketing rządzi się własnymi prawami — z jednej strony bezustannie stawia firmy przed nowymi wyzwaniami, z drugiej zaś stale kreuje nowe narzędzia dotarcia do klienta. A są one naprawdę fascynujące: możliwość dowolnej personalizacji przekazu, olbrzymia ilość kanałów, a przede wszystkim atrakcyjne społeczności — ludzie młodzi, aktywni, hobbyści, biznesmeni oraz entuzjaści nowinek. Mogą oni zostać ambasadorami Twojej marki, ale mogą też ją zniszczyć. Dlatego musisz poznać zasady rządzące Internetem i jego społecznościami, a następnie zacząć budować instrumenty wywierania wpływu i wykorzystać je dla dobra Twojego produktu.
Internet ma przyszłość!
* Czym jest e-wizerunek i jak wpływa na sukces firm, produktów i ludzi?
* Narzędzia budowania image’u — strona WWW, fora internetowe, newslettery i inne.
* Sześć zasad skutecznego kreowania e-wizerunku.
* Grzechy główne działań internetowych.
* Marka jako efekt przemyślanej strategii wizerunkowej.
* Case studies
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsWydawnictwo Helion
Rozpocznij przygodę z Visual C++!
* Jakie prawa rządzą programowaniem obiektowym?
* Jak tworzyć usługi systemowe?
* Jak dokumentować tworzony kod?
Microsoft Visual C++ jest zintegrowanym środowiskiem, pozwalającym na tworzenie aplikacji przy użyciu języków C, C++ lub C++/CLI. Zawiera ono wyspecjalizowane narzędzia, pomagające w wydajnym tworzeniu rozwiązań opartych o te języki. Pierwsza wersja Visual C++ została wydana w 1992 roku, a środowisko to jest bezustannie ulepszane. Najnowsze wydanie, z datą 2008, zostało opublikowane w listopadzie 2007 roku i wprowadziło wiele nowości — jak chociażby wsparcie dla technologii .NET 3.5. Niewątpliwie narzędzie firmowane przez giganta z Redmond jest jednym z najpopularniejszych, a używają go programiści z całego świata.
Dzięki tej książce również Ty możesz dołączyć do tego wybitnego grona. Po jej przeczytaniu będziesz miał wiedzę na temat środowiska programistycznego i platformy .NET. Poznasz podstawy programowania obiektowego, nauczysz się uzyskiwać dostęp do informacji zgromadzonych w bazach danych oraz korzystać z możliwości Internetu bezpośrednio w Twoich programach. Kolejne rozdziały przedstawiają interesujące tematy dotyczące obsługi wyjątków, programów wielowątkowych oraz sposobów tworzenia usług systemowych. Ostatni rozdział poświęcony został tak istotnej kwestii, jak dokumentowanie kodu — to czynność, o której wielu programistów zapomina. Jeżeli chcesz rozpocząć przygodę z Microsoft Visual C++, ta książka jest idealną lekturą dla Ciebie!
* Praca w zintegrowanym środowisku programistycznym
* Pojęcia związane z programowaniem obiektowym
* Uzyskiwanie dostępu do informacji zgromadzonych w bazach danych
* Wykorzystanie transakcji w pracy z danymi
* Sposoby integracji z siecią Internet
* Obsługa wyjątków
* Programowanie wielowątkowe
* Tworzenie grafiki oraz wykorzystanie multimediów
* Drukowanie w systemie Windows
* Tworzenie usług systemowych
* Dokumentowanie kodu programu
Wykorzystaj możliwości Microsoft Visual C++ 2008!
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IIWydawnictwo Helion
Poznaj możliwości iPhone’a!
* Jak rozpocząć pracę z iPhone’em?
* Jak wykorzystać możliwości przeglądarki Safari?
* Jak używać map?
Pojawienie się iPhone’a firmy Apple można bez wahania nazwać Rewolucją! Rewolucją przez duże "R". Nigdy wcześniej żaden nowy telefon nie wzbudził takich emocji. Nigdy wcześniej nie ustawiały się na wiele dni przed premierą kolejki pod salonami. Co sprawia, że ludzie szaleją za tym małym cudem techniki? Wielodotykowy (ang. multitouch) ekran, dostęp do tysięcy aplikacji, stabilny system operacyjny oraz elegancki, przykuwający uwagę wygląd to tylko niektóre z jego zalet.
Właśnie dzięki tej książce dowiesz się, co tak naprawdę potrafi Twój iPhone. Autor — niezawodny Scott Kelby — bez zbędnego zagłębiania się w szczegóły techniczne opowie Ci o możliwościach tego rewolucyjnego urządzenia. Zaprezentuje Ci m.in. sposoby wykonywania różnych operacji przy użyciu tego telefonu. Poznasz tajniki jego konfiguracji i synchronizacji z komputerem oraz metodę sprawdzania poziomu naładowania baterii. Nauczysz się wykorzystywać wszystkie możliwości przeglądarki Safari, czytnika poczty oraz terminarza. Dowiesz się również, jak odtwarzać klipy z YouTube, słuchać muzyki czy oglądać filmy. Książka ta jest zatem świetną pozycją zarówno dla początkującego użytkownika telefonu iPhone, jak również dla zaawansowanego — ten ostatni znajdzie tu informacje, które go zaskoczą i zachwycą! W końcu iPhone to zdolna i piękna bestia…
* Włączanie, usypianie, wyłączanie iPhone’a
* Wykorzystanie wbudowanego głośnika
* Obsługa ekranu
* Importowanie kontaktów
* Dodawanie numerów
* Połączenia konferencyjne
* Wyciszanie dzwonka
* Odbieranie i wysyłanie wiadomości e-mail
* Obsługa przeglądarki Safari
* Wykorzystanie kalendarza
* Odtwarzanie klipów z YouTube
* Używanie mapy
* Sprawdzanie prognozy pogody
* Importowanie i odtwarzanie muzyki
* Wykonywanie zdjęć
* Rozwiązywanie typowych problemów
Sprawdź, co potrafi Twój iPhone!
Uwiecznij świat, jakiego nie znałeś!
* Jaki sprzęt jest potrzebny do makrofotografii?
* Jak uzyskać duże powiększenia?
* Jak komponować efektowne zdjęcia?
Wiele osób nie zwraca uwagi na niepozorne, małe elementy otaczającego nas świata. Czyż nie warto pokazać im, co tracą? Wykonanie dobrego zdjęcia w skali makro to wyzwanie, ale zachwyt na twarzach oglądających jest wart wszelkich poświęceń. Właśnie dzięki makrofotografii można ujrzeć cudowny świat, niezauważalny na co dzień. Magiczny świat szczegółów!
Autor książki "Makrofotografia. Magia szczegółu " przedstawia ten temat w sposób przejrzysty i systematyczny. Dzięki tej publikacji zdobędziesz informacje dotyczące sprzętu potrzebnego do wykonania makrofotografii oraz sposobu kompozycji zdjęcia. Poznasz zagadnienia związane z właściwym doborem ostrości, a także takie pojęcia, jak głębia ostrości, długość ogniskowej, jasność obiektywu i wiele innych. Pozwolą Ci one na swobodne poruszanie się po świecie makrofotografii. Ponadto poszerzysz swoją wiedzę odnośnie doboru właściwego oświetlenia oraz programów odpowiednich do obróbki wykonanych zdjęć. Niewątpliwym atutem tej książki są pytania i zadania kontrolne, które pozwolą Ci zweryfikować zdobyte umiejętności. Jeżeli chcesz uwiecznić otoczenie w makrofotografii, ta pozycja będzie dla Ciebie nieocenionym źródłem informacji, a może nawet twórczej inspiracji!
* Sprzęt konieczny do wykonania makrofotografii
* Sposoby na uzyskanie dużych powiększeń
* Komponowanie zdjęć
* Zasady doboru kadru
* Uzyskiwanie właściwej ostrości
* Ograniczenia ostrości
* Dobór właściwego oświetlenia
* Metody pomiaru światła
* Doświetlanie zdjęć
* Narzędzia do edycji zdjęć
Odsłoń na fotografiach całe piękno szczegółu!
Naucz się korzystać z nowoczesnych narzędzi PowerShella
i usprawniaj żmudne zadania administracyjne!
* Jak skonfigurować środowisko PowerShella?
* Jak tworzyć aplety poleceń i jak ich używać?
* Jak korzystać z potoku danych?
Windows PowerShell to innowacyjne narzędzie do zarządzania systemem i przetwarzania skryptów dla serwerów oraz klientów pod kontrolą Windows. Charakterystyczną cechą tego interpretera poleceń jest obiektowa logika, która sprawia, że wynikiem każdego polecenia jest obiekt określonego typu. Dodatkowo wszystkie funkcje dostępne przez API systemu są możliwe do wywołania z poziomu PowerShella. Dzięki swojej uniwersalności oraz nowoczesnym narzędziom interpreter ten zapewnia spójny oraz jasny mechanizm zarządzania, oparty na wierszu poleceń i niewymagający od użytkownika dużej wiedzy programistycznej.
Książka "Windows PowerShell. Podstawy" zawiera dokładny opis innowacyjnej architektury PowerShella, zasad pisania skryptów oraz możliwości korzystania z podstawowych interfejsów systemowych: COM, WMI, ADSI i ADO.NET, a także obszerny zbiór opisów rozwiązań konkretnych zadań administracyjnych. Korzystając z tego przewodnika, poznasz funkcje i narzędzia PowerShella. Nauczysz się również korzystać z obiektowego potoku danych i zarządzać procesami, dziennikami zdarzeń oraz wpisami rejestru. Dzięki zawartej tu wiedzy z pewnością usprawnisz i zautomatyzujesz wszelkie czasochłonne zadania administracyjne, by móc swobodnie stosować PowerShell jako podstawową konsolę do codziennej pracy.
* Aplety poleceń
* Przetwarzanie potokowe
* Potoki danych
* Uniwersalny model nawigacji
* Definiowanie dysków
* Język skryptów PowerShella
* Tablice asocjacyjne
* Praca ze skryptami
* Różnicowanie reakcji na błędy
* Biblioteki klas
* Narzędzia PowerShella
* Zarządzanie użytkownikami i grupami w Active Directory
* Bazy danych
* Zaawansowane operacje dostępu do danych
PowerShell skróci czas Twojej pracy!
Poznaj specyfikę języka Java i zostań mistrzem programowania
* Jak korzystać z bibliotek języka Java?
* Jak pisać funkcjonalny i klarowny kod?
* Jak stworzyć profesjonalny i efektowny program?
Język Java jest językiem obiektowym z dziedziczeniem jednobazowym. Wewnątrz każdej metody korzysta on ze zorientowanego na instrukcje stylu kodowania. Aby dobrze poznać jakikolwiek język, należy nauczyć się posługiwać jego regułami, zasadami i składnią — podobnie jest z językiem programowania. Jeśli chcesz zyskać możliwość efektywnego programowania w języku Java, powinieneś poznać struktury danych, operacje i udogodnienia, oferowane przez biblioteki standardowe, a także często stosowane i efektywne sposoby tworzenia kodu. Całą potrzebną Ci wiedzę znajdziesz właśnie w tym podręczniku.
W książce „Java. Efektywne programowanie” w sposób zrozumiały i klarowny przedstawiono zasady opisujące mechanizmy używane w najlepszych technikach programowania. Ten podręcznik podpowie Ci, jak najbardziej racjonalnie korzystać z języka Java oraz jego podstawowych bibliotek. Dowiesz się, jak stosować wyjątki przechwytywalne i wyjątki czasu wykonania, poznasz także zalety stosowania statycznych klas składowych. Opanujesz metody sprawdzania poprawności parametrów i projektowania sygnatur oraz wszelkie instrukcje, które pozwolą Ci na wydajne i profesjonalne programowanie.
* Tworzenie i usuwanie obiektów
* Klasy i interfejsy
* Zapewnianie niezmienności obiektu
* Projektowanie i dokumentowanie klas przeznaczonych do dziedziczenia
* Zalety stosowania statycznych klas składowych
* Typy ogólne
* Typy wyliczeniowe i adnotacje
* Metody
* Programowanie
* Wykorzystanie ogólnie przyjętych konwencji nazewnictwa
* Wyjątki
* Współbieżność i serializacja
* Dokumentowanie bezpieczeństwa dla wątków
Nie wystarczy samo poznanie języka Java. Trzeba wiedzieć, jak z niego efektywnie korzystać!
Rozpocznij swoją przygodę z JavaScript!
* Jak rozpocząć przygodę z JavaScript?
* Jakie obiekty dostarcza JavaScript?
* Jak reagować na błędy?
Język JavaScript, choć ma już blisko dwanaście lat, swoimi możliwościami wciąż potrafi zafascynować niejednego projektanta stron internetowych. Ma już za sobą gorsze dni, jednak aktualnie dzięki technologii AJAX znów jest na topie. Wykorzystując go w odpowiedni sposób, sprawisz, że twój serwis WWW stanie się bardziej interaktywny i dynamiczny.
Ta książka pozwoli Ci wyjść zwycięsko z pierwszego starcia z tym językiem! Dowiesz się z niej, jak używać zmiennych, operatorów oraz funkcji. Nauczysz się reagować na zdarzenia oraz wykorzystywać okna dialogowe. Ponadto zdobędziesz wiedzę na temat pracy z obiektami DOM HTML oraz na temat sposobów reagowania na błędy w skryptach. Autor przedstawia tu także dostępne obiekty JavaScript oraz pokazuje, jak wykonywać operacje związane z czasem. Ogromnym atutem tej książki jest przejrzystość i usystematyzowany sposób prezentowania informacji. Dzięki temu również Ty szybko i bezboleśnie poznasz JavaScript!
* Typowe konstrukcje języka JavaScript
* Wykorzystanie zmiennych
* Zastosowanie funkcji
* Reagowanie na zdarzenia
* Sposoby użycia okien dialogowych
* Wykonywanie operacji związanych z czasem
* Dostępne obiekty JavaScript
* Obiekty DOM HTML
* Przygotowanie własnych obiektów
* Dziedziczenie w JavaScript
* Obsługa błędów
Przejdź bezboleśnie pierwsze starcie z JavaScript!
Naucz się łączyć największe zalety języków oraz technik programowania
i twórz interaktywne strony internetowe
* Jak unikać typowych błędów i sprawnie rozwiązywać problemy programistyczne?
* Jak połączyć zalety HTML, XML i PHP dla uzyskania pożądanych efektów?
* Jak tworzyć aplikacje wyposażone w aktywny interfejs użytkownika?
Statyczne strony WWW to dziś już przeszłość. Powszechnie dostępne narzędzia dają programistom prawie nieograniczone możliwości w zakresie tworzenia interaktywnych witryn internetowych, wzbogaconych o najróżniejsze efekty wizualne, animacje oraz wbudowane narzędzia pomocnicze. Największą popularność zdobyły sobie narzędzia z kategorii open source — z powodu ich minimalnego kosztu oraz niezwykle dużych zasobów, dostępnych za pośrednictwem Internetu. Z tej książki dowiesz się, jak tworzyć bogate i interaktywne strony WWW, łącząc rozmaite techniki i korzystając z różnych języków.
Książka "Ajax, JavaScript i PHP. Intensywny trening" poprowadzi Cię krok po kroku po podstawowych zasadach programowania w językach JavaScript, PHP i HTML oraz technologiach programowania. Dzięki temu podręcznikowi dowiesz się m.in., jak wykorzystywać dostępne biblioteki ajaksowe do implementowania i ulepszania podstawowych mechanizmów aplikacji. Szybko nauczysz się tworzyć interaktywne strony WWW, zarówno za pomocą technologii serwerowych, jak i technik oraz narzędzi umiejscowionych po stronie klienckiej, a także ich kombinacji.
* Tworzenie stron WWW w języku HTML
* Stylizacja stron za pomocą arkuszy CSS
* Tworzenie skryptów w języku JavaScript
* Wbudowanie skryptu w stronę WWW
* Obiektowy model dokumentu (DOM)
* Obiekty String
* Instrukcje warunkowe i pętle
* Funkcje wbudowane i biblioteki
* Konstruowanie aplikacji ajaksowych
* Zmienne w języku PHP
* Funkcje liczbowe, łańcuchy i tabele
* Kontrola przepływu sterowania
* Usługi webowe oraz protokoły REST i SOAP
Łącz, kompiluj, dobieraj — niech Twoje strony WWW zrobią wrażenie!
Poznaj narzędzia programu PowerPoint i twórz wyjątkowe prezentacje!
* Jak stworzyć profesjonalną prezentację na każdą okazję?
* Jak modyfikować grafikę SmartArt?
* Jak korzystać z programu Clip Organizer i biblioteki slajdów?
Z pewnością wiesz, do czego służy program PowerPoint, lecz jeśli jeszcze nie potrafisz z niego korzystać, a musisz szybko przygotować profesjonalną prezentację, ta książka jest właśnie dla Ciebie! Znajdziesz tu opis ostatniej wersji programu — PowerPoint 2007. Umożliwia ona stworzenie zaawansowanej i bogatej prezentacji, wyposażonej w dźwięk, fotografie i animacje filmowe. Nowy PowerPoint pozwala także na bezpieczne udostępnianie Twojej prezentacji wszystkim zainteresowanym.
Książka "PowerPoint 2007 PL. Seria praktyk" to bogato ilustrowany, a przy tym prawdziwie intuicyjny podręcznik, dzięki któremu każdy nauczy się sprawnie korzystać z tej aplikacji. Kolor i zrzuty ekranowe ilustrujące kolejne informacje, jak również klarowne i zrozumiałe instrukcje sprawiają, że nauka staje się niezwykle prosta. Dzięki tej książce poznasz wszystkie niezbędne narzędzia PowerPointa i ciekawe funkcje tego programu. Dowiesz się, jak zastosować w swojej prezentacji grafiki SmartArt oraz zaawansowane układy slajdów, a także w jaki sposób korzystać z galerii stylów czy biblioteki slajdów.
* Tworzenie prezentacji
* Praca z tekstem
* Grafika i linie
* Konwersja na grafikę SmartArt
* Tabele i wykresy
* Używanie Excela 2007 — kopiowanie i wstawianie tabel
* Wzbogacanie prezentacji — animacje
* Multimedia
* Dodawanie filmów i dźwięku
* Tworzenie albumów
* Pokaz slajdów
* Nagrywanie narracji
* Udostępnianie prezentacji
* Bezpieczeństwo
PowerPoint jest dla każdego!
Poznaj narzędzia oraz funkcje Excela i z łatwością wykorzystuj tę wiedzę w pracy
* Jak tworzyć skoroszyty i wykresy?
* Jak zarządzać danymi w arkuszach?
* Jak szacować formuły?
Na samo brzmienie słowa "Excel" reagujesz paniką? Uważasz, że to bardzo skomplikowany i trudny w obsłudze program? Świetnie! Ta książka została napisana właśnie z myślą o Tobie! Podręcznik, który trzymasz w rękach, stanowi namacalny dowód na to, że Excel 2007 może być prosty, a nauka jego obsługi bardzo przyjemna! Choć trudno Ci w tej chwili w to uwierzyć, aplikacja ta oferuje cale spektrum nowoczesnych, a przy tym przyjaznych i intuicyjnych narzędzi oraz funkcji, dzięki którym znacznie usprawnisz i przyspieszysz swoją pracę. Naprawdę warto je poznać!
Książkę "Excel 2007 PL. Seria praktyk" przygotowano w taki sposób, aby każdy mógł nauczyć się korzystać z narzędzi Excela, tworzyć odpowiednie arkusze oraz wykonywać na nich praktyczne operacje. Wszystkie porady i instrukcje napisane zostały prostym, zrozumiałym językiem. Dzięki temu szybko opanujesz sposoby zarządzania danymi czy szacowania formuł w tym programie. Wszystkie omawiane zagadnienia zilustrowane są ułatwiającymi zrozumienie zrzutami ekranowymi, a kolorowy druk znacznie uprzyjemni Ci korzystanie z książki. Wystarczy ją przeczytać, a poznasz Excela w stopniu pozwalającym Ci na swobodną pracę w tym programie. Na co zatem czekasz? Przed Tobą nauka takich zagadnień, jak:
* Tworzenie skoroszytu
* Wprowadzanie danych do arkusza i zarządzanie nimi
* Formuły i funkcje
* Tabele i wykresy
* Konwersja tabeli do postaci zakresu
* Zaawansowane funkcje
* Szacowanie formuł
* Zarządzanie Excelem
* Makra
* Szablony i scenariusze
* Łącza i odwołania
* Stosowanie aktualizacji
Najprostszy i najprzyjemniejszy sposób na poznanie Excela!
Poznaj praktyczne możliwości programu Access 2007!
* Jak właściwie zaprojektować bazę danych?
* Jak korzystać z szablonów?
* Jak tworzyć tabele i definiować relacje między nimi?
Wbrew pozorom nie trzeba być specjalistą, żeby korzystać z Accessa! Jest to program wyjątkowo przyjazny dla użytkownika, umożliwiający tworzenie baz danych i zarządzanie nimi bez potrzeby dogłębnego poznawania języka SQL oraz skomplikowanych środowisk serwerowych. Aplikacja pozwala na zapisywanie danych z wykorzystaniem formularzy, kierowanie zapytań do bazy, a także dzielenie danych ze współpracownikami za pośrednictwem sieci komputerowej.
Książka "Access 2007 PL. Seria praktyk" zawiera zwięzły i czytelny opis wszystkich najważniejszych funkcji tego programu, a także konkretne przykłady i jasne instrukcje zastosowania narzędzi Accessa. Kolorowe strony pozwalają na szybkie odnalezienie interesujących Cię zagadnień. Dzięki temu podręcznikowi poznasz podstawowe zasady tworzenia dobrego projektu bazy danych oraz jej zaawansowane możliwości. Nauczysz się tworzyć tabele, formularze i raporty, a także korzystać z kluczy podstawowych i obcych. Bez problemu zbudujesz taką bazę danych, która pozwoli Ci sprawnie zarządzać informacjami.
* Personalizacja Accessa 2007
* Projektowanie baz danych
* Relacyjne bazy danych
* Klucze podstawowe i obce
* Tworzenie tabel
* Korzystanie z typów danych
* Definiowanie relacji
* Kwerendy
* Korzystanie z SQL
* Tworzenie i dostrajanie formularzy
* Tworzenie raportów
* Współdzielenie Accessa
Naucz się korzystać z Accessa — zachwycą Cię jego możliwości!
Odkryj bogactwo funkcji Worda!
Jak poprawnie formatować i uatrakcyjniać dokumenty?
Chcesz zacząć sprawnie tworzyć w programie Word dokumenty o profesjonalnym wyglądzie? A może tak dobrze go już znasz, że wątpisz, by skrywał przed Tobą jeszcze jakiekolwiek tajemnice? Tak czy inaczej warto opanować wszystkie potężne możliwości najpopularniejszego edytora tekstów, różne sposoby pracy z nim i metody tworzenia dokumentów tekstowych. Uzbrojony w taką wiedzę, z pewnością będziesz pracował szybciej i sprawniej.
Książka "Word 2007 PL. Seria praktyk" jest graficznym przewodnikiem po najnowszej wersji Worda i zawiera dokładny opis jego funkcji podstawowych oraz zaawansowanych — począwszy od tworzenia i formatowania tekstów, a na złożonych makrach skończywszy. Wszystko to przedstawione zostało za pomocą przejrzystych, kolorowych i szczegółowych instrukcji oraz praktycznych przykładów. Dzięki temu podręcznikowi poznasz całe spektrum narzędzi Worda i udoskonalisz swoją pracę z tym programem.
* Narzędzia główne
* Formatowanie tekstu
* Szybkie style
* Praca z dokumentem
* Drukowanie i publikowanie
* Konwersja do formatu PDF
* Biblioteka ClipArt i SmartArt
* Hiperłącza i zakładki
* Równania
* Zaawansowane funkcje — podpis cyfrowy
* Makra
Opanuj wszystkie narzędzia Worda i ciesz się swobodą tworzenia dokumentów!
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
Dołącz do kreatorów nowych trendów! Stwórz własny serwis społecznościowy!
* Pierwsze kroki w roli twórcy serwisu — rodzaje stron, prawo i reklama
* Skrypty, instalacja i administracja — PHPizabi, Elgg, Dolphin, Joomla!
* ABC moderatora i użytkownika — regulamin, trolle, zakres ingerencji
Serwisy społecznościowe są bodaj najszybciej rozwijającą się dziś częścią internetu. Nie sposób przecenić ich roli społecznej i opiniotwórczej. Liczba użytkowników i ich poczucie wspólnoty decydują o sile i prężności tych serwisów. W każdej chwili możesz przyłączyć się do któregoś z nich. Jednak znacznie więcej radości sprawiłoby Ci na pewno prowadzenie własnego serwisu, wokół którego skupiałaby się cała społeczność osób o zainteresowaniach podobnych do Twoich.
W książce "Serwisy społecznościowe. Budowa, administracja i moderacja" znajdziesz wszelkie informacje dotyczące tworzenia i obsługi serwisu społecznościowego. Opisano w niej początki tego zjawiska społecznego, podstawy jego działania, rozmaite odmiany serwisów, wszelkie kwestie prawne i techniczne. Niezależnie od tego, czy szukasz inspiracji odnośnie treści umieszczanych w serwisie, czy chciałbyś dowiedzieć się, jak rozwiązać konkretne problemy z konfiguracją, rejestracją, wyborem mechanizmu działania czy wyglądu Twojego serwisu, autorzy służą Ci rzetelną wiedzą, wskazówkami i podpowiedziami. Oprócz tego wprowadzą Cię w kwestie związane z bezpieczeństwem w sieci, rolą moderatora i rozwiązywaniem problemów z użytkownikami.
* Społeczności internetowe
* Serwisy społecznościowe (historia, rodzaje, reklama)
* Regulacje prawne
* Wybór domeny i hostingu
* Niezbędne narzędzia (klient FTP, edytory CSS i tekstowe)
* Serwis społecznościowy a forum dyskusyjne
* Bezpieczeństwo serwisu
* Skrypty (PHPizabi, Elgg, Dolphin, Joomla!, BuddyPress, Joovili, SocialEngine i wiele innych)
* Online-Community-Building
* Skrypty do budowy serwisu wideo (ClipBucket Lite, Clipshare, ClipHouse i wiele innych)
* Rola moderatora
* Social shopping
Sprawdź, jak wiele satysfakcji daje własny serwis społecznościowy!
AutoCAD to program do komputerowego wspomagania projektowania, który od lat wyznacza standardy na rynku takich aplikacji. Z jego możliwości korzystają projektanci różnych branż, a ogromna liczba bibliotek, modułów i nakładek sprawia, że realizacja nawet najbardziej złożonych projektów przebiega szybko i sprawnie. Każda kolejna wersja AutoCAD-a jest bardziej rozbudowana. W wersji 2008 autorzy aplikacji zadbali o optymalizację znanych już użytkownikom narzędzi i zwiększenie produktywności pracy. Zmodernizowany interfejs użytkownika oraz nowe możliwości docenią nie tylko profesjonaliści, ale również ci, którzy stawiają pierwsze kroki w świecie komputerowego wspomagania projektowania.
Książka "AutoCAD 2008 i 2008 PL" to wyczerpujące omówienie najnowszej edycji tej aplikacji. Każdy użytkownik AutoCAD-a, niezależnie od stopnia zaawansowania, znajdzie w niej interesujące informacje. Czytając tę książkę, nauczysz się tworzyć i modyfikować rysunki, wymiarować je, korzystać z warstw, bloków i stylów oraz drukować projekty. Poznasz zasady modelowania bryłowego, tworzenia szablonów oraz rysowania w trybie aksonometrycznym. Każde z narzędzi dostępnych w aplikacji jest dokładnie omówione, a ilustrowane przykłady ułatwiają poznanie ich w praktyce.
* Interfejs użytkownika, menu i paski narzędzi
* Praca z dokumentami
* Układy współrzędnych
* Tworzenie podstawowych obiektów i definiowanie ich właściwości
* Napisy i tabelki
* Rysowanie precyzyjne
* Rysunek aksonometryczny
* Kreskowanie
* Naprawianie uszkodzonych rysunków
* Techniki wymiarowania, modyfikowanie wymiarów i style wymiarowe
* Modelowanie 3D i bryły ACIS
Poznaj najnowszą wersję narzędzia, które zrewolucjonizowało pracę projektantów na całym świecie.
Zobacz, jakie to proste — naucz się tworzyć bazy danych!
* Jak tworzyć formularze i raporty?
* Jak modyfikować strukturę tabel?
* Jak stosować mechanizmy wymiany danych?
Współczesny świat wymusza na przedsiębiorstwach gromadzenie oraz przetwarzanie ogromnej ilości informacji. To sprawia, że muszą one dysponować wydajnymi i sprawnymi bazami danych. Aby zbudować taki system zarządzania danymi, niezbędne są odpowiednie narzędzia — jednym z nich jest program MS Access. Ta aplikacja przede wszystkim pozwala na łatwą kontrolę poprawności tworzonych projektów oraz zapewnia integrację narzędzi służących do tworzenia struktury relacyjnej. Dba także o zgodność tych narzędzi ze standardem języka zapytań SQL, wykorzystywanym do tworzenia i modyfikowania baz danych oraz operowania na zgromadzonych w nich informacjach.
Książka „Bazy danych. Pierwsze starcie” stanowi doskonałe wprowadzenie w tematykę tworzenia baz danych. Zawiera wszystkie potrzebne informacje, podane w prosty i przejrzysty sposób. Ten podręcznik przyda się zarówno studentom kierunków informatycznych, jak i wszystkim tym, którzy chcą zdobyć wiedzę o nowoczesnych metodach budowania takich baz. Stąd dowiesz się m.in., jak wykorzystywać język zapytań SQL, w jaki sposób tworzyć tabele, formularze i raporty oraz stosować mechanizmy wymiany danych, a także na czym polega filtrowanie i sortowanie w zapytaniach. Zdobędziesz wiedzę i umiejętności wystarczające do samodzielnego zbudowania wydajnej bazy danych i sprawnego nią zarządzania.
* Projektowanie bazy danych — narzędzia wizualne
* Tworzenie formularzy i raportów
* Strukturalny język zapytań SQL w wersji MS JetSQL
* Składnia podstawowa
* Unia — koniunkcja zbiorów
* Grupowanie i funkcje agregujące
* Zastosowanie języka SQL z poziomu formularzy
* Mechanizmy wymiany danych
* Obiekty: DAO, RDO, ADO
* Zastosowanie mechanizmów wymiany danych przy tworzeniu aplikacji
Stwórz własną, niezawodną bazę danych!
Wkrocz w świat projektowania 3D
* Jak definiować parametry projektu?
* W jaki sposób korzystać z narzędzi projektowych?
* Jak generować dokumentację techniczną?
Inventor, opracowany i sprzedawany przez firmę Autodesk, to program typu CAD, pozwalający na zamodelowanie projektowanego urządzenia lub elementu w postaci bryły trójwymiarowej. W oparciu o tak zamodelowaną bryłę Inventor umożliwia wygenerowanie pełnej dokumentacji projektowej — rysunków wykonawczych i złożeniowych, wykazu części i innych. Aplikacja pozwala także na przeprowadzenie symulacji i analizy działania projektowanego urządzenia.
"Inventor. Pierwsze kroki " to podręcznik dla wszystkich osób, które chcą poznać możliwości tej aplikacji i wykorzystać je w swojej pracy. Książka opisuje proces instalacji i konfiguracji programu oraz definiowania parametrów projektu. Pokazuje także kolejne kroki jego realizacji. Przeczytasz w niej o tworzeniu szkiców, definiowaniu wiązań, generowaniu modeli bryłowych i tworzeniu zespołów. Dowiesz się także, w jaki sposób wygenerować dokumentację techniczną w oparciu o gotowy model oraz jak zaprezentować elementy projektu w postaci animacji trójwymiarowej.
* Instalacja Inventora
* Konfiguracja interfejsu użytkownika
* Praca z oknami dialogowymi
* Tworzenie szkiców i wiązań
* Edycja obiektów graficznych
* Tworzenie brył trójwymiarowych
* Łączenie elementów w zespoły
* Tworzenie dokumentacji technicznej
* Prezentacja zespołów
Zrealizuj swoje wizje za pomocą Inventora!
1. IDZ DO
PRZYK£ADOWY ROZDZIA£
SPIS TRE CI Projektowanie i analiza
algorytmów
KATALOG KSI¥¯EK
Autorzy: Alfred V. Aho, John E. Hopcroft, Jeffrey D. Ullman
KATALOG ONLINE T³umaczenie: Wojciech Derechowski
ISBN: 83-7197-770-0
ZAMÓW DRUKOWANY KATALOG Tytu³ orygina³u: The Design and Analysis
of Computer Algorithms
Format: B5, stron: 488
TWÓJ KOSZYK
Badanie algorytmów le¿y w samym sercu nauk komputerowych. W ostatnich latach
DODAJ DO KOSZYKA
dokonano znacz¹cych postêpów w tej dziedzinie. Opracowano m.in. wiele
efektywniejszych algorytmów (szybkie przekszta³cenie Fouriera), odkryto tak¿e
istnienie pewnych naturalnych zadañ, dla których wszystkie algorytmy s¹ nieefektywne.
CENNIK I INFORMACJE Wyniki te powoduj¹ wzrost zainteresowania badaniami algorytmów, co przyczynia siê
do intensywnego rozwoju tej dziedziny wiedzy.
ZAMÓW INFORMACJE
O NOWO CIACH Ksi¹¿ka jest podrêcznikiem wstêpnego kursu projektowania i analizy algorytmów.
Autorzy po³o¿yli nacisk raczej na prezentacji najwa¿niejszych idei i przystêpno ci
ZAMÓW CENNIK wyk³adu, ni¿ na szczegó³ach realizacji i sztuczkach programistycznych. Autorzy
przedstawiaj¹ na ogó³ nieformalne, intuicyjne obja nienia zamiast d³ugich
i pracoch³onnych dowodów. Ksi¹¿ka nie wymaga ¿adnego szczególnego przygotowania
CZYTELNIA z zakresu matematyki, czy jêzyków programowania. Po¿¹dana jest jednak pewna
dojrza³o æ w stosowaniu pojêæ matematycznych, ogólne obycie w jêzykach
FRAGMENTY KSI¥¯EK ONLINE programowania wysokiego poziomu, takich jak FORTRAN lub ALGOL, a tak¿e
podstawowa znajomo æ algebry liniowej.
W ksi¹¿ce omówiono m.in.:
• Podstawowe pojêcia i modele (w tym maszynê Turniga)
• Najwa¿niejsze struktury danych, rekurencjê, programowanie dynamiczne
• Algorytmy sortowania, operacje na zbiorach, drzewach i grafach
• Szybkie przekszta³cenie Fouriera z zastosowaniami
• Algorytmy arytmetyczne, operacje na wielomianach
• Algorytmy dopasowania wzorców
• Problemy NP-zupe³ne
• Dolne ograniczenia z³o¿ono ci obliczeniowej
Wydawnictwo Helion Wa¿nym uzupe³nieniem tre ci ksi¹¿ki s¹ æwiczenia o zró¿nicowanych poziomach
ul. Chopina 6 trudno ci. „Projektowanie i analiza algorytmów” to doskona³y podrêcznik dla studentów
44-100 Gliwice informatyki i kierunków pokrewnych, a tak¿e wspania³a pomoc dla osób prowadz¹cych
tel. (32)230-98-63 wyk³ady i æwiczenia na tych kierunkach.
e-mail: helion@helion.pl
5. Rozdział 1.
Modele obliczania
Jak, mając dany problem, znajdziemy efektywny algorytm rozwiązania? Gdy zna-
leźliśmy algorytm, jak mamy porównać ten algorytm z innymi algorytmami, które
rozwiązują ten sam problem? Jak powinniśmy oceniać jakość algorytmu? Pytania
tego rodzaju są ciekawe zarówno dla programisty, jak i dla uczonego o teoretycz-
nym nastawieniu do nauk komputerowych. W książce rozpatrujemy różne kierunki
badań, które usiłują odpowiedzieć na takie pytania.
W tym rozdziale rozważamy kilka modeli komputera — maszynę o dostępie swo-
bodnym, maszynę z zapamiętanym programem i maszynę Turinga. Porównujemy
je co do tego, jak odzwierciedają złożoność algorytmu i wyprowadzamy z nich kilka
wyspecjalizowanych modeli obliczeń: liniowe programy arytmetyczne, obliczenia na
bitach, obliczenia na wektorach bitów i drzewa decyzji. Wreszcie, w ostatnim punk-
cie rozdziału wprowadzamy język do opisu algorytmów, zwany „Pidgin ALGOL”.
1.1. Algorytmy i ich złożoność
Algorytmy mogą być oceniane na podstawie rozmaitych kryteriów. Najczęściej in-
teresuje nas szybkość z jaką wzrastają czas lub pamięć potrzebne, by rozwiązać
zadanie w coraz bardziej wymagających przypadkach. Zawsze będziemy przypisy-
wać zadaniu liczbę całkowitą, zwaną rozmiarem zadania, która jest miarą wielkości
danych. Na przykład rozmiarem zadania w przypadku mnożenia macierzy może być
największy wymiar macierzy, które mamy pomnożyć. Rozmiarem zadania z grafem
może być liczba krawędzi grafu.
Wymagany przez algorytm czas wyrażony jako funkcja rozmiaru zadania zwany
jest złożonością czasową algorytmu. Zachowanie się tej złożoności w granicy, gdy
rozmiar zadania wzrasta, nazywa się asymptotyczną złożonością czasową. Podobnie
można zdefiniować złożoność pamięciową i asymptotyczną złożoność pamięciową.
Asymptotyczna złożoność algorytmu jest tym, co ostatecznie rozstrzyga o rozmia-
rze zadań, które mogą być rozwiązane przez ten algorytm. Jeżeli algorytm prze-
twarza dane o rozmiarze n w czasie cn2 dla pewnej stałej c, to mówimy, że czasowa
złożoność tego algorytmu jest O(n2 ), czytaj „rzędu n2 ”. Ściślej, funkcja g(n) jest
6. 12 Rozdział 1. Modele obliczania
Złożoność Maksymalny rozmiar zadania
Algorytm czasowa 1 sek. 1 min. 1 godz.
A1 n 1000 6 × 10 4
3.6 × 106
A2 n log n 140 4893 2.0 × 105
A3 n2 31 244 1897
A4 n3 10 39 153
A5 2n 9 15 21
Rys. 1.1. Ograniczenia rozmiaru zadania spowodowane szybkoś-
cią wzrostu złożoności
O(f (n)), jeżeli istnieje stała c taka, że g(n) cf (n) dla wszystkich nieujemnych
wartości n prócz pewnego skończonego (być może pustego) zbioru tych wartości.
Można by przypuszczać, że ogromny wzrost szybkości obliczeń dzięki powstaniu
maszyn cyfrowych obecnej generacji zmniejszy znaczenie efektywnych algorytmów.
Jest jednak odwrotnie. Skoro komputery stają się szybsze i możemy przetwarzać
coraz większe zadania, to o wzroście rozmiaru zadania, jaki można osiągnąć przez
wzrost szybkości komputera, rozstrzyga złożoność algorytmu.
Załóżmy, że mamy pięć algorytmów A1 − A5 o podanych złożonościach czasowych:
Algorytm Złożoność czasowa
A1 n
A2 n log n (1 )
A3 n2
A4 n3
A5 2n
Złożoność czasowa jest tu liczbą jednostek czasu potrzebnych do przetworzenia da-
nych rozmiaru n. Zakładając, że jednostka czasu jest równa jednej milisekundzie,
algorytm A1 może przetworzyć w ciągu jednej sekundy dane o rozmiarze 1000, na-
tomiast algorytm A5 dane o rozmiarze co najwyżej 9. Rysunek 1.1 podaje rozmiary
zadań, które mogą być rozwiązane przez każdy z tych pięciu algorytmów w ciągu
jednej sekundy, jednej minuty i jednej godziny.
Przypuśćmy, że następna generacja komputerów będzie dziesięć razy szybsza niż
obecna. Rysunek 1.2 pokazuje wzrost rozmiaru zadania, jakie można rozwiązać
dzięki temu wzrostowi prędkości. Zauważmy, że z algorytmem A5 dziesięciokrotny
wzrost prędkości zwiększa tylko o trzy rozmiar zadania, które można rozwiązać,
natomiast z algorytmem A3 ten rozmiar wzrasta więcej niż trzykrotnie.
Zamiast wzrostu szybkości rozważmy skutek użycia bardziej efektywnego algoryt-
mu. Popatrzmy raz jeszcze na rys. 1.1. Biorąc jedną minutę za podstawę porów-
1O ile nie zaznaczono inaczej, wszystkie logarytmy w tej książce mają podstawę 2.
7. 1.1. Algorytmy i ich złożoność 13
Maksymalny Maksymalny
Złożoność rozmiar zadania rozmiar zadania
Algorytm czasowa przed przyspieszeniem po przyspieszeniu
A1 n s1 10s1
A2 n log n s2 około 10s2 dla dużych s2
A3 n2 s3 3.16s3
A4 n3 s4 2.15s4
A5 2n s5 s5 + 3.3
Rys. 1.2. Skutek dziesięciokrotnego przyspieszenia
nania, można przez zastąpienie algorytmu A4 algorytmem A3 rozwiązać zadanie
sześciokrotnie większe, a przez zastąpienie algorytmu A4 algorytmem A2 , zada-
nie 125 razy większe. Wyniki te są znacznie bardziej przekonujące niż dwukrotna
poprawa osiągnięta przez dziesięciokrotny wzrost szybkości. Jeżeli za podstawę po-
równania weźniemy godzinę, rożnice są jeszcze bardziej istotne. Wnioskujemy, że
asymptotyczna złożoność algorytmu jest ważną miarą jakości algorytmu, miarą,
która stanie się jeszcze ważniejsza w przyszłości, gdy szybkość obliczeń wzrośnie.
Mimo uwagi, którą poświęcamy temu, jak rośnie rząd wielkości, powinniśmy zdawać
sobie sprawę, że algorytm o gwałtownym tempie wzrostu może mieć mniejszą stałą
proporcjonalności niż algorytm o niższym. W takim przypadku szybko rosnący
algorytm może być lepszy dla małych zadań, a może nawet dla wszystkich zadań,
które mają rozmiar, jaki nas interesuje. Przypuśćmy na przykład, że złożonościami
czasowymi algorytmów A1 , A2 , A3 , A4 i A5 są 1000n, 100n log n, 10n2 , n3 i 2n .
Wtedy A5 będzie najlepszy dla zadań o rozmiarze 2 n 9, A3 dla 10 n 58,
A2 dla 59 n 1024, a A1 dla zadań o rozmiarze większym niż 1024.
Nim w rozważaniu algorytmów i ich złożoności pójdziemy dalej, musimy opisać
model maszyny liczącej, która je wykonuje i określić, co rozumiemy przez krok
w obliczeniach. Niestety nie istnieje model obliczeń, który pasowałby do wszyst-
kich sytuacji. Jedną z głównych trudności jest długość słów maszynowych. Jeżeli
na przykład założy się, że w słowie maszynowym można umieścić liczbę całkowitą
dowolnej wielkości, całe zadanie można zakodować w postaci jednej liczby całkowi-
tej w jednym słowie. Jeżeli założy się, że słowo maszynowe jest skończone, trzeba
rozważyć trudność zapamiętania dowolnie dużych liczb i inne problemy pomija-
ne, gdy zadania mają umiarkowany rozmiar. Dla problemu musimy wybrać model,
który będzie odzwierciedlać czas obliczeń w rzeczywistym komputerze.
W następnych punktach tego rozdziału omówimy kilka podstawowych modeli ma-
szyn liczących, przede wszystkim maszynę o dostępie swobodnym, maszynę o do-
stępie swobodnym z zapamiętanym programem i maszynę Turinga. Te trzy modele
są równoważne pod względem mocy obliczeniowej, lecz nie szybkości.
8. 14 Rozdział 1. Modele obliczania
Formalne modele obliczeń wzięły się głównie z pragnienia, by wydobyć na jaw
istotną trudność obliczeniową różnych problemów. Chcemy podać dowody dolnych
ograniczeń czasu obliczeń. Aby wykazać, że nie istnieje algorytm, który wykonuje
dane zadanie w czasie krótszym niż pewien czas, potrzebujemy ścisłej i w wie-
lu punktach bardzo sztywnej definicji tego, czym jest algorytm. Przykład takiej
definicji stanowią maszyny Turinga (p. 1.6.).
W opisach i objaśnieniach algorytmów przyda się nam zapis prostszy i bardziej
jasny niż program dla maszyny o dostępie swobodnym, maszyna z zapamiętanym
programem, czy maszyna Turinga. Z tego powodu wprowadzimy język wysokiego
poziomu, zwany Pidgin ALGOL. W całej książce opisujemy algorytmy w tym ję-
zyku. Ale żeby rozumieć złożoność obliczeniową algorytmu opisanego przez Pidgin
ALGOL, musimy pokazać, jak Pidgin ALGOL zależy od modeli bardziej formal-
nych. Zrobimy to w ostatnim punkcie tego rozdziału.
1.2. Maszyny o dostępie swobodnym
Maszyna (RAM, od random access machine) jest modelem komputera o jednym
akumulatorze i instrukcjach, którym nie wolno się modyfikować.
Maszyna RAM składa się z taśmy wejściowej tylko do czytania, taśmy wyjściowej
tylko do pisania, programu oraz pamięci (rys. 1.3). Taśma wejściowa jest ciągiem
klatek, z których każda zawiera liczbę całkowitą (być może ujemną). Ilekroć z ta-
śmy wejściowej czytany jest symbol, głowica taśmy wejściowej przesuwa się o jedną
klatkę w prawo. Wyjściem jest taśma tylko do pisania, podzielona na klatki, które
początkowo są puste. Gdy wykonywana jest instrukcja pisania, w klatce znajdującej
się na taśmie wyjściowej pod głowicą taśmy wyjściowej drukowana jest liczba całko-
wita i głowica taśmy wyjściowej przesuwana jest na prawo. Gdy symbol wyjściowy
zostanie zapisany, nie można go zmienić.
Pamięć składa się z ciągu rejestrów r0 , r1 , . . . , ri , . . . , z których każdy może prze-
chowywać liczbę całkowitą dowolnej wielkości. Na liczbę rejestrów, które mogą być
użyte, nie nakładamy żadnego ograniczenia górnego. Abstrakcja tego rodzaju jest
poprawna, w przypadkach gdy:
1. rozmiar zadania jest na tyle mały, że mieści się ono w pamięci komputera,
oraz
2. liczby całkowite, użyte do obliczeń, są na tyle małe, że mieszczą się w poje-
dynczych słowach maszynowych.
Program dla maszyny RAM nie jest przechowywany w pamięci. A więc zakładamy,
że program ten nie modyfikuje sam siebie. Program jest jedynie ciągiem instrukcji
z (nieobowiązkowymi) etykietami. Ścisłe określenie instrukcji używanych w pro-
gramie nie jest zbyt ważne, dopóki są podobne do instrukcji spotykanych w rze-
czywistych komputerach. Zakładamy instrukcje arytmetyczne, instrukcje wejścia-
wyjścia, instrukcje adresowania pośredniego (przykładowo w indeksowaniu do ta-
9. 1.2. Maszyny o dostępie swobodnym 15
Rys. 1.3. Maszyna o dostępie swobodnym
blic) i instrukcje rozgałęzienia (branching).2 Wszelkie obliczenia wykonywane są
w rejestrze r0 , zwanym akumulatorem, który, jak wszystkie pozostałe rejestry pa-
mięci, może pomieścić dowolną liczbę całkowitą. Przykład zbioru instrukcji dla
maszyny RAM przedstawia rysunek 1.4. Każda instrukcja składa się z dwóch czę-
ści — kodu operacji i adresu.
W zasadzie możemy uzupełnić ten zbiór o dowolne inne, znane z rzeczywistych
komputerów instrukcje, takie jak operacje logiczne czy operacje na znakach, nie
zmieniając przy tym rzędu złożoności zadań. Czytelnik wedle swego uznania mo-
że uważać zbiór instrukcji za uzupełniony w ten sposób. Operandum może mieć
postać:
1. = i, co oznacza samą liczbę całkowitą i,
2. nieujemnej liczby całkowitej i, co oznacza zawartość rejestru i,
3. ∗i, co oznacza adresowanie pośrednie. A mianowicie, operandum jest zawar-
tością rejestru j, gdzie j jest liczbą całkowitą, która znajduje się w rejestrze
i. Jeżeli j < 0, to maszyna ulega zatrzymaniu.
2 Oprócz
instrukcji warunkowych (Jump on Greater than Zero, Jump on Zero, jak czytam JGTZ
i JZERO), repertuar zawiera JUMP; por. rys. 1.5 (str. 17) — przyp. tłum.
10. 16 Rozdział 1. Modele obliczania
Kod operacji Adres
1. LOAD operandum
2. STORE operandum
3. ADD operandum
4. SUB operandum
5. MULT operandum
6. DIV operandum
7. READ operandum
8. WRITE operandum
9. JUMP etykieta
10. JGTZ etykieta
11. JZERO etykieta
12. HALT
Rys. 1.4. Tablica instrukcji RAM
Instrukcje te powinny być dobrze znane każdemu, kto programował asembler. Może-
my teraz zdefiniować sens programu P za pomocą dwóch wielkości: przekształcenia
c określonego na zbiorze nieujemnych liczb całkowitych o wartościach w zbiorze
liczb całkowitych i „licznika lokalizacji”, który ustala następną instrukcję do wy-
konania. Funkcja c jest mapą pamięci; c(i) jest to liczba całkowita umieszczona
w rejestrze i (zawartość rejestru i).
Początkowo c(i) = 0 dla każdego i 0, licznik lokalizacji jest nastawiony na pierw-
szą instrukcję P , a taśma wyjściowa jest pusta. Po wykonaniu k-tej instrukcji P
licznik lokalizacji jest automatycznie nastawiany na k + 1 (tj. na następną instruk-
cję), chyba że k-tą instrukcją jest JUMP, HALT, JGTZ lub JZERO.
Aby określić sens instrukcji, definiujemy v(a), wartość operandum a następująco:
v(= i) = i,
v(i) = c(i),
v(∗i) = c(c(i)).
Tabela na rysuku 1.5 definiuje sens każdej instrukcji z rysunku 1.4. Instrukcje nie-
zdefiniowane, takie jak STORE = i, można uważać za równoważne HALT. Podobnie
zatrzymuje maszynę dzielenie przez zero.
Podczas wykonywania każdej z pierwszych ośmiu instrukcji licznik lokalizacji jest
zwiększany o 1. Instrukcje są wykonywane w porządku, w którym występują w pro-
gramie, aż do napotkania instrukcji JUMP, HALT, JGTZ przy zawartości akumu-
latora większej od zera, lub JZERO, przy zawartości akumulatora równej zero.
Ogólnie program RAM definiuje przekształcenie taśm wejściowych w taśmy wyj-
ściowe. Skoro nie dla wszystkich taśm wejściowych program może się zatrzymać,
przekształcenie jest częściowe (czyli może być nieokreślone dla pewnych danych
11. 1.2. Maszyny o dostępie swobodnym 17
Instrukcja Sens
1. LOAD a c(0) ← v(a)
2. STORE i c(i) ← c(0)
STORE ∗i c(c(i)) ← c(0)
3. ADD a c(0) ← c(0) + v(a)
4. SUB a c(0) ← c(0) − v(a)
5. MULT a c(0) ← c(0) × v(a)
6. DIV a c(0) ← c(0)/v(a) (3 )
7. READ i c(i) ← bieżący symbol na wejściu.
READ ∗i c(c(i)) ← bieżący symbol na wejściu. Głowica taśmy wejścio-
wej przesuwa się o jedną klatkę w prawo w obu przypadkach.
8. WRITE a v(a) jest drukowane w klatce, która na taśmie wyjściowej jest
obecnie pod głowicą. Następnie głowica taśmy wyjściowej
przesuwana jest o jedną klatkę w prawo.
9. JUMP b Licznik lokalizacji jest nastawiany na instrukcję z etykietą b.
10. JGTZ b Licznik lokalizacji jest nastawiany na instrukcję z etykietą
b, jeżeli c(0) > 0; w przeciwnym razie licznik lokalizacji jest
nastawiany na następną instrukcję.
11. JZERO b Licznik lokalizacji jest nastawiany na instrukcję z etykietą
b, jeżeli c(0) = 0; w przeciwnym razie licznik lokalizacji jest
nastawiany na następną instrukcję.
12. HALT Wykonanie ustaje.
3
W tej książce x (ceiling x ) oznacza najmniejszą liczbę całkowitą, większą lub równą x, zaś
x (floor lub część całkowita x ) oznacza największą liczbę całkowitą, mniejszą lub równą x.
Rys. 1.5. Sens instrukcji RAM. Operandum a jest tu = i, i, lub ∗i
wejściowych). Przekształcenie to można interpretować na różne sposoby. Dwiema
istotnymi interpretacjami są funkcja, bądź język.
Przypuśćmy, że program P zawsze czyta n liczb całkowitych z taśmy wejściowej
i pisze co najwyżej jedną liczbę całkowitą na taśmie wyjściowej. Jeżeli x1 , x2 , . . . , xn
są liczbami całkowitymi w pierwszych n klatkach taśmy wejściowej a P zapisuje y
w pierwszej klatce taśmy wyjściowej i zatrzymuje się, to mówimy, że P oblicza funk-
cję f (x1 , x2 , . . . , xn ) = y. Łatwo udowodnić, że RAM, jak każdy inny realistyczny
model komputera, oblicza jedynie funkcje częściowo rekurencyjne. Otóż dla każdej
częściowo rekurencyjnej funkcji f możemy zdefiniować program RAM, który obli-
cza f , i dla każdego programu RAM, równoważną funkcję częściowo rekurencyjną
(patrz Davis [ 1958 ] lub Rogers [ 1967 ] odnośnie funkcji rekurencyjnych).
Program RAM można interpretować także jako akceptor języka. Alfabetem jest
skończony zbiór symboli, a językiem zbiór napisów nad pewnym alfabetem. Sym-
bole alfabetu mogą być reprezentowane przez liczby całkowite 1, 2, . . . , k dla pewne-
go k. Maszyna RAM może akceptować język w następujący sposób. Umieszczamy
12. 18 Rozdział 1. Modele obliczania
begin
read r1;
if r1 0 then write 0
else
begin
r2 ← r1;
r3 ← r1 − 1;
while r3 > 0 do
begin
r2 ← r2 ∗ r1;
r3 ← r3 − 1
end;
write r2
end
end
Rys. 1.6. Program dla nn w Pidgin ALGOLu
napis wejściowy s = a1 a2 · · · an na taśmie wejściowej: symbol a1 w pierwszej klat-
ce, symbol a2 w drugiej, itd. Symbol 0, którego użyjemy jako znacznika końca,
umieszczamy w klatce (n + 1), by oznaczyć koniec napisu wejściowego.
Napis wejściowy s jest akceptowany przez program P maszyny RAM, jeżeli P czyta
cały napis s i znacznik końca, pisze 1 w pierwszej klatce taśmy wyjściowej i zatrzy-
muje się. Język akceptowany przez P jest zbiorem akceptowanych napisów wejścio-
wych. Dla napisów wejściowych, które nie należą do języka akceptowanego przez
P , P może drukować na taśmie wyjściowej symbol inny niż 1 i zatrzymywać się
albo nawet nie zatrzymywać się. Łatwo udowodnić, że język jest akceptowany przez
program RAM wtedy i tylko wtedy, gdy jest rekurencyjnie przeliczalny. Język jest
akceptowany przez zatrzymującą się dla wszystkich danych maszynę RAM wtedy
i tylko wtedy, gdy jest językiem rekurencyjnym (odnośnie języków rekurencyjnych
i rekurencyjnie przeliczalnych, patrz Hopcroft i Ullman [ 1969 ]).
Rozważmy dwa przykłady programów RAM. Pierwszy definiuje funkcję, drugi ak-
ceptuje język.
Przykład 1.1. Rozważmy funkcję f (n) daną wzorem:
nn , gdy liczba całkowita n
1,
f (n) =
0
w przeciwnym razie.
Napisany w języku Pidgin ALGOL program, który oblicza f (n) mnożąc n samo
przez siebie (n − 1) razy, podaje rys. 1.6.4 Odpowiedni program RAM to rys. 1.7.
Zmienne r1 , r2 i r3 leżą w rejestrach 1, 2 i 3. Nie robimy pewnych oczywistych
usprawnień, więc odpowiedniość między rysunkami 1.6 i 1.7 będzie jasna.
4 Patrz punkt 1.8. w sprawie opisu języka Pidgin ALGOL.
13. 1.2. Maszyny o dostępie swobodnym 19
Odpowiednie
Program RAM instrukcje Pidgin ALGOLu
READ 1 read r1
LOAD 1
JGTZ pos
if r1 0 then write 0
WRITE =0
JUMP endif
pos: LOAD 1
r2 ← r1
STORE 2
LOAD 1
SUB =1
r3 ← r1 − 1
STORE 3
while: LOAD 3
JGTZ continue
while r3 > 0 do
JUMP endwhile
continue: LOAD 2
MULT 1
r2 ← r2 ∗ r1
STORE 2
LOAD 3
SUB =1
r3 ← r3 − 1
STORE 3
JUMP while
endwhile: WRITE 2 write r2
endif: HALT
Rys. 1.7. Program RAM dla nn
begin
d ← 0;
read x;
while x = 0 do
begin
if x = 1 then d ← d − 1 else d ← d + 1;
read x
end;
if d = 0 then write 1
end
Rys. 1.8. Rozpoznawanie napisów z równą liczbą jedynek i dwójek
Przykład 1.2. Rozważmy program RAM, który akceptuje złożony ze wszystkich
napisów o tej samej liczbie jedynek i dwójek język nad alfabetem wejściowym {1, 2}.
Program ten wczytuje każdy symbol wejściowy do rejestru 1, a w rejestrze 2 utrzy-
14. 20 Rozdział 1. Modele obliczania
Odpowiednie
Program RAM instrukcje Pidgin ALGOLu
LOAD =0
d←0
STORE 2
READ 1 read x
while: LOAD 1
while x = 0 do
JZERO endwhile
LOAD 1
SUB =1
if x = 1
JZERO one
LOAD 2
SUB =1
then d ← d − 1
STORE 2
JUMP endif
one: LOAD 2
ADD =1
else d ← d + 1
STORE 2
endif: READ 1 read x
JUMP while
endwhile: LOAD 2
JZERO output
if d = 0 then write 1
HALT
output: WRITE =1
HALT
Rys. 1.9. Program RAM odpowiadający algorytmowi z rysunku 1.8
muje różnicę d pomiędzy liczbą jedynek i dwójek widzianych dotychczas. Po na-
potkaniu znacznika końca 0 sprawdza, czy różnica d jest równa zero i jeżeli tak
jest, drukuje 1 i zatrzymuje się. Zakładamy, że 0, 1 i 2 są wszystkimi możliwymi
symbolami wejściowymi.
Program z rysunku 1.8 zawiera istotne szczegóły tego algorytmu. Równoważny
program RAM podaje rys. 1.9; x leży w rejestrze 1, a d w rejestrze 2.
1.3. Złożoność obliczeniowa programów RAM
Dwie ważne miary algorytmu to jego złożoność czasowa i pamięciowa w funkcji roz-
miaru danych. Jeżeli za złożoność, dla pewnego rozmiaru danch, wziąć złożoność
maksymalną dla wszystkich danych tego rozmiaru, to złożoność tę nazywa się zło-
żonością najgorszego przypadku. Jeżeli za złożoność wziąć „średnią” złożoność dla
wszystkich danych pewnego rozmiaru, tę złożoność nazywana się złożonością ocze-
kiwaną. Złożoność oczekiwana algorytmu jest zwykle trudniejsza do oszacowania
15. 1.3. Złożoność obliczeniowa programów RAM 21
niż złożoność najgorszego przypadku. Konieczne jest jakieś założenie o rozkładzie
danych, a założenia zgodne z rzeczywistością na ogół nie są łatwe (tractable) ma-
tematycznie. Położymy nacisk na złożoność najgorszego przypadku, ponieważ jest
łatwiejsza do potraktowania i ma uniwersalne zastosowanie. Jednakże należy pa-
miętać, że algorytm o najlepszej złożoności najgorszego przypadku niekoniecznie
musi mieć najlepszą złożoność oczekiwaną.
Złożoność czasowa najgorszego przypadku (bądź po prostu złożoność czasowa) pro-
gramu RAM jest funkcją f (n), która dla wszystkich danych rozmiaru n jest maksi-
mum sumy opisującej „czas” zużywany przez każdą wykonywaną instrukcję. Ocze-
kiwana złożoność czasowa jest średnią dla wszystkich danych rozmiaru n tej samej
sumy. Odnośnie pamięci definiujemy podobne terminy, gdy za „«czas» zużywa-
ny przez każdą wykonywaną instrukcję” podstawiamy „«pamięć» zużywaną przez
każdy wykorzystywany rejestr”.
Aby ściśle określić złożoność czasową i pamięciową, musimy określić czas wymagany
dla wykonania każdej instrukcji RAM i pamięć zajmowaną przez każdy rejestr.
Rozważymy dwa takie kryteria kosztu dla programów RAM. Według kryterium
kosztu zuniformizowanego każda instrukcja RAM wymaga jednej jednostki czasu,
a każdy rejestr, jednej jednostki pamięci. O ile nie zaznaczymy inaczej, złożoność
programu RAM będzie mierzona według kryterium kosztu zuniformizowanego.
Druga definicja, niejednokroć bardziej realistyczna, uwzględnia skończoną długość
rzeczywistego słowa pamięciowego i nazywana jest kryterium kosztu logarytmicz-
nego. Niech l(i) będzie następującą funkcją logarytmiczną dla liczb całkowitych:
log | i | + 1, i = 0
l(i) =
1,
i=0
Tabela na rysunku 1.10 przedstawia koszt logarytmiczny t(a) dla trzech możli-
wych postaci operandum a. Rysunek 1.11 przedstawia czas wymagany przez każdą
z instrukcji.
W tym koszcie uwzględniony jest fakt, że reprezentacja liczby całkowitej n w reje-
strze wymaga log n + 1 bitów. Rejestry, jak pamiętamy, mogą zawierać dowolnie
duże liczby całkowite.
Kryterium kosztu logarytmicznego opiera się na grubym założeniu, że koszt wyko-
nania instrukcji jest proporcjonalny do długości operandów tych instrukcji. Roz-
ważmy na przykład koszt instrukcji ADD ∗i. Po pierwsze musimy ustalić koszt
Operandum a Koszt t(a)
=i l(i)
i l(i) + l(c(i))
∗i l(i) + l(c(i)) + l(c(c(i)))
Rys. 1.10. Logarytmiczny koszt operandum
16. 22 Rozdział 1. Modele obliczania
Instrukcja Koszt
1. LOAD a t(a)
2. STORE i l(c(0)) + l(i)
STORE ∗i l(c(0)) + l(i) + l(c(i))
3. ADD a l(c(0)) + t(a)
4. SUB a l(c(0)) + t(a)
5. MULT a l(c(0)) + t(a)
6. DIV a l(c(0)) + t(a)
7. READ i l(input) + l(i)
READ ∗i l(input) + l(i) + l(c(i))
8. WRITE a t(a)
9. JUMP b 1
10. JGTZ b l(c(0))
11. JZERO b l(c(0))
12. HALT 1
Rys. 1.11. Logarytmiczny koszt instrukcji RAM,
gdzie t(a) jest kosztem operandum a, zaś b ozna-
cza etykietę
dekodowania operandum reprezentowanego przez adres. Aby rozpoznać liczbę cał-
kowitą i, trzeba czasu l(i). Następnie, aby odczytać c(i), zawartość rejestru i, oraz
odszukać rejestr c(i) potrzeba czasu l(c(i)). Wreszcie, czytanie zawartości rejestru
c(i) kosztuje l(c(c(i))). Skoro instrukcja ADD ∗i dodaje liczbę całkowitą c(c(i))
do c(0), liczby całkowitej w akumulatorze, widzimy, że realistycznym kosztem, jaki
należy przypisać instrukcji ADD ∗i, jest l(c(0)) + l(i) + l(c(i)) + l(c(c(i))).
Logarytmiczną złożoność pamięciową programu RAM definiujemy jako sumę l(xi )
po wszystkich rejestrach z akumulatorem włącznie, gdzie xi jest liczbą całkowitą
o największej wielkości, umieszczoną w rejestrze i w dowolnej chwili obliczeń.
Jest rzeczą jasną, że dany program może mieć całkowicie różne złożoności czaso-
we zależnie od tego, czy użyje się kosztu zuniformizowanego, czy logarytmicznego.
Jeżeli założenie, że każdą liczbę napotkaną w czasie obliczeń można umieścić w jed-
nym słowie maszynowym, jest realistyczne, to właściwa jest funkcja kosztu zuni-
formizowanego. W przeciwnym razie dla realistycznej analizy złożoności bardziej
właściwy może być koszt logarytmiczny.
Obliczmy złożoność czasową i pamięciową programu RAM, który wylicza wartości
nn w przykładzie 1.1. Złożoność czasowa tego programu jest zdominowana przez
pętlę z instrukcją MULT. Za i-tym razem, gdy wykonywana jest istrukcja MULT,
akumulator zawiera ni , a rejestr 2 zawiera n. Wszystkich wykonywanych instrukcji
MULT jest n − 1. Zgodnie z kryterium kosztu zuniformizowanego każda z instruk-
cji MULT kosztuje jedną jednostkę czasu, stąd na wykonanie wszystkich instrukcji
MULT zużywany jest czas O(n). Zgodnie z kryterium kosztu logarytmicznego kosz-
17. 1.4. Model z zapamiętanym programem 23
tem wykonania i-tej instrukcji MULT jest l(ni ) + l(n) (i + 1) log n i wobec tego
kosztem wszystkich instrukcji MULT jest:
n−1
(i + 1) log n,
i=1
który jest O(n2 log n).
Złożoność pamięciową dyktują liczby całkowite, umieszczone w rejestrach od 0
do 3. Zgodnie z kosztem zuniformizowanym złożoność pamięciowa jest po prostu
O(1). Zgodnie z kosztem logarytmicznym złożoność pamięciowa jest O(n log n),
gdyż największą liczbą całkowitą umieszczoną w dowolnym z rejestrów jest nn ,
a l(nn ) n log n. Wobec tego dla programu z przykładu 1.1 mamy następujące
złożoności:
Koszt Koszt
zuniformizowany logarytmiczny
Złożoność czasowa O(n) O(n2 log n)
Złożoność pamięciowa O(1) O(n log n)
Koszt zuniformizowany jest dla tego programu realistyczny tylko wtedy, gdy poje-
dyncze słowo maszynowe może pomieścić liczbę całkowitą tak dużą, jak nn . Jeżeli
liczba nn jest większa od tego, co można pomieścić w jednym słowie maszynowym,
to nawet logarytmiczna złożoność czasowa jest nieco nierealistyczna, gdyż zakła-
da, że dwie liczby całkowite, i oraz j, mogą być pomnożone przez siebie w czasie
O(l(i)) + l(j)), a nie wiadomo dotychczas, czy tak jest.
Dla programu RAM z przykładu 1.2, przy założeniu, że n jest długością napisu
wejściowego, złożoności czasowe i pamięciowe są następujące:
Koszt Koszt
zuniformizowany logarytmiczny
Złożoność czasowa O(n) O(n log n)
Złożoność pamięciowa O(1) O(log n)
Jeżeli n jest większe od tego, co można pomieścić w jednym słowie maszynowym,
to koszt logarytmiczny dla tego programu jest dość realistyczny.
1.4. Model z zapamiętanym programem
Ponieważ program RAM nie jest przechowywany w pamięci maszyny, nie może
modyfikować sam siebie. Teraz rozważymy inny model komputera, tzw. maszynę
o dostępie swobodnym z zapamiętanym programem (RASP, od random access stored
program), która jest podobna do maszyny RAM z tym, że program jest w pamięci
i może modyfikować sam siebie.
18. 24 Rozdział 1. Modele obliczania
Instrukcja Kodowanie Instrukcja Kodowanie
LOAD i 1 DIV i 10
LOAD =i 2 DIV =i 11
STORE i 3 READ i 12
ADD i 4 WRITE i 13
ADD =i 5 WRITE =i 14
SUB i 6 JUMP i 15
SUB =i 7 JGTZ i 16
MULT i 8 JZERO i 17
MULT =i 9 HALT 18
Rys. 1.12. Kody dla instrukcji RASP
Zbiór instrukcji RASP jest identyczny ze zbiorem instrukcji RAM prócz tego, że
adresowanie pośrednie nie jest dozwolone, gdyż nie jest potrzebne. Jak zobaczymy,
RASP może symulować adresowanie pośrednie przez modyfikacje instrukcji w czasie
wykonania programu.
Ogólna struktura maszyny RASP jest także podobna do struktury RAM, ale za-
kłada się, że program RASP leży w rejestrach pamięci. Każda instrukcja RASP
zajmuje dwa kolejne rejestry. Pierwszy z nich zawiera kod operacji; drugi — ad-
res. Jeżeli adres jest w postaci = i, to pierwszy rejestr będzie kodować także fakt,
że operandum jest literałem, a drugi rejestr będzie zawierać i. Do kodowania in-
strukcji służą liczby całkowite. Rysunek 1.12 pokazuje jeden z możliwych sposobów
kodowania. Na przykład instrukcja LOAD= 32 zostanie zapamiętana za pomocą 2
w jednym rejestrze i 32 w następnym.
Podobnie jak w przypadku RAM, stan RASP może być reprezentowany przez:
1. mapę pamięci c, gdzie c(i) dla i 0 jest zawartością rejestru i, oraz
2. licznik lokalizacji, wskazujący na pierwszy z dwóch kolejnych rejestrów pa-
mięci, z których ma być pobrana bieżąca instrukcja.
Licznik lokalizacji jest nastawiony początkowo na pewien zadany rejestr. Począt-
kowa zawartość rejestrów pamięci to z reguły nie wszędzie 0, gdyż na początku do
pamięci pobierany jest program. Na początku jednak wszystkie prócz skończonej
liczby rejestrów pamięci i akumulator muszą zawierać 0 Po wykonaniu każdej in-
strukcji licznik lokalizacji jest zwiększany o 2, z wyjątkiem przypadków JUMP i,
JGTZ i (gdy akumulator jest dodatni), lub JZERO i (gdy akumulator zawiera 0),
w których licznik lokalizacji jest nastawiany na i. Skutek każdej z instrukcji jest
taki sam jak odpowiedniej instrukcji RAM.
Złożoność czasową programu RASP można zdefiniować bardzo podobnie, jak złożo-
ność czasową programu RAM. Możemy użyć bądź kryterium kosztu zuniformizowa-
nego, bądź logarytmicznego. Kosztem w tym ostatnim przypadku musimy jednak
obciążyć nie tylko operandum, lecz także dostęp do samej instrukcji. Kosztem tego
19. 1.4. Model z zapamiętanym programem 25
dostępu jest l(LC), gdzie LC oznacza zawartość licznika lokalizacji. Na przykład
kosztem wykonania instrukcji ADD = i, umieszczonej w rejestrach j oraz j + 1, jest
l(j) + l(c(0)) + l(i)5 . Kosztem instrukcji ADD i, umieszczonej w rejestrach j oraz
j + 1, jest l(j) + l(c(0)) + l(i) + l(c(i)).
Ciekawe jest pytanie, co różni złożoność programu RAM i odpowiedniego programu
RASP. Odpowiedź nie jest zaskakująca. Dowolne przekształcenie wejścia na wyjście,
które może być wykonane w czasie T (n) przez jeden model, może być wykonane
przez drugi w czasie kT (n) dla pewnej stałej k, bez względu na to, czy weźmie się
koszt zuniformizowany, czy logarytmiczny. Podobnie pamięć wykorzystywana przez
te modele różni się tylko o stały czynnik przy obu miarach kosztu.
Dwa twierdzenia wyrażają te zależności w sposób formalny. Obydwu dowodzi się,
pokazując algorytmy, na mocy których RAM może symulować RASP i odwrotnie.
Twierdzenie 1.1. Jeżeli koszt instrukcji jest zuniformizowany lub logaryt-
miczny, to istnieje taka stała k, że dla każdego programu RAM o złożono-
ści czasowej T (n) istnieje równoważny program RASP o złożoności czasowej
kT (n).
Dowód. Pokazujemy, jak symulować program RAM P przez program RASP. Re-
jestr 1 RASP będzie służyć do tymczasowego przechowywania zawartości akumu-
latora RAM. Z programu P skonstruujemy program RASP PS , który będzie zaj-
mować następne r − 1 rejestrów RASP. Stała r jest zdeterminowana przez program
RAM P . Zawartość rejestru i RAM, i 1, będzie przechowywana w rejestrze r + i
RASP, więc w programie RASP wszystkie odniesienia do pamięci mają adresy o r
większe od odpowiednich odniesień w programie RAM.
Każda instrukcja RAM w P , niewymagająca adresowania pośredniego, jest kodowa-
na bezpośrednio w postaci identycznej instrukcji RASP (z odpowiednio zwiększo-
nymi adresami odniesień do pamięci). Każda instrukcja RAM w P , wymagajająca
adresowania pośredniego, jest przekształcana w sekwencję sześciu instrukcji RASP,
która symuluje adresowanie pośrednie przez modyfikację instrukcji.
Aby objaśnić symulację adresowania pośredniego powinien wystarczyć przykład.
By symulować instrukcję RAM SUB ∗i, gdzie i jest liczbą całkowitą dodatnią,
tworzymy sekwencję instrukcji RASP, która:
1. umieszcza tymczasowo zawartość akumulatora w rejestrze 1,
2. pobiera zawartość rejestru r+i do akumulatora (rejestr r+i RASP odpowiada
rejestrowi i RAM),
3. dodaje r do akumulatora,
4. umieszcza liczbę obliczoną w kroku 3. w polu adresu instrukcji SUB,
5. przywraca zawartość akumulatora z tymczasowego rejestru 1, i wreszcie
6. używa instrukcji SUB stworzonej w kroku 4., by wykonać odejmowanie.
5 Można by doliczyć koszt czytania rejestru j + 1, ale ten koszt nie może różnić się bardzo od
l(j). W tym rozdziale mamy na uwadze nie czynniki stałe, lecz raczej szybkość wzrostu funkcji.
Zatem l(j) + l(j + 1) jest „w przybliżeniu” l(j) z dokładnością co najwyżej do czynnika 3.
20. 26 Rozdział 1. Modele obliczania
Rejestr Zawartość Sens
100 3
STORE 1
101 1
102 1
LOAD r+i
103 r+i
104 5
ADD =r
105 r
106 3
STORE 111
107 111
108 1
LOAD 1
109 1
110 6
SUB b gdzie b jest zawartością
111 −
rejestru i RAM
Rys. 1.13. Symulacja SUB ∗i przez RASP
Rejestr RASP Instrukcja Koszt
j STORE 1 l(j) + l(1) + l(c(0))
j+2 LOAD r+1 l(j + 2) + l(r + i) + l(c(i))
j+4 ADD =r l(j + 4) + l(c(i)) + l(r)
j+6 STORE j + 11 l(j + 6) + l(j + 11) + l(c(i) + r)
j+8 LOAD 1 l(j + 8) + l(1) + l(c(0))
j + 10 SUB − l(j + 10) + l(c(i) + r) + l(c(0))
+l(c(c(i)))
Rys. 1.14. Koszt instrukcji RASP
Na przykład, stosując kodowanie instrukcji RASP podane na rysunku 1.12, i za-
kładając, że sekwencja instrukcji RASP zaczyna się w rejestrze 100, możemy sy-
mulować SUB ∗i za pomocą sekwencji pokazanej na rysunku 1.13. Przesunięcie r
można określić, gdy znana jest liczba instrukcji w programie RASP PS .
Stwierdzamy, że każda instrukcja RAM wymaga co najwyżej sześciu instrukcji
RASP, zatem według kryterium kosztu zuniformizowanego złożonością czasową
programu RASP jest co najwyżej 6T (n). (Zauważmy, że miara ta jest niezależ-
na od sposobu, w jaki określa się „wielkość” danych.)
Według kryterium kosztu logarytmicznego stwierdzamy, że każda instrukcja RAM
I należąca do P jest symulowana przez sekwencję S jednej lub sześciu instrukcji
RASP w PS . Możemy pokazać, iż istnieje taka stała k zależna od P , że koszt
instrukcji należących do S jest nie większy niż k razy koszt instrukcji I.
Na przykład instrukcja RAM SUB ∗i ma koszt:
M = l(c(0)) + l(i) + l(c(i)) + l(c(c(i))).
21. 1.4. Model z zapamiętanym programem 27
Sekwencja S, która symuluje tę instrukcję RAM, jest pokazana na rysunku 1.14.
c(0), c(i), oraz c(c(i)) na rysunku 1.14 odnoszą się do zawartości rejestrów RAM.
Ponieważ PS zajmuje rejestry RASP od 2 do r, mamy j r−11. Ponadto l(x+y)
l(x) + l(y), więc koszt S jest na pewno mniejszy niż:
2l(1) + 4M + 11l(r) < (6 + 11l(r))M.
Wobec tego wnioskujemy, że istnieje stała k = 6 + 11l(r) taka, że jeżeli P ma
złożoność czasową T (n), to PS ma złożoność czasową co najwyżej kT (n).
Twierdzenie 1.2. Jeżeli koszt instrukcji jest zuniformizowany lub logaryt-
miczny, to istnieje taka stała k, że dla każdego programu RASP o złożoności
czasowej T (n) istnieje równoważny program RAM o złożoności czasowej co
najwyżej kT (n).
Dowód. Program RAM, który skonstruujemy, by symulować RASP, będzie używać
adresowania pośredniego, żeby dekodować i symulować instrukcje RASP umiesz-
czone w pamięci RAM. Pewne rejestry RAM będą mieć specjalne przeznaczenie:
rejestr 1 — używany w adresowaniu pośrednim,
rejestr 2 — licznik lokalizacji RASP,
rejestr 3 — pamięć do przechowywania akumulatora RASP.
Rejestr i RASP będzie umieszczony w rejestrze i + 3 RAM dla i 1.
RAM rozpoczyna pracę z programem RASP o skończonej długości, który jest
umieszczony w pamięci, poczynając od rejestru 4. Rejestr 2 — licznik lokaliza-
cji, zawiera 4; rejestry 1 i 3 zawierają 0. Program RAM tworzy pętla symulacji,
która zaczyna się od przeczytania (za pomocą instrukcji RAM LOAD ∗2) instruk-
cji RASP, dekodowania tej instrukcji i rozgałęzienia do jednego z 18 zestawów
instrukcji, z których każdy służy do obsługi jednego typu instrukcji RASP. W razie
niepoprawnego kodu operacji, RAM, jak i RASP zatrzymają się.
Operacje dekodowania i rozgałęzienia są jasne; jako model może służyć przykład
1.2 (chociaż tam dekodowany symbol był czytany z wejścia, a tu jest czytany z pa-
mięci). Podamy przykład instrukcji RAM, które symulują instrukcję 6 RASP, tj.
SUB i. Program ten, pokazany na rysunku 1.15, ulega wywołaniu, gdy c(c(2)) = 6,
a więc gdy licznik lokalizacji wskazuje na rejestr, który zawiera 6, czyli kod SUB.
Pomijamy dalsze szczegóły budowy programu RAM. Jako ćwiczenie pozostawiamy
dowód faktu, że według kryterium kosztu zuniformizowanego lub logarytmicznego,
złożoność czasowa programu RAM jest co najwyżej pewną stałą w iloczynie ze
złożonością czasową RASP.
Z twierdzeń 1.1 i 1.2 wynika, że gdy chodzi o złożoność czasową (a także pa-
mięciową, co pozostawiamy jako ćwiczenie) modele RAM i RASP są równoważne
z dokładnością do czynnika stałego, tj. rząd ich złożoności jest ten sam dla tego
samego algorytmu. Spośród tych dwóch modeli na ogół wykorzystujemy w książce
model RAM, gdyż jest on nieco prostszy.
22. 28 Rozdział 1. Modele obliczania
LOAD 2
Zwiększ licznik lokalizacji o 1, tak aby wskazywał na rejestr,
ADD =1
który zawiera operandum i instrukcji SUB i.
STORE 2
LOAD ∗2
Pobierz i do akumulatora, dodaj 3, wynik umieść w rejestrze
ADD =3
1.
STORE 1
LOAD 3 Pobierz zawartość akumulatora RASP z rejestru 3. Odejmij
SUB ∗1
zawartość rejestru i + 3, wynik umieść z powrotem w rejestrze
STORE 3 3.
LOAD 2
Zwiększ licznik lokalizacji znów o 1, tak by wskazywał teraz
ADD =1
na następną instrukcję RASP.
STORE 2
JUMP a Powróć na początek pętli symulacji (nazwany tutaj „a”).
Rys. 1.15. Symulacja SUB i przez RAM
1.5. Abstrakcje RAM
W wielu sytuacjach nie są potrzebne tak skomplikowane modele obliczeń jak RAM
i RASP. Wobec tego liczne modele definiuje się przez abstrakcję pewnych własności
RAM, zaniedbując inne. Uzasadnieniem dla takich modeli jest fakt, że zaniedby-
wane instrukcje stanowią co najwyżej stały ułamek kosztu każdego efektywnego
algorytu, rozwiązującego problemy, do których model jest stosowany.
i. Program liniowy
Pierwszym rozważanym przez nas modelem jest liniowy program (stright-line pro-
gram). W wielu problemach wystarczy skupić uwagę na klasie programów RAM,
gdzie instrukcje rozgałęzienia są używame tylko do powtarzania jakiejś sekwencji
instrukcji pewną ilość razy, proporcjonalną do n — rozmiaru danych. W tym przy-
padku dla każdego rozmiaru n można program „rozwinąć”, powielając odpowiednią
ilość razy instrukcje, które mają być powtarzane. Daje to sekwencję liniowych (wol-
nych od pętli) i zapewne coraz dłuższych programów, po jednym dla każdego n.
Przykład 1.3. Rozważmy mnożenie dwóch macierzy wymiaru n × n o elementach
ze zbioru liczb całkowitych. Zwykle można oczekiwać nie bez racji, że liczba powtó-
rzeń pętli w programie RAM będzie niezależna od wielkosci elementów macierzy.
Warto więc założyć dla uproszczenia, że dozwolone są tylko pętle z instrukcjami
testu, w których wchodzi w grę wyłącznie n, rozmiar zadania. Oczywisty algorytm
mnożenia macierzy zawiera pętle, które muszą być na przykład wykonane dokład-
nie n razy, gdyż wymaga instrukcji rozgałęzienia, które porównują indeks z n.
Dzięki rozwinięciu programu do postaci liniowej obywamy się bez instrukcji roz-
gałęzienia. Uzasadnienie czerpiemy stąd, że w wielu zadaniach nie więcej niż stały
23. 1.5. Abstrakcje RAM 29
ułamek kosztu programu RAM jest przeznaczony na instrukcje rozgałęzienia, ste-
rujące pętlami. Podobnie często możemy założyć, że instrukcje wejścia tworzą tylko
stały ułamek kosztu programu i wykluczyć je, zakładając, że skończony zbiór wejść,
wymagany przy pewnym n, znajduje się w pamięci, gdy program rozpoczyna pracę.
Skutki adresowania pośredniego można oszacować przy ustalonym n, o ile rejestry,
służące do adresowania pośredniego, zawierają wartości zależne tylko od n, a nie
od wartości zmiennych wejściowych. Wobec tego zakładamy, że nasze programy
liniowe są pozbawione adresowania pośredniego.
Ponadto skoro każdy z programów liniowych może zawierać odniesienia tylko do
skończonej liczby rejestrów pamięci, wygodnie jest nazwać rejestry wykorzystywane
przez program. Rejestry podlegają wobec tego raczej odnosieniom przez adresy
symboliczne (symbole lub napisy złożone z liter), niż przez liczby całkowite.
Z repertuaru RAM po usunięciu wymagań co do READ, JUMP, JGTZ i JZE-
RO pozostają nam LOAD, STORE, WRITE, HALT i operacje arytmetyczne. Nie
potrzebujemy HALT, gdyż koniec programu musi oznaczać zatrzymanie. Możemy
obyć się bez WRITE, wyróżniając pewne adresy symboliczne jako zmienne wyjścio-
we; informacją wyjścia programu są wartości tych zmiennych w chwili zakończenia.
Możemy wreszcie włączyć LOAD i STORE do operacji arytmetycznych, zastępując
sekwencje, takie jak:
LOAD a
ADD b
STORE c
przez c ← a+b. Cały repertuar instrukcji programu liniowego jest więc następujący:
x←y+z
x←y−z
z←y∗ z
z ← y/z
x←i
gdzie x, y i z są adresami symbolicznymi (czyli zmiennymi), a i jest stałą. Łatwo
zauważyć, że dowolna sekwencja LOAD, STORE i operacji arytmetycznych na
akumulatorze może być zastąpiona pewną sekwencją pięciu powyższych instrukcji.
Programowi liniowemu są przyporządkowane dwa wyróżnione zbiory zmiennych:
jego wejścia i wyjścia. Funkcja obliczana przez program liniowy jest zbiorem warto-
ści zmiennych wyjściowych (w zadanym porządku), wyrażanych względem wartości
zmiennych wejściowych.
Przykład 1.4. Rozważmy obliczanie wielomianu:
p(x) = an xn + an−1 xn−1 + · · · + a1 x + a0
Zmiennymi wejściowymi są współczynniki a0 , a1 , . . . , an i symbol x. Zmienną wyj-
ściową jest p. Według reguły Hornera p(x) obliczamy jako:
24. 30 Rozdział 1. Modele obliczania
n=1 n=2 n=3
t ← a1 ∗ x t ← a2 ∗ x t ← a3 ∗ x
p ← t + a0 t←t + a1 t←t + a2
t←t ∗ x t←t ∗ x
p←t + a0 t←t + a1
t←t ∗ x
p←t + a0
Rys. 1.16. Programy liniowe, odpowiadające regule Hornera
1. a1 x + a0 dla n = 1,
2. (a2 x + a1 )x + a0 dla n = 2,
3. ((a3 x + a2 )x + a1 )x + a0 dla n = 3.
Wyrażeniom tym odpowiadają programy liniowe z rysunku. 1.16. Reguła Hornera
dla dowolnego n powinna być jasna. Dla każdego n mamy program liniowy o 2n
krokach, który oblicza wielomian n-tego stopnia. W rozdziale 12. pokażemy, że
aby obliczyć wartość wielomianu n-tego stopnia, gdy współczynniki są dane jako
wejście, konieczne jest n mnożeń i n dodawań. Reguła Hornera jest optymalna
według modelu programu liniowego.
Według modelu programu liniowego obliczeń złożonością czasową ciągu programów
jest liczba kroków n-tego programu jako funkcja n. Reguła Hornera na przykład
daje ciąg o złożoności czasowej 2n. Zauważmy, że mierzenie złożoności czasowej to
tyle, co mierzenie liczby operacji arytmetycznych. Złożonością pamięciową ciągu
programów jest liczba wymienionych zmiennych także jako funkcja n. Programy
z przykładu 1.4 mają złożoność pamięciową n + 4.
Definicja. Gdy chodzi o model programu liniowego, mówimy, że problem
ma złożoność czasową lub pamięciową OA (f (n)), jeżeli istnieje ciąg progra-
mów, którego złożoność czasowa lub pamięciowa sięga co najwyżej cf (n) dla
pewnej stałej c. (Zapis OA (f (n)) oznacza „rząd f (n) kroków, gdy modelem
jest programu liniowy”. Wskaźnik A oznacza „arytmetyczny”, co jest główną
cechą kodu liniowego.) Obliczanie wartości wielomianu ma złożoność czasową
OA (n), jak i pamięciową OA (n).
ii. Obliczenia na bitach
Model programu liniowego opiera się oczywiście na funkcji kosztu zuniformizowane-
go. Jak wspomnieliśmy, koszt ten jest właściwy, gdy wszystkie obliczane wielkości
są „rozsądne”. Istnieje prosta modyfikacja modelu programu liniowego, która jest
odbiciem funkcji kosztu logarytmicznego. Model ten, nazywamy przez nas oblicza-
niami na bitach, jest zasadniczo taki sam jak kod liniowy za wyjątkiem tego, że:
1. zakładamy, że wszystkie zmienne mają wartość 0 lub 1, tj. są bitami.
25. 1.5. Abstrakcje RAM 31
Rys. 1.17. (a)Program dodawania na bitach, (b) równoważny układ logiczny
2. używamy operacji logicznych, a nie arytmetycznych.6 Piszemy ∧ dla i, ∨ dla
lub, ⊕ dla rozłącznego lub i ¬ dla nie.
Zgodnie z modelem bitowym operacje arytmetyczne na liczbach całkowitych i i j
wymagają przynajmniej l(i)+l(j) kroków, co jest odbiciem logarytmicznego kosztu
operandów. Faktycznie, mnożenie i dzielenie według najlepszych znanych algoryt-
mów wymaga wiecej niż l(i) + l(j) kroków, by pomnożyć lub podzielić i przez j.
Na oznaczenie rzędu wielkości w modelu obliczeń na bitach stosujemy OB . Model
bitowy przydaje się, gdy chcemy mówić o podstawowych operacjach, jak opera-
cje arytmetyczne, które są pierwotne w innych modelach. Na przykład w modelu
programu liniowego mnożenie dwóch n-bitowych liczb całkowitych jest do wyko-
nania w OA (1) kroku, natomiast w modelu bitowym najlepszy znany wynik to
OB (n log n log log n) kroków.
6 Stąd zbiór instrukcji RAM musi zawierać te operacje.
26. 32 Rozdział 1. Modele obliczania
Innym zastosowaniem modelu bitowego są układy logiczne. Programy liniowe z bi-
towymi wejściami i operacjami odpowiadają wzajemnie jednoznacznie logiczno-
kombinatorycznym układom do obliczania układów funkcji boolowskich. Liczba
kroków programu jest liczbą elemetów logicznych układu.
Przykład 1.5. Rysunek 1.17(a) przedstawia program dodawania dwóch dwubito-
wych liczb [ a1 a0 ] i [ b1 b0 ]. Zmiennymi wyjściowymi są c2 , c1 i c0 , takie że [ a1 a0 ] +
[ b1 b0 ] = [ c2 c1 c0 ]. Program liniowy z rysunku 1.17(a) oblicza:
c0 = a 0 ⊕ b 0 ,
c1 = ((a0 ∧ b0 ) ⊕ a1 ) ⊕ b1 ,
c2 = ((a0 ∧ b0 ) ∧ (a1 ∨ b1 )) ∨ (a1 ∧ b1 ).
Rys. 1.17(b) przedstawia odpowiedni układ logiczny. Dowód, że dodawanie dwu
n-bitowych liczb można wykonać w OB (n) krokach zostawiamy jako ćwiczenie.
iii. Operacje na wektorach bitowych
Zamiast ograniczać wartość zmienej do 0 lub 1, można pójść w przeciwnym kie-
runku i pozwolić, by zmienne przybierały jako wartość dowolny wektor bitów. Fak-
tycznie, wektory bitów o danej długości odpowiadają w oczywisty sposób liczbom
całkowitym, więc nie wykraczamy istotnie poza model RAM, tj. w razie potrzeby
wciąż zakładamy nieograniczoną wielkość rejestrów.
Jednakże, jak zobaczymy w tych kilku algorytmach, w których stosowany jest mo-
del z wektorami bitów, długość używanych wektorów znacznie przewyższa liczbę
bitów potrzebnych do przedstawienia wielkości zadania. Wielkość liczb całkowitych
używanych w algorytmie będzie na ogół tego samego rzędu co wielkość zadania. Na
przykład, rozwiązując problemy dróg w grafie o 100 wierzchołkach, można by za-
stosować wektory bitów o długości 100 do wskazywania, czy istnieje droga z danego
wierzchołka v do każdego z wierzchołków grafu; tzn. w wektorze dla wierzchołka v
na i-tej pozycji jest 1 wtedy i tylko wtedy, gdy istnieje droga z v do vi . W przy-
padku tego samego problemu można używać także liczb całkowitych (przykładowo
do liczenia i indeksowania) i będą one mieć wielkość zapewne rzędu 100. Stąd dla
liczb całkowitych będzie potrzebne 7 bitów, podczas gdy dla wektorów 100.
Różnica nie musi być jednak aż tak znaczna, ponieważ większość komputerów wy-
konuje operacje logiczne na wektorach bitów o długości pełnego słowa w cyklu
jednej instrukcji. Zatem wektory bitów o długości 100 mogą podlegać manipula-
cjom w trzech lub czterech krokach, w porównaniu z jednym krokiem dla liczb
całkowitych. Niemniej wyniki na temat czasowej i pamięciowej złożoności algoryt-
mów dla modelu z wektorami bitów należy brać cum grano salis, gdyż wielkość
zadania, przy której model ten staje się nierealistyczny jest znacznie mniejsza, niż
dla modelu RAM i modelu kodu liniowego. Na oznaczenie rzędu wielkości w modelu
z wektorami bitowymi stosujemy OBV .
27. 1.5. Abstrakcje RAM 33
iv. Drzewa decyzji
Rozważyliśmy trzy abstrakcje RAM, które zaniedbywały instrukcje rozgałęzienia
i obejmowały tylko kroki związane z obliczaniem. Istnieją pewne problemy, w któ-
rych można realistycznie uznać liczbę instrukcji rozgałęzienia za podstawową miarę
złożoności. W sortowaniu na przykład, wyjścia są identyczne z wejściami, wyjąwszy
uporządkowanie. Rozsądnie jest więc rozważyć model, w którym wszystkie kroki są
rozgałęzieniami od dwóch ramionach, i polegają na porównaniu dwóch wielkości.
Częstą reprezentacją programu z rozgałęzieniami jest drzewo binarne7 , zwane drze-
wem decyzji. Każdy wewnętrzny wierzchołek reprezentuje decyzję. Test reprezen-
towany przez korzeń jest wykonywany jako pierwszy, po czym zależnie od wyniku
„sterowanie” przechodzi do jednego z synów. Ogólnie, sterowanie tak długo prze-
chodzi od wierzchołka do jednego z synów, przy czym wybór zależy zawsze od testu
na wierzchołku, aż dotrze do liścia. Wynik jest dostępny na tym liściu.
Przykład 1.6. Rys. 1.18 pokazuje drzewo decyzji dla programu, który sortuje trzy
liczby a, b i c. Testy wskazują owale wokół porównań na wierzchołkach; sterowanie
przechodzi na lewo, jeżeli test daje odpowiedź „tak”, i na prawo, jeżeli „nie”.
Złożonością czasową drzewa decyzji jest jego wysokość jako funkcja rozmiaru zada-
nia. Zwykle chcemy oszacować maksimum liczby porównań, które trzeba wykonać,
by dojść z korzenia do liścia. Zakładając model drzewa decyzji (porównań), ozna-
czamy rząd wielkości przez OC . Liczba wierzchołków może być znacznie większa
od wysokości drzewa. Na przykład drzewo decyzji, które sortuje n liczb, musi mieć
przynajmniej n! liści, lecz wystarczy, że ma wysokość około n log n.
Rys. 1.18. Drzewo decyzji
7W sprawie definicji dotyczących drzew patrz punkt 2.4.
28. 34 Rozdział 1. Modele obliczania
1.6. Pierwotny model obliczania: maszyna Turinga
By udowodnić, że dana funkcja wymaga pewnego minimum czasu, potrzebujemy
modelu, który jest równie ogólny, lecz bardziej pierwotny od rozpatrzonych. Reper-
tuar instrukcji ma być jak najbardziej ograniczony, jednak model nie tylko musi
obliczać to wszystko, co oblicza RAM, lecz czynić to niemal równie szybko. Według
definicji, której użyjemy, „niemal” oznacza „równoważność wielomianową”.
Definicja. Mówimy, że funkcje f1 (n) i f2 (n) są równoważne wielomianowo,
jeżeli istnieją wielomiany p1 (x) i p2 (x) takie, że dla wszystkich wartości n,
f1 (n) p1 (f2 (n)) i f2 (n) p2 (f1 (n)).
Przykład 1.7. Funkcje f1 (n) = 2n2 i f2 (n) = n5 są równoważne wielomianowo;
niech na przykład p1 (x) = 2x, skoro 2n2 2n5 , i p2 (x) = x3 , skoro n5 (2n2 )3 .
2 n
Natomiast n i 2 nie są równoważne wielomianowo, gdyż nie istnieje wielomian
p(x), taki że dla każdego n, p(n2 ) 2n .
Obecnie jedynym zakresem, w którym do dowodu dolnych ograniczeń złożono-
ści obliczeniowej możemy użyć ogólnych modeli, takich jak maszyna Turinga, jest
„wyższy zakres”. Na przykład w rozdziale 11. pokażemy, że pewne problemy wy-
magają wykładniczego czasu i pamięci. (f (n) jest funkcją wykładniczą, jeżeli ist-
n n
nieją stałe c1 > 0, k1 > 1, c2 > 0 i k2 > 1 takie, że c1 k1 f (n) c2 k2 dla
wszystkich, prócz skończonej liczby wartości n.) W wykładniczym zakresie funkcje
wielomianowo równoważne są zasadniczo tożsame, gdyż dowolna funkcja, która jest
równoważna wielomianowo z funkcją wykładniczą, jest funkcją wykładniczą.
Jest więc powód, by używać pierwotnego modelu, w którym złożoność czasowa
problemów jest równoważna wielomianowo ich złożoności w modelu RAM. Mo-
del, którego używamy — maszyna Turinga z wieloma taśmami — może wymagać
czasu8 ([ f (n) ]4 ), lecz nie więcej, aby wykonać to, co RAM z funkcją kosztu loga-
rytmicznego wykonuje w czasie f (n). Złożoność czasowa z użyciem modelu RAM
i maszyny Turinga będzie równoważna wielomianowo.
Definicja. Maszynę Turinga z wieloma taśmami (TM) przedstawia rys. 1.19.
Składa się ona z pewnej liczby k nieskończończonych w prawo taśm. Każda
taśma jest podzielona na komórki, a każda z nich zawiera jeden symbol spo-
śród skończonej liczby symboli taśm. Jedna komórka na każdej taśmie jest
czytana przez głowicę taśmy; głowica może czytać i pisać. Działanie maszyny
Turinga jest określone przez pierwotny program, zwany sterowaniem skończo-
nym. Sterowanie skończone jest zawsze w jednym ze skończonej liczby stanów,
które można uznać pozycje w programie.
Jeden krok obliczeniowy maszyny Turinga zbudowany jest następująco. Zgodnie
z bieżącym stanem sterowania skończonego i symbolami taśm, które ustawione
8 Można udowodnić dokładniejsze ograniczenie: O([ f (n) log f (n) log log f (n) ]2 ), lecz skoro nie
rozważamy tu czynników wielomianowych, wynik z czwartą potęgą wystarczy (patrz p. 7.5).
29. 1.6. Pierwotny model obliczania: maszyna Turinga 35
Rys. 1.19. Maszyna Turinga z wieloma taśmami
są pod (są czytane przez ) każdą z głowic taśm, maszyna Turinga może wykonać
dowolną lub wszystkie z poniższych operacji.
1. Zmienić stan sterowania skończonego.
2. Wydrukować nowe symbole taśm na bieżących symbolach w dowolnej lub
każdej z komórkek pod głowicami taśm.
3. Przesunąć niezależnie dowolną lub każdą głowicę o jedną komórkę w lewo (L),
lub w prawo (R), lub pozostawić głowice bez ruchu (S).
Formalnie oznaczamy k-taśmową maszynę Turinga przez siódemkę uporządkowaną:
(Q, T, I, δ, b, q0, qf ),
gdzie:
1. Q jest zbiorem stanów.
2. T jest zbiorem symboli taśm.
3. I jest zbiorem symboli wejściowych; I ⊆ T .
4. b, element T − I, jest białym znakiem.
5. q0 jest stanem początkowym.
6. qf jest stanem końcowym (lub akceptującym).
7. δ, funkcja następnego ruchu, odwzorowuje podzbiór Q × T k w rodzinę pod-
zbiorów Q × (T × L, R, S)k . Tj. dla pewnych (k + 1)-elementowych układów
uporządkowanych, złożonych ze stanu i k symboli taśm daje nowy stan oraz
k par uporządkowanych, złożonych z nowego symbolu taśm i kierunku dla
głowicy. Załóżmy, że δ(q, a1 , a2 , . . . , ak ) = (q , (a1 , d1 ), (a2 , d2 ), . . . , (ak , dk )
i maszyna Turinga jest w stanie q i dla 1 i k, i-ta głowica czyta symbol
taśm ai . Wtedy w jednym ruchu maszyna Turinga wchodzi w stan q , zmienia
symbol ai na ai i przesuwa i-tą głowicę w kierunku di dla 1 i k.
30. 36 Rozdział 1. Modele obliczania
Rys. 1.20. Maszyna Turinga przetwarzająca 01110
Maszyna Turinga może rozpoznawać język. Symbole taśm maszyny Turinga obej-
mują alfabet języka, zwany symbolami wejściowymi, specjalny biały znak, oznaczony
przez b, i prócz tego być może inne symbole. Początkowo pierwsza taśma zawie-
ra napis w symbolach wejściowych, po jednym symbolu w komórce, poczynając
od komórki położonej najbardziej na lewo. Wszystkie komórki na prawo od ko-
mórek zawierających napis wejściowy są puste. Wszystkie inne taśmy są zupełnie
puste. Napis w symbolach wejściowych jest akceptowany wtedy i tylko wtedy, gdy
maszyna Turinga, zaczynając od wyróżnionego stanu początkowego ze wszystkimi
głowicami na lewych końcach taśm wykonuje ciąg ruchów, w którym przechodzi
kiedyś w stan akceptujący. Język akceptowany przez maszynę Turinga jest zbiorem
akceptowanych w powyższym sensie napisów w symbolach wejściowych.
Przykład 1.8. Na rysunku 1.20 maszyna Turinga z dwiema taśmami rozpoznaje
palindromy9 nad alfabetem {0, 1} w następujący sposób.
9 Napis, który od tyłu można odczytać, tak jak do przodu, np. 0100010, nazywa się palindromem.
31. 1.6. Pierwotny model obliczania: maszyna Turinga 37
(Nowy symbol,
Stan Symbol ruch głowicy) Nowy
bieżący Taśma 1 Taśma 2 Taśma 1 Taśma 2 stan Komentarze
q0 0 b 0,S X,R q1 Jeżeli dana nie jest pusta, drukuj X
1 b 1,S X,R q1 na taśmie 2 i przesuń głowicę w pra-
b b b,S b,S q5 wo; przejdź do stanu q1 . W przeciw-
nym razie przejdź do stanu q5 .
q1 0 b 0,R 0,R q1 Pozostawaj w stanie q1 , kopiując ta-
1 b 1,R 1,R q1 śmę 1 na 2, aż dotrzesz do b na ta-
b b b,S b,L q2 śmie 1. Wtedy przejdź do stanu q2 .
q2 b 0 b,S 0,L q2 Pozostaw bez ruchu głowicę taśmy 1,
b 1 b,S 1,L q2 a 2 przesuwaj w lewo, aż dotrzesz do
b X b,L X,R q3 X. Wtedy przejdź do stanu q3 .
q3 0 0 0,S 0,R q4 Sterowanie na przemian w stanie q3
1 1 1,S 1,R q4 i q4 . W q3 porównaj symbole na obu
q4 0 0 0,L 0,S q3 taśmach, przesuń głowicę taśmy 2
0 1 0,L 1,S q3 w prawo i przejdź do q4 . W q4 przejdź
1 0 1,L 0,S q3 do q5 i akceptuj, jeżeli głowica dotar-
1 1 1,L 1,S q3 ła do b na taśmie 2. W przeciwnym
0 b 0,S b,S q5 razie przesuń głowicę taśmy 1 w le-
1 b 1,S b,S q5 wo i wróć do q3 . Alternacja q3 , q4 za-
pobiega przekroczeniu lewego końca
taśmy przez głowicę wejściową.
q5 Akceptuj
Rys. 1.21. Funkcja następnego ruchu maszyny Turinga rozpoznającej palindromy
1. Pierwszą komórkę na taśmie 2 oznaczona specjalny symbol X; dane są kopio-
wane z taśmy 1, gdzie początkowo występują (patrz rys. 1.20a), na taśmę 2
(patrz rys. 1.20b).
2. Następnie głowica taśmy 2 jest przesuwana na X (rys. 1.20c),
3. Głowica taśmy 2 jest wielokrotnie przesuwana o jedną komórkę w prawo,
głowica taśmy 1, o jedną komórkę w lewo, i porównywane są odpowiednie
symbole. Jeżeli wszystkie symbole pasują, dane tworzą palindrom i maszyna
wchodzi w stan akceptujący q5 . W przeciwnym razie maszyna Turinga nie
będzie mogła w pewnej chwili zrobić żadnego poprawnego ruchu; zatrzyma
się bez akceptowania.
Funkcję następnego ruchu tej maszynie Turinga podaje tablica z rysunku 1.21.
Działanie maszyny Turinga można opisać formalnie za pomocą „chwilowych opi-
sów”. Opis chwilowy (ID, od instantaneous description) k-taśmowej maszyny Tu-
ringa M jest to k-elementowy układ uporządkowany (α1 , α2 , . . . , αk ), gdzie αi jest
napisem postaci xqy takim, że xy jest napisem na i-tej taśmie M (pomijając koń-
32. 38 Rozdział 1. Modele obliczania
(q0 010, q0) –– (q0 010, Xq1 )
–– (0q1 10, X0q1 )
–– (01q1 0, X01q1 )
–– (010q1 , X010q1 )
–– (010q2 , X01q2 0)
–– (010q2 , X0q2 10)
–– (010q2 , Xq2 010)
–– (010q2 , q2 X010)
–– (01q3 0, Xq3 010)
–– (01q4 0, X0q4 10)
–– (0q3 10, X0q3 10)
–– (0q4 10, X01q4 0)
–– (q3 010, X01q3 0)
–– (q4 010, X010q4 )
–– (q5 010, X010q5 )
Rys. 1.22. Ciąg pewnych ID maszyny Turinga
cowe białe znaki), a q jest bieżącym stanem M . Symbol bezpośrednio na prawo od
i-tego q jest symbolem obecnie czytanym na i-tej taśmie.
Gdy opis chwilowy D1 staje się opisem chwilowym D2 po jednym ruchu maszyny
Turinga M , piszemy D1 –– D2 . Jeżeli D1 –– D2 –– · · · –– Dn dla pewnego n 2,
M M M M
+ +
*
piszemy D1 –– Dn . Jeżeli D = D lub D –– D , piszemy D –– D . ( –– czytaj „prze-
M M M
chodzi w”.)
k-taśmowa maszyna Turinga M = (Q, T, I, δ, b, q0, qf ) akceptuje napis a1 a2 · · · an ,
gdzie a-ki należą do I, jeżeli (q0 a1 a2 · · · an , q0 , q0 , . . . , q0 ) –– (α1 , α2 , . . . , αk ), dla
M
*
pewnych αi , wśród których jest qf .
Przykład 1.9. Ciąg opisów chwilowych, który wyznacza maszyna Turinga z ry-
sunku 1.21, gdy otrzymuje dane 010, jest przedstawiony na rysunku 1.22. Skoro q5
jest stanem końcowym, ta maszyna Turinga akceptuje 010.
Oprócz naturalnej interpretacji, przy której maszyna Turinga akceptuje język, moż-
liwa jest interpretacja, że jest to urządzenie do obliczania funkcji f . Argumenty tej
funkcji są zakodowane na taśmie wejściowej jako napis x, przy czym rozgranicza
je specjalny znacznik, taki jak #. Jeżeli maszyna Turinga zatrzymuje się z liczbą
całkowitą y (wartość funkcji) zapisaną na taśmie, która jest wyróżniona jako taśma
wyjściowa, mówimy, że f (x) = y. Stąd proces obliczania funkcji jest nieco inny niż
akceptowania języka.
33. 1.7. Związek pomiędzy maszyną Turinga i modelem RAM 39
Złożoność czasowa T (n) maszyny Turinga M jest to maksimum liczby ruchów, któ-
re wykonuje M przy przetwarzaniu dowolnych danych o długości n, dla wszystkich
danych o długości n. Jeżeli dla pewnych danych o długości n maszyna Turinga nie
zatrzymuje się, to T (n) jest nieokreślona dla tej wartości n. Złożoność pamięciowa
S(n) maszyny Turinga jest to maksimum odległości od lewego końca taśmy, na
którą dociera głowica taśmy przy przetwarzaniu dowolnych danych o długości n.
Jeżeli głowica taśmy przesuwa się w prawo bez końca, S(n) jest nieokreślona. Na
oznaczenie rzędu wielkości, gdy modelem jest maszyna Turinga, używamy OTM .
Przykład 1.10. Złożonością czasową maszyny Turinga z rysunku 1.21 jest T (n) =
4n + 3, a złożonością pamięciową S(n) = n + 2, jak można się przekonać, gdy dane
faktycznie są palindromem.
1.7. Związek pomiędzy maszyną Turinga
i modelem RAM
Głównym zastosowaniem modelu maszyny Turinga (TM) jest wyznaczanie dolnych
ograniczeń wiążących czas lub pamięć, które są konieczne do rozwiązania danego
problemu. W większości przypadków możemy wyznaczyć dolne ograniczenia tylko
z dokładnością do funkcji równoważnej wielomianowo. Wyprowadzenie dokładniej-
szych ograniczeń wymaga dalszych szczegółów danego modelu. Na szczęście obli-
czenia RAM i RASP są równoważne wielomianowo z obliczeniami TM.
Rozważmy związek pomiędzy modelami RAM i TM. Rzecz jasna RAM może symu-
lować k-taśmową maszynę TM, przechowując jedną komórkę taśmy TM w każdym
ze swoich rejestrów. W szczególności i-ta komórka taśmy j może być zapamięta-
na w rejestrze ki + j + c, gdzie c jest stałą dobraną tak, by zapewnić maszynie
RAM pewną „pamięć roboczą”. Pamięć robocza zawiera k rejestrów, w których
przechowywane są pozycje k głowic TM. Komórki taśmy TM mogą być czytane
przez RAM dzięki adresowaniu pośredniemu poprzez rejestry zawierające pozycje
głowicy tej taśmy.
Załóżmy, że TM ma złożoność czasową T (n) n. Wtedy RAM może przeczytać
dane, umieścić je w rejestrach, które reprezentują pierwszą taśmę, i symulować
TM w czasie O(T (n)), jeżeli używamy kryterium kosztu zuniformizowanego, lub
O(T (n) log T (n)), jeżeli używamy funkcji kosztu logarytmicznego. W obu przypad-
kach czas na maszynie RAM jest ograniczony od góry przez wielomianową funkcję
czasu na TM, gdyż dowolna funkcja O(T (n) log T (n)) jest z pewnością O(T 2 (n)).
Odwrotne twierdzenie zachodzi tylko wtedy, gdy dla maszyn RAM obowiązuje koszt
logarytmiczny. Gdy obowiązuje koszt zuniformizowany program RAM o n krokach
n
bez wejścia może obliczać tak duże liczby, jak 22 , co wymaga 2n komórek TM
już przy zapisie i odczycie. Wobec tego gdy obowiązuje koszt zuniformizowany, nie
ma żadnej wyraźnej zależności wielomianowej pomiędzy maszynami RAM i TM
(ćwiczenie 1.19).
34. 40 Rozdział 1. Modele obliczania
Rys. 1.23. Reprezentacja RAM w TM
Chociaż ze względu na prostotę wolimy używać kosztu zuniformizowanego w ana-
lizie algorytmów, musimy go odrzucić w dowodach dolnych ograniczeń złożoności
czasowej. Model RAM z kosztem zuniformizowanym jest zupełnie rozsądny, gdy
liczby nie rosną nadmiernie wraz z rozmiarem zadania. Lecz, jak mówiliśmy wcze-
śniej, model RAM „zamiata pod dywan” wielkość tych liczb i tylko wyjątkowo
można otrzymać użyteczne ograniczenia dolne. Dla kosztu logarytmicznego mamy
jednakże następujące twierdzenie.
Twierdzenie 1.3. Niech L będzie językiem akceptowanym przez program
RAM o złożoności czasowej T (n) według kryterium kosztu logarytmicznego.
Jeżeli ten program RAM nie wykonuje mnożenia i dzielenia, to L na maszynie
Turinga z wieloma taśmami ma złożoność co najwyżej O(T 2 (n)).
Dowód. Wszystkie rejestry RAM, które nie zawierają 0, reprezentujemy tak, jak
na rysunku 1.23. Taśma zawiera ciąg par (ij , cj ), zapisanych w postaci binarnej bez
wiodących zer i rozgraniczonych znacznikami. Dla każdego j, cj jest zawartością
rejestru ij RAM. Zawartość akumulatora leży w postaci binarnej na drugiej taśmie;
trzecia taśma służy jako pamięć robocza. Dwie inne taśmy zawierają wejście i wyj-
ście RAM. Krok programu RAM jest reprezentowany przez skończony zbiór stanów
TM. Nie będziemy opisywać symulacji dowolnej instrukcji RAM, lecz rozważymy
tylko instrukcje ADD ∗20 i STORE 30, co wiele wyjaśni. Dla ADD ∗20 możemy
zbudować TM do wykonania następujących czynności.
1. Szukaj na taśmie 1 zapisu dla rejestru 20 RAM, tj. sekwencji ##10100#.
Jeżeli jest taka, to następującą po tej sekwencji liczbę całkowitą, która musi
być zawartością rejestru 20, umieść na taśmie 3. Jeżeli takiej nie ma, zatrzy-
maj się. Zawartością rejestru 20 jest 0, wobec czego adresowanie pośrednie
jest niemożliwe.
2. Szukaj na taśmie 1 zapisu dla rejestru RAM, którego numer jest umieszczony
na taśmie 3. Jeżeli jest taki zapis, kopiuj zawartość tego rejestru na taśmę 3.
Jeżeli nie ma, umieść tam 0.
3. Dodaj liczbę umieszczoną na taśmie 3 w kroku 2. do zawartości akumulatora,
który jest utrzymywany na taśmie 2.
Aby symulować instrukcję STORE 30, można zbudować TM do wykonania nastę-
pujących czynności:
1. Szukaj zapisu dla rejestru 30 RAM, tj. ##11110#.
2. Jeżeli jest taki, kopiuj wszystko, co znajduje się na prawo od ##11110#,
prócz liczby całkowitej bezpośrednio na prawo (stara zawartość rejestru 30),
na taśmę 3. Następnie kopiuj zawartość akumulatora (taśma 2) bezpośrednio
na prawo od ##11110# i dopisz do niej napis skopiowany na taśmę 3.