StartKurs algorytmikiAlgorytmy probabilistyczne
Baza Wiedzy
Wersja offline serwisu przeznaczona na urządzenia z systemem Android.

Darowizny
darowiznaWspomóż rozwój serwisu


Nagłówki RSS
Kanał artykuły
Kanał implementacje
Kanał komentarze
Kanał forum


Bookmarki









Sonda
Implementacji w jakim języku programowania poszukujesz?
 
Algorytmy probabilistyczne
Ocena użytkowników:++++- / 6
SłabyŚwietny 
Wpisany przez Michał Knasiecki
poniedziałek, 01 sierpnia 2005 19:05
Algorytmy probabilistyczne to pewna grupa algorytmów, które wykorzystują losowanie do uzyskania rozwiązania.
Są one często stosowane w systemach współbieżnych procesów ubiegających się o współdzielone zasoby systemu komputerowego.
W wielu przypadkach nie istnieje w pełni rozproszone (tzn. bez centralnej pamięci i centralnego procesora) i symetryczne (identyczność protokołu) rozwiązanie wolne od blokady. W takich wypadkach stosuje się algorytmy probabilistyczne. W przypadku stosowania takich algorytmów nie mamy pewności, że konstruują one rozwiązania poprawne, wiemy jednak, że dają je z prawdopodobieństwem równym 1.
Przedstawimy teraz rozwiązanie Problemu pięciu filozofów z wykorzystaniem algorytmu probabilistycznego.
Najpierw jednak scharakteryzujemy Problem 5 filozofów:
Przy stole siedzi pięciu filozofów, którzy na przemian jedzą spaghetti ze wspólnej miski oraz myślą. Żeby się najeść filozof potrzebuje dwa widelce, przy czym każdy z widelców jest współdzielony z sąsiadem. Każdy z filozofów wykonuje zatem cyklicznie następujące czynności: myśli, bierze widelce, je, odkłada widelce i znowu myśli. Widelec jest używany w trybie wyłącznym, czyli tylko jeden z dwóch siedzących obok siebie filozofów może z niego korzystać. Ponad to filozof może korzystać tylko z widelców leżących bezpośrednio przy nim. Należy napisać dla filozofów taki algorytm, aby:
  • nie doszło do zakleszczenia
  • nie doszło do zagłodzenia żadnego z filozofów
Algorytm probabilistyczny dla tego problemu (dla każdego filozofa) przedstawia się następująco:
  1. Rzuć monetę, by wylosować lewą lub prawą stronę
  2. Czekaj aż wylosowany widelec będzie wolny i podnieś go
  3. Jeśli drugi widelec jest zajęty to odłóż podniesiony widelec i przejdź do kroku 1.
  4. Jeśli drugi widelec jest wolny to go podnieś
  5. Jedz
  6. Odłóż oba widelce
Przy takim algorytmie prawdopodobieństwo, że n filozofów podniesie ten sam widelec wynosi 1/2n i z każdą następną próbą maleje 2n krotnie.
Wydawać może się, że takie rozwiązanie jest banalne, jednak znalazło ono zastosowanie w protokole dostępu do sieci Ethernet, w tzw. technice CSMA/CD. Technika ta wykorzystuje mechanizm detekcji kolizji: do wspólnego medium (współdzielony zasób) podłączony jest szereg stacji roboczych. Każda stacja wykonuje następujący algorytm: stacja śledzi stan medium i zaczyna nadawać, gdy medium jest wolne. Gdy dojdzie do kolizji, tzn. gdy dwie stacje jednocześnie zaczną nadawać, wszystkie stacje przerywają nadawanie i wznawiają je po losowo wybranym odcinku czasu. Takie rozwiązanie sprawdza się bardzo dobrze, lecz nie może być stosowane w systemach sztywnego czasu rzeczywistego (HRT).

Poprawiony: poniedziałek, 15 sierpnia 2005 23:56

Dodaj komentarz

Kod antysapmowy
Odśwież