Docsity
Docsity

Przygotuj się do egzaminów
Przygotuj się do egzaminów

Studiuj dzięki licznym zasobom udostępnionym na Docsity


Otrzymaj punkty, aby pobrać
Otrzymaj punkty, aby pobrać

Zdobywaj punkty, pomagając innym studentom lub wykup je w ramach planu Premium


Informacje i wskazówki
Informacje i wskazówki

Wstep do informatyki - Notatki - Informatyka - Część 2, Notatki z Informatyka

Notatki dotyczące tematów z dziedziny informatyki: wstep do informatyki; pytania i odpowiedzi.

Typologia: Notatki

2012/2013

Załadowany 08.03.2013

Kowal_86
Kowal_86 🇵🇱

3.7

(3)

109 dokumenty

Podgląd częściowego tekstu

Pobierz Wstep do informatyki - Notatki - Informatyka - Część 2 i więcej Notatki w PDF z Informatyka tylko na Docsity!

Wynikają ze złego zaprojektowania algorytmu: np.:

  • na etapie projektowania algorytmu źle zaadresowano w grafie połączenia iteracji lub wyborów warunkowych. Konsekwencje:
  • algorytm dla pewnych dopuszczalnych danych daje niepoprawne rozwiązanie
  • wykonanie programu zostaje przerwane
  • program realizujący algorytm nie kończy swego działania

30.Jaka jest różnica pomiędzy całkowitą, a częściową poprawnością algorytmu? Algorytm jest całkowicie poprawny względem warunku początkowego i końcowego, jeżeli dla każdych danych spełniających warunek początkowy, obliczenia kończą się i wyniki spełniają warunek końcowy. Algorytm jest częściowo poprawny jeśli dla każdych obliczeń, które się kończą wynik jest poprawny względem warunku początkowego i końcowego.

Różnica polega na tym, ze w przypadku poprawności częściowej nie zawsze obliczenia prowadzą do zakończenia pracy algorytmu.

Weryfikując częściową poprawność algorytmu musimy wykazać, że obliczenia kończą się dla wszystkich poprawnych danych wejściowych.

31.Co nazywamy niezmiennikiem a co zbieżnikiem? Niezmienników używa się w obrębie iteracji do sprawdzenia częściowej poprawności algorytmu. (Metoda niezmienników polega na ustawieniu w danym algorytmie punktów kontrolnych, tzw. asercji. Jeśli za każdym razem, dla różnego rodzaju danych wejściowych algorytm osiągnie dany punkt kontrolny to znaczy, że jest częściowo poprawny. Metodę tę dlatego nazwano metodą niezmienników, gdyż zgodnie z jej schematem działania, bez względu na wprowadzone dane wejściowe, dla poprawnego algorytmu przebieg przez punkty kontrolne powinien być niezmienny.) Zbieżników używa się do ustalania całkowitej poprawności algorytmów. (Metoda zbieżników polega na ustaleniu w danym algorytmie zbieżników – zmiennych, które będą przyjmowały różne wartości, ale zawsze, bez względu na wprowadzone dane, będą dążyły do pewnej wartości maksymalnej lub minimalnej i nigdy jej nie przekroczą. Np.: zbieżnikiem w algorytmie sortowania może być zmienna, której przypiszemy, wartość równą wartości elementów do posortowania.)

32.Jak określona jest złożoność algorytmów? Jakie znasz jej rodzaje? Złożoność algorytmów możemy badać pod kontem:

  • pamięci
  • czasu

Złożoność pamięciowa to zależność pomiędzy ilością potrzebnej do działania algorytmu pamięci (wielkością i liczbą struktur danych), a rozmiarami danych wejściowych wprowadzanych do algorytmu. Złożoność czasowa to zależność pomiędzy liczbą elementarnych operacji wykonywanych w trakcie przebiegu algorytmu a wielkością danych wejściowych. Algorytmy zazwyczaj bada się pod kontem złożoności czasowej, gdyż ta przeważa o użyteczności algorytmu.

33.Jak formalnie stwierdzamy, że dwa algorytmy mają tą samą złożoność? Dwa algorytmy o czasach wykonania F1(N) i F2(N) mają złożoność tego samego rzędu, jeśli:

C

N

N

F

F

Lim

N

  (^2)

1

Jeśli C = 0 algorytm o czasie wykonania F1(N) ma niższy rząd złożoności. Jeśli C =  algorytm o czasie wykonania F2(N) ma niższy rząd złożoności. Jeśli 0<C< złożoność czasowa jest tego samego rzędu.

34.Podaj definicję złożoności logarytmicznej algorytmu. Oznaczenie złożoności logarytmicznej: O(logN). Algorytm o czasie wykonania F(N) ma złożoność logarytmiczną jeżeli: lim F(N)/N0.

35.Podaj definicję złożoności liniowej algorytmu. Oznaczenie złożoności liniowej: F(N)=O(N). Algorytm o czasie wykonania F(N) ma złożoność liniową jeżeli: lim F(N)/N=C, gdzie 0<C<.

36.Podaj definicję złożoności kwadratowej algorytmu. Oznaczenie złożoności kwadratowej: F(N)=O(N^2 ). Algorytm o czasie wykonania F(N) ma złożoność kwadratową jeżeli: lim F(N)/N^2 =C, gdzie 0<C<.

37.Podaj definicję złożoności wykładniczej algorytmu. Oznaczenie złożoności wykładniczej: F(N)=O(2N). Algorytm o czasie wykonania F(N) ma złożoność wykładniczą jeżeli: lim F(N)/2 N=C, gdzie 0<C<.

38.Co oznacza zapis F(N)=O(g(N)) w odniesieniu do funkcji F(N). Zapis F(N)=O(g(N)) oznacza spełnienie warunku lim F(N)/g(N)=C, gdzie 0<C< i można odczytywać: algorytm ma złożoność rzędu g(N), lub czas wykonania algorytmu jest O(g(N)).

Równość w zapisie F(N)=O(g(N)) powinna być rozumiana w ten sposób, że funkcja F(N) jest jedną z funkcji, które spełniają powyższy warunek lub precyzyjniej, że należy do zbioru wszystkich funkcji spełniających powyższy warunek.

39.Opisz schemat działania algorytmu wyszukiwania binarnego z listy uporządkowanej. Jaką ten algorytm ma złożoność? Działanie algorytmu wyszukiwania binarnego z listy uporządkowanej rozpoczyna się od porównania ze wzorcem poszukiwanego elementu, elementu znajdującego się w samym środku listy. Jeżeli nie trafiono w poszukiwany element wiadomo już, w której połowie listy mamy go szukać (bo lista jest uporządkowana). Wtedy rozpoczynamy badanie odpowiedniej połowy listy od porównania wzorca elementu poszukiwanego z jej elementem środkowym. Jeśli znów nie trafiliśmy powtarzamy działania dalej. W pewnym momencie algorytm zawsze trafi na poszukiwany element, chyba że nie ma go na liście.

Złożoność czasowa tego algorytmu wynosi F(N)=O(logN), gdzie N jest zależne od ilości elementów. Długość listy:

  • 20 elementów (5 porównań)
  • 1000000 elementów (20 porównań)

40.Wymień znane ci algorytmy sortowania i podaj ich złożoność. Wartości podane dla średniego przypadku:

  • sortowanie drzewiaste bez samoorganizacji drzewa: O(N^2 )
  • sortowanie drzewiaste (lewostronne obejście): O(N)
  • sortowanie bąbelkowe: O(N^2 )

Klasę problemów NP – zupełnych tworzą problemy o następujących cechach:

  • każdy taki problem da się w czasie wielomianowym przekształcić do innego
  • dla wszystkich istnieją wątpliwe (wykładnicze) rozwiązania
  • dla żadnego nie znaleziono rozsądnego (wielomianowego) rozwiązania
  • dla żadnego nie udowodniono, że wymaga on czasu wykładniczego
  • wszystkie te problemy są ze sobą powiązane (jeśli dla choćby jednego uda się znaleźć wielomianowe rozwiązanie to będzie wiadomo, że inne także da się rozwiązać w czasie wielomianowym i odwrotnie, jeśli wykaże się, że dla choćby jednego nie istnieje wielomianowe rozwiązanie, dla innych także go nie będzie) Przykłady problemów NP – zupełnych:
  • ścieżka Hamiltona
  • ułożenia dwuwymiarowe (małpia układanka, wąż domino, figury geometryczne)
  • problem komiwojażera
  • załadunek plecaka

48.Jakie byłyby konsekwencje udowodnienia, że wybrany problem NP – zupełny nie może być rozwiązany deterministycznym algorytmem o złożoności czasowej wielomianowej? Gdyby udowodniono, że choćby jeden z problemów NP – zupełnych z pewnością nie ma rozwiązania deterministycznie wielomianowego, znaczyłoby to, że inne problemy tej klasy także go nie mają. Wynika to z zależności, że jeden problem tej klasy można w czasie wielomianowym przekształcić w inny.

49.Jakie byłyby konsekwencje skonstruowania dla wybranego problemu NP – zupełnie deterministycznego algorytmu o złożoności wielomianowej? Gdyby udowodniono, że choć jeden z algorytmów klasy NP – zupełnej posiada wielomianowe rozwiązanie udowodniono by równocześnie, że inne także go posiadają. Wynika to z faktu, że każdy problem tej klasy da się w czasie wielomianowym przekształcić w dowolny inny.

50.Na czym polega idea konstruowania algorytmów przybliżonych? Główna idea konstruowania takich algorytmów bazuje na założeniu, że w wielu przypadkach wynik gorszy od optymalnego jest i tak lepszy od całkowitego braku rozwiązania dla danego zadania. Takie „zastępcze” algorytmy noszą nazwę algorytmów aproksymacyjnych. Przykład: Problem komiwojażera jest problemem trudno-rozwiązywalnym (NP – zupełnym), ale można w czasie wielomianowym wyznaczyć całkiem niezłe jego przybliżenie, obchodzące wszystkie wierzchołki grafu. Miarą dobroci takiego rozwiązania jest współczynnik Sa = otrzymany wynik / najlepsze rozwiązanie. W przypadku rozwiązania zastępczego dla problemu komiwojażera Sa1,5, a złożoność czasowa tego rozwiązania wynosi zaledwie O(N^3 ).

51.Jakie problemy nazywamy nierozstrzygalnymi? Opisz przykładowy problem. Problem, dla którego nie ma żadnego poprawnie działającego algorytmu nazywamy problemem nieobliczalnym. Jeśli problemem tym jest problem decyzyjny to nazywamy go problemem nierozstrzygalnym.

Przykładem problemu nierozstrzygalnego jest problem domina. Problem domina polega na sprawdzeniu i udzieleniu odpowiedzi „tak” lub „nie”, na pytanie: czy danym zbiorem kart o wymiarach 1 na 1 da się poryć odpowiednio duży teren. Problem jest o tyle trudny, że każda krawędź karty ma inny kolor, a założenie jest takie, że kolory stykających się krawędzi muszą być identyczne.

Dla każdego algorytmu (zapisanego w dowolnym, dającym się efektywnie wykonać języku programowania), który przeznaczony jest do rozstrzygnięcia problemu domina, istnieje nieskończenie wiele zestawów danych wejściowych, dla których algorytm ten będzie działał w nieskończoność lub da błędną odpowiedź.

52.Co to jest problem stopu w algorytmie? Co wiadomo o tym problemie? Problem stopu jest problemem decyzyjnym, mającym dać odpowiedź „tak” lub „nie” na pytanie: czy dany algorytm R napisany w języku L zatrzyma się dla danych wejściowych X. Jak dotąd ustalono, że problem stopu zalicza się do problemów nierozstrzygalnych, czyli nie istnieje taki algorytm, który w racjonalnym czasie potrafiłby dać odpowiedź na to pytanie.

53.Co to jest maszyna Turinga, do czego służy i jak jest zbudowana? Maszyna Turinga to uniwersalny model obliczeniowy, przeznaczony do efektywnego wykonywania dających się efektywnie wykonać algorytmów. Maszyna Turinga składa się z:

  • skończonego alfabetu symboli
  • skończonego zbioru stanów
  • nieskończonej taśmy podzielonej na komórki (każda komórka może zawierać jeden symbol)
  • ruchomej głowicy czytająco – zapisującej (głowica porusza się krokowo co jedną komórkę)
  • diagramu przejść między stanami (czasem zwanego po prostu diagramem przejść)

W zależności od rodzaju maszyny Turinga może się ona być:

  • z taśmą jednostronną ograniczoną
  • z wieloma taśmami i wieloma głowicami
  • z taśma dwuwymiarową
  • z głowicą bez funkcji zapisu

54.Jak wygląda sterowanie w maszynie Turinga? Sterowanie maszyną odbywa się za pomocą diagramu przejść, który jest po prostu grafem skierowanym, którego wierzchołki reprezentują stany, w jakich może znaleźć się maszyna. Do oznaczenia stanów używa się często zaokrąglonych czworokątów. Krawędź prowadząca ze stanu x do stanu y nazywa się przejściem międzystanowym i etykietuje się ją kodem (a/b, kierunek), gdzie a/b są symbolami a kierunek to albo lewo, albo prawo. Część a to wyzwalacz, a część b, kierunek to akcja. (a/b, lewo) – jeśli trafisz na „a” zapisz tam „b” i idź o jedno pole w lewo. (b/a, prawo) – jeśli trafisz na „b” zapisz tam „a” i idź o jedno pole w prawo.

55.O czym mówi teza Churcha-Turinga i jakie ma znaczenie dla analizy złożoności problemów algorytmicznych? Maszyna Turinga potrafi rozwiązać każdy efektywnie rozwiązywalny problem.

Rozwijając tę tezę, można dojść do wniosku, że jeśli istnieje jakiś szybki komputer, który potrafi rozwiązać dany problem w czasie O(f(N)), to istnieje równoważna mu maszyna Turinga, która potrzebuje na rozwiązanie tego problemu nie więcej niż O(p(f(N))) czasu, dla pewnej ustalonej funkcji wielomianowej p.

56.Co to jest automat skończony i jak jest zbudowany? Automat skończony to zdegenerowana maszyna Turinga. Posiada (tak jak pełna maszyna Turinga) taśmę (pełniącą rolę pamięci) podzieloną na części (pseudo- komórki) i głowicę wędrującą po zadanej taśmie. Różnice polegają na tym, że taśma jest jednostronnie ograniczona, głowica może poruszać się tylko i wyłącznie w prawą stronę i nie ma możliwości zapisu (zapis jest zbędny bo z ograniczenia ruchu w jedną

61.Wyjaśnij pojęcie zagłodzenia w systemach pracujących współbieżnie. Zagłodzenie procesora w systemie pracującym współbieżnie to sytuacja, w której jednemu z procesorów brakuje dostępu do zasobu krytycznego zawsze gdy ten jest mu potrzebny.

Analogia w przykładzie „prysznica hotelowego” jest taka, że w pierwotnej wersji jeden z gości zameldowanych w ów hotelu, przychodzi sprawdzić czy prysznic jest wolny, i zawsze trafia na sytuację kiedy jest zajęty.

62.Wyjaśnij pojęcie aktywnego czekania w systemach pracujących współbieżnie. Aktywne czekanie to czekanie z ciągłym sprawdzaniem, czy dostęp do zasobu krytycznego przypadkiem nie został zwolniony.

Analogią do aktywnego czekania w przypadku „prysznica hotelowego” było ciągłe sprawdzanie mieszkańców hotelu, czy na tablicy wstępu pod prysznic nie pojawił się przypadkiem numer ich pokoju. W przypadku „chińskich filozofów” było to ciągłe sprawdzanie czy przypadkiem dany filozof nie ma w danej chwili dostępu do dwóch pałeczek.