Facebook - konwersja
Czytaj fragment
Pobierz fragment

Klasyczne problemy informatyki w Pythonie - ebook

Data wydania:
1 stycznia 2020
Format ebooka:
EPUB
Format EPUB
czytaj
na czytniku
czytaj
na tablecie
czytaj
na smartfonie
Jeden z najpopularniejszych formatów e-booków na świecie. Niezwykle wygodny i przyjazny czytelnikom - w przeciwieństwie do formatu PDF umożliwia skalowanie czcionki, dzięki czemu możliwe jest dopasowanie jej wielkości do kroju i rozmiarów ekranu. Więcej informacji znajdziesz w dziale Pomoc.
Multiformat
E-booki w Virtualo.pl dostępne są w opcji multiformatu. Oznacza to, że po dokonaniu zakupu, e-book pojawi się na Twoim koncie we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu.
, MOBI
Format MOBI
czytaj
na czytniku
czytaj
na tablecie
czytaj
na smartfonie
Jeden z najczęściej wybieranych formatów wśród czytelników e-booków. Możesz go odczytać na czytniku Kindle oraz na smartfonach i tabletach po zainstalowaniu specjalnej aplikacji. Więcej informacji znajdziesz w dziale Pomoc.
Multiformat
E-booki w Virtualo.pl dostępne są w opcji multiformatu. Oznacza to, że po dokonaniu zakupu, e-book pojawi się na Twoim koncie we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu.
(2w1)
Multiformat
E-booki sprzedawane w księgarni Virtualo.pl dostępne są w opcji multiformatu - kupujesz treść, nie format. Po dodaniu e-booka do koszyka i dokonaniu płatności, e-book pojawi się na Twoim koncie w Mojej Bibliotece we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu przy okładce. Uwaga: audiobooki nie są objęte opcją multiformatu.
czytaj
na tablecie
Aby odczytywać e-booki na swoim tablecie musisz zainstalować specjalną aplikację. W zależności od formatu e-booka oraz systemu operacyjnego, który jest zainstalowany na Twoim urządzeniu może to być np. Bluefire dla EPUBa lub aplikacja Kindle dla formatu MOBI.
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
czytaj
na czytniku
Czytanie na e-czytniku z ekranem e-ink jest bardzo wygodne i nie męczy wzroku. Pliki przystosowane do odczytywania na czytnikach to przede wszystkim EPUB (ten format możesz odczytać m.in. na czytnikach PocketBook) i MOBI (ten fromat możesz odczytać m.in. na czytnikach Kindle).
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
czytaj
na smartfonie
Aby odczytywać e-booki na swoim smartfonie musisz zainstalować specjalną aplikację. W zależności od formatu e-booka oraz systemu operacyjnego, który jest zainstalowany na Twoim urządzeniu może to być np. iBooks dla EPUBa lub aplikacja Kindle dla formatu MOBI.
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
Czytaj fragment
Pobierz fragment
74,00
Najniższa cena z 30 dni: 74,00 zł

Klasyczne problemy informatyki w Pythonie - ebook

Problemy informatyki, które wydają się nowe lub unikatowe, często są zakorzenione w klasycznych algorytmach, technikach kodowania czy zasadach inżynierii. I klasyczne metody są nadal najlepszym sposobem ich rozwiązywania! Opanowanie tych technik w Pythonie zwiększa szanse sukcesu realizowanych projektów webowych, przetwarzania danych, uczenia maszynowego i wielu innych.
Książka Klasyczne problemy informatyki w Pythonie podszlifuje Twoje umiejętności rozwiazywania problemów informatyki na podstawie sprawdzonych scenariuszy, ćwiczeń i algorytmów wykorzystujących Pythona. Przedstawia ona dziesiątki wyzwań, począwszy od prostych zadań, takich jak algorytm wyszukiwania binarnego po klasteryzację danych przy użyciu k-średnich. Poczujesz szczególną satysfakcję, gdy uda Ci się rozwiązać zadania łączące informatykę z praktycznymi problemami, takimi jak aplikacje, dane, wydajność, a nawet pomyślne przejście przez następną rozmowę kwalifikacyjną!
Książka jest przeznaczona dla średniozaawansowanych programistów Pythona.

Kategoria: Programowanie
Zabezpieczenie: Watermark
Watermark
Watermarkowanie polega na znakowaniu plików wewnątrz treści, dzięki czemu możliwe jest rozpoznanie unikatowej licencji transakcyjnej Użytkownika. E-książki zabezpieczone watermarkiem można odczytywać na wszystkich urządzeniach odtwarzających wybrany format (czytniki, tablety, smartfony). Nie ma również ograniczeń liczby licencji oraz istnieje możliwość swobodnego przenoszenia plików między urządzeniami. Pliki z watermarkiem są kompatybilne z popularnymi programami do odczytywania ebooków, jak np. Calibre oraz aplikacjami na urządzenia mobilne na takie platformy jak iOS oraz Android.
ISBN: 978-83-01-20993-3
Rozmiar pliku: 3,1 MB

FRAGMENT KSIĄŻKI

o ilustracji na okładce

Rysunek na okładce książki Klasyczne problemy informatyki w Pythonie jest podpisany jako Habit buddyjskiego mnicha w Chinach. Ilustracja pochodzi z albumu Thomasa Jefferysa zatytułowanego A Collection of the Dresses of Different Nations, Ancient and Modern (cztery tomy) wydanego w Londynie w latach 1757–1772. Strona tytułowa informuje, że przedstawia on ręcznie kolorowane miedzioryty, uwypuklone przy użyciu gumy arabskiej.

Thomas Jefferys (1719–1771) był nazywany „Geografem króla George’a III”. Był angielskim kartografem, wiodącym dostawcą map. Tworzył ryciny map i drukował je na zlecenie rządu oraz innych organów urzędowych, a ponadto produkował szeroki zakres map i atlasów handlowych, w szczególności dla rejonu Ameryki Północnej. Tworzone przez niego mapy zapoczątkowały zainteresowanie strojami ludowymi z regionów, które badał i kartografował, co doskonale ilustruje ten album. Fascynacja dalekimi lądami i podróżowanie dla przyjemności były pod koniec XVIII wieku dość nowym zjawiskiem, a albumy przedstawiające mieszkańców innych krajów były bardzo popularne nie tylko wśród turystów, ale także osób, którzy wolą nie ruszać się z fotela.

Różnorodność rysunków w wydaniu Jefferysa demonstruje unikatowość i indywidualność różnych narodów około 200 lat temu. Od tego czasu zmienił się sposób ubierania i zmniejszyły się różnice między regionami oraz krajami. Obecnie często trudno jest rozróżnić mieszkańców różnych kontynentów. Być może, patrząc na to optymistycznie, zamieniliśmy różnorodność kulturową i wizualną na bogatsze życie osobiste, bardziej zróżnicowane i interesujące życie intelektualne oraz techniczne.

W czasach, gdy książki komputerowe wyglądają bardzo podobnie, wydawnictwo Manning celebruje nowatorskość i inicjatywę branży informatycznej za pomocą okładek przedstawiających olbrzymią różnorodność regionów sprzed dwustu lat, przywróconą do życia dzięki ilustracjom Jefferysa.wprowadzenie

Dziękuję za zakup książki Klasyczne problemy informatyki w Pythonie. Python jest jednym z najpopularniejszych języków programowania na świecie, a programiści Pythona wywodzą się z różnych środowisk. Niektórzy mają formalne wykształcenie informatyczne. Inni traktują naukę Pythona tylko jako hobby. Jeszcze inni wykorzystują Pythona w pracy, mimo że nie są programistami. Jest to książka dla średniozaawansowanych i omawiane w niej problemy mają pomóc doświadczonym programistom w odświeżeniu wiedzy ze studiów informatycznych, wprowadzając jednocześnie pewne zaawansowane elementy języka. Osoby, które samodzielnie uczą się programowania, będą mogły przyspieszyć swoją edukację informatyczną, poznając klasyczne problemy w wybranym języku, czyli Pythonie. W książce przedstawiłem tak wiele różnych technik rozwiązywania problemów, że każdy znajdzie w niej coś dla siebie.

Książka nie jest wprowadzeniem do Pythona. Wydawnictwo Manning i inne oferują wiele doskonałych książek z tego zakresu¹. Natomiast ta książka bazuje na założeniu, że czytelnicy są średniozaawansowanymi lub zaawansowanymi programistami Pythona. Chociaż konieczne jest zainstalowanie wersji Python 3.7, nie jest wymagana biegła znajomość wszystkich funkcji tej najnowszej wersji. Co więcej, książka została opracowana jako materiał szkoleniowy, pomagający czytelnikom w osiągnięciu tej znajomości, aczkolwiek nie jest zalecana dla czytelników, którzy dopiero zaczynają naukę Pythona.

Dlaczego Python?

Python jest wykorzystywany do wielu różnych celów, takich jak m.in. data science, produkcja filmowa, edukacja informatyczna czy zarządzanie infrastrukturą IT. Tak naprawdę nie ma obszaru informatyki, który wykraczałby poza zasięg Pythona (no, może z wyjątkiem rozwijania jądra systemu). Python jest lubiany za elastyczność, piękną i zwięzłą składnię, czystą obiektowość i aktywną społeczność. Silna społeczność jest ważna, ponieważ to dzięki niej Python jest przyjazny dla nowych przybyszów i oferuje duży ekosystem dostępnych bibliotek, na których programiści mogą opierać swoje programy.

Z tych powodów Python jest uważany za język przyjazny dla początkujących i ta opinia jest prawdopodobnie prawdziwa. Większość osób zgodziłaby się, że Python jest łatwiejszy w nauce niż na przykład C++, i jego społeczność jest zdecydowanie przyjaźniej nastawiona do początkujących. Ponieważ Python jest tak przystępny, wiele osób się go uczy i dość szybko zaczyna pisać własne programy. Jednak nie wszyscy mają wykształcenie informatyczne, które pozwala poznać wiele wspaniałych i ogólnie dostępnych technik rozwiązywania problemów. Jeśli jesteś jednym z tych programistów, którzy znają Pythona, ale nie znają informatyki, ta książka jest dla Ciebie.

Programistom z wieloletnim doświadczeniem, którzy poznają Pythona jako kolejny już język programowania, zobaczenie problemów znanych z innego języka pomoże w szybszym nauczeniu się Pythona. Jeśli zaliczasz się do tej kategorii, ta książka może Ci posłużyć jako materiał do odświeżenia wiedzy przed rozmową kwalifikacyjną albo będzie okazją do poznania nowych technik rozwiązywania problemów, które mogą się przydać w codziennej pracy. Zachęcam do przejrzenia spisu treści w poszukiwaniu zagadnień, które mogą Cię zaciekawić.

Jakie są klasyczne problemy informatyki?

Niektórzy mówią, że komputery są dla informatyki tym, czym teleskopy dla astronomii. Jeśli to prawda, to język programowania jest jak soczewki teleskopu. Tak czy owak, termin „klasyczne problemy informatyki” został tu wykorzystany w znaczeniu „problemy programistyczne omawiane zazwyczaj w ramach programu studiów informatycznych”.

Istnieją pewne problemy programistyczne, które daje się do rozwiązania początkującym programistom i które są na tyle powszechnie stosowane, że przeszły do klasyki, zarówno na zajęciach akademickich (z informatyki, programowania itp.), jak i w średniozaawansowanych podręcznikach programistycznych (np. pierwszej książce poświęconej sztucznej inteligencji lub algorytmom). Niniejsza książka zawiera wiele problemów tego typu.

Poziom trudności problemów jest różny – od tych trywialnych, do których rozwiązania wystarczy kilka wierszy kodu, do złożonych, które wymagają rozbudowywania programu w kolejnych rozdziałach. Niektóre problemy zahaczają o sztuczną inteligencję, inne wymagają po prostu zdrowego rozsądku. Niektóre z nich są bardzo praktyczne, a inne nieco wymyślne.

Jakiego typu problemy są omawiane w tej książce?

W rozdziale 1 opisałem techniki rozwiązywania problemów, które są prawdopodobnie znane większości czytelników. Takie mechanizmy, jak rekurencja, memoizacja i pewne przekształcenia są kluczowymi komponentami innych technik prezentowanych w kolejnych rozdziałach.

To łagodne wprowadzenie jest kontynuowane w rozdziale 2, w którym skoncentrowałem się na problemach wyszukiwania. Wyszukiwanie to tak szeroki temat, że większość problemów omawianych w tej książce można zaliczyć do tej kategorii. W rozdziale 2 pojawiają się najważniejsze algorytmy wyszukiwania, takie jak wyszukiwanie binarne, przeszukiwanie wszerz, przeszukiwanie w głąb i A*. Te algorytmy są wykorzystywane w pozostałej części książki.

W rozdziale 3 będziemy budować platformę do rozwiązywania szerokiego zakresu problemów, które można zdefiniować abstrakcyjnie przy użyciu zmiennych o ograniczonych domenach, na które nałożone są ograniczenia. Przedstawione są w nim takie klasyki, jak problem ośmiu hetmanów, problem kolorowania mapy Australii oraz krypto­arytmetyka SEND + MORE = MONEY.

W rozdziale 4 zająłem się algorytmami grafowymi, których szeroki zakres zastosowań może zaskoczyć niewtajemniczonych. W tym rozdziale zbudujemy strukturę danych reprezentującą graf i użyjemy jej do rozwiązywania wielu klasycznych problemów optymalizacji.

W rozdziale 5 przedstawiłem algorytmy genetyczne – technikę, która jest mniej deterministyczna niż większość podanych w tej książce metod, ale czasami rozwiązują one zadania, których tradycyjne algorytmy nie są w stanie rozwiązać w rozsądnym czasie.

Rozdział 6 zawiera omówienie klasteryzacji metodą k-średnich i jest rozdziałem najbardziej koncentrującym się na konkretnych algorytmach. Ta technika klasteryzacji jest łatwa w implementacji i zrozumieniu oraz ma szeroki zakres zastosowań.

W rozdziale 7 podjąłem próbę wytłumaczenia, czym jest sieć neuronowa, i pokazania, jak może wyglądać jej bardzo prosta implementacja. Moim celem nie było szczegółowe omówienie tej ekscytującej i wciąż rozwijającej się dziedziny. W tym rozdziale zbudujemy sieć neuronową od podstaw, bez użycia jakiejś zewnętrznej biblioteki, aby naprawdę zademonstrować działanie sieci neuronowych.

Rozdział 8 jest poświęcony metodom przeszukiwania z przeciwnikiem w grach z dwoma uczestnikami i pełnymi informacjami. Omówiłem w nim algorytm przeszukiwania o nazwie minimax, którego można użyć do rozwijania fikcyjnego przeciwnika umiejącego dobrze grać w takie gry, jak szachy, warcaby czy Connect 4.

Na zakończenie, w rozdziale 9 przedstawiłem ciekawe problemy, które nie za bardzo pasowały do pozostałych rozdziałów książki.

Do kogo kierowana jest ta książka?

Ta książka powstała z myślą zarówno o średniozaawansowanych, jak i doświadczonych programistach. Doświadczeni programiści, którzy chcą pogłębić swoją znajomość Pythona, znajdą w niej zagadnienia dobrze im znane z zajęć informatyki. Średniozaawansowani programiści zaznajomią się z tymi problemami w wybranym przez siebie języku, czyli Pythonie. Programiści przygotowujący się do testów rekrutacyjnych mogą potraktować tę książkę jako cenny materiał pomocniczy.

Książka ta może się przydać nie tylko profesjonalnym programistom, ale także studentom kierunków informatycznych, którzy interesują się Pythonem. Nie jest ona rygorystycznym wprowadzeniem do struktur danych i algorytmów i nie zastąpi podręcznika do struktur danych i algorytmów. Nie zajmuje się dowodami i notacja dużego O rzadko się w niej pojawia. Natomiast zawiera ona przystępne i praktyczne omówienie technik rozwiązywania problemów, które powinno wchodzić w zakres zajęć ze struktur danych, algorytmów i sztucznej inteligencji.

Jak już wspominałem, przyjąłem założenie, że czytelnik zna składnię i semantykę języka Python. Książka nie przyniesie większych korzyści osobom, które nie mają żadnego doświadczenia w programowaniu i będzie trudna do opanowania dla osób, które w ogóle nie znają Pythona. Innymi słowy, Klasyczne problemy informatyki w Pythonie są książką dla zawodowych programistów Pythona i studentów informatyki.

Wersje Pythona, repozytorium kodów źródłowych i adnotacje typów

Kod źródłowy w tej książce został napisany zgodnie z wersją 3.7 języka Python. Wykorzystałem funkcje Pythona wprowadzone dopiero w wersji Python 3.7, dlatego część kodu nie będzie działała w wersjach wcześniejszych. Zalecam, aby zamiast pokonywać trudności związane z uruchamianiem przykładów w starszych wersjach, po prostu przed rozpoczęciem pracy z książką pobrać najnowszą wersję Pythona.

W tej książce korzystałem jedynie ze standardowej biblioteki Pythona (małym wyjątkiem jest rozdz. 2, w którym jest instalowany moduł typing_extensions), w związku z tym cały prezentowany kod powinien działać na dowolnej platformie wspierającej Pythona (macOS, Windows, GNU/Linux itd.). Kod książki był testowany jedynie w CPython (głównym interpreterze Pythona dostępnym na stronie python.org), choć większość będzie prawdopodobnie działała na dowolnym interpreterze Pythona zgodnym z wersją Python 3.7.

Ta książka nie wyjaśnia, jak korzystać z takich narzędzi Pythona, jak edytory, środowiska IDE, debuggery czy Python REPL. Kod źródłowy książki jest dostępny online w repozytorium GitHub: https://github.com/davecom/ClassicComputerScienceProblemsInPython. Kod źródłowy jest podzielony na foldery według rozdziałów. Czytając rozdział, można zobaczyć nazwę pliku źródłowego w nagłówku każdego z listingów kodu. Plik źródłowy można znaleźć w odpowiadającym mu folderze w repozytorium. Aby uruchomić przykład, zazwyczaj wystarczy wpisać python3 nazwapliku.py lub python nazwapliku.py w zależności od ustawień komputera związanych z nazwą interpretera Python 3.

We wszystkich prezentowanych listingach kodu są wykorzystywane adnotacje typów Pythona (ang. type hints lub type annotations). Te adnotacje stanowią stosunkowo nową funkcję języka Python i mogą deprymować programistów Pythona, którzy widzą je po raz pierwszy. Za ich wykorzystaniem przemawiają trzy argumenty:

1. Zapewniają czytelność w zakresie typów zmiennych oraz parametrów i wartości zwrotnych funkcji.
2. Ze względu na punkt 1. powodują, że kod w pewnym sensie sam się dokumentuje. Zamiast przeszukiwać komentarz lub napis dokumentujący w poszukiwaniu typu zwrotnego funkcji, wystarczy spojrzeć na jej sygnaturę.
3. Umożliwiają sprawdzanie poprawności typów w kodzie. Jednym z popularnych narzędzi do sprawdzania typów w Pythonie jest mypy.

Nie wszyscy są fanami adnotacji typu i decyzja o zastosowaniu ich w książce była, szczerze mówiąc, ryzykowna. Mam nadzieje, że będą one pomocą, a nie utrudnieniem. Pisanie kodu Pythona z adnotacjami typów zajmuje nieco więcej czasu, ale zwiększa jego czytelność. Co ciekawe, adnotacje typu nie mają żadnego wpływu na samo działanie kodu w interpreterze Pythona. Dowolny kod z tej książki powinien nadal działać po usunięciu z niego adnotacji typu. Jeśli po raz pierwszy się z nimi spotykasz i czujesz, że przed rozpoczęciem lektury potrzebujesz bardziej szczegółowego wprowadzenia do tego zagadnienia, zajrzyj do dodatku C, który zawiera przyspieszony kurs z adnotacji typu.

Sama standardowa biblioteka – bez grafiki czy kodu interfejsu użytkownika

Żaden z prezentowanych w tej książce przykładów nie generuje obiektów graficznych i nie korzysta z graficznego interfejsu użytkownika (GUI). Dlaczego? Moim celem było rozwiązanie przedstawionych problemów w jak najbardziej zwięzły i czytelny sposób. Często generowanie efektów graficznych stanowi dodatkową komplikację lub sprawia, że rozwiązanie jest dużo bardziej złożone niż to konieczne do zilustrowania wybranej techniki lub algorytmu.

Co więcej, dzięki rezygnacji z użycia jakichkolwiek bibliotek GUI przedstawiony w tej książce kod jest wyjątkowo przenośny. Może być łatwo uruchamiany zarówno na wbudowanej dystrybucji Pythona uruchomionej na Linuksie, jak i na komputerze z systemem Windows. Dodatkowo podjąłem świadomą decyzję, żeby używać tylko pakietów ze standardowej biblioteki Pythona, bez bibliotek zewnętrznych jak w bardziej zaawansowanych książkach o Pythonie. Dlaczego? Moim celem jest nauczenie podstawowych technik rozwiązywania problemów, a nie podejścia typu „pip install a solution”. Mam nadzieję, że konieczność opracowania każdego rozwiązania od podstaw pozwoli lepiej zrozumieć działanie popularnych bibliotek. Ograniczenie się do standardowej biblioteki ułatwi przynajmniej przenoszenie i uruchamianie kodu tej książki.

Nie znaczy to, że rozwiązania graficzne nigdy nie ilustrują algorytmu lepiej niż tekstowe. Po prostu ta książka się nimi nie zajmuje. Dodałyby one kolejną, niepotrzebną warstwę złożoności.

Część serii

To druga książka z serii zatytułowanej Classic Computer Science Problems, opublikowana przez Manning – pierwsza, zatytułowana Classic Computer Science Problems in Swift, została wydana w 2018 r. W każdej książce z tej serii starano się przekazać wiedzę o danym języku, przedstawiając go z perspektywy (prawie) tych samych problemów informatyki.

Jeśli spodoba Ci się ta książka i planujesz nauczyć się innego języka omówionego w ramach tej serii, przejście z jednej książki do drugiej może się okazać prostym sposobem poprawienia umiejętności programowania w wybranym języku. Na razie seria ta obejmuje jedynie języki Swift i Python. Dwie pierwsze książki napisałem sam, ponieważ mam duże doświadczenie w obu językach, ale trwają już rozmowy na temat opublikowania kolejnych książek z tej serii współtworzonych przez ekspertów w zakresie innych języków. Zachęcam do ich poszukania, jeśli spodoba Ci się niniejsza książka. Więcej informacji o tej serii można znaleźć na stronie https://classicproblems.com/.

1 Osobom zaczynającym przygodę z Pythonem zalecam wcześniejsze zapoznanie się z książką Naomi Ceder zatytułowaną Python. Szybko i prosto, Wyd. 3. Helion, 2019.
mniej..

BESTSELLERY

Kategorie: