Nem determinisztikusság és párhuzamosság. A nem determinisztikusság a párhuzamosságban gyökeredzik. Példa: S par  parbegin x:=0   x:=1   x:=2 parend;

Slides:



Advertisements
Hasonló előadás
Deduktív adatbázisok.
Advertisements

C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Definíciók: Algoritmus: bármely véges sok lépéssel leírható tevékenység. Olyan pontos előírás, amely megmondja, hogy egy adott típushoz tartozó feladat.
Algoritmusok.
Kiválasztás (N,A,sorszam) i := 1 Ciklus amíg (A(i) nem T) i := i+1 Ciklus vége sorszam := i Eljárás vége Kiválasztás.
Osztott rendszer: (kommunikáció csatornán keresztül). Osztott rendszer informális definíciója. • Egymástól elkülönülten létező program-komponensek egy.
Párhuzamos programozás (a fork/join és a parbegin/parend technika)
Összefoglalás 1. Pascal program szerkezete 2. Pascal típusai
Matematika és Tánc Felkészítő tanár: Komáromi Annamária
Lambda kalkulus.
Determinisztikus programok. Szintaxis: X : Pvalt program változók E : Kifkifejezések B : Lkiflogikai kifejezések C : Utsutasítások.
Dijkstra-féle leggyengébbelőfeltétel-kalkulus
3. előadás (2005. március 1.) Utasítások, tömbök
Benczúr Zsolt VBA gyorstalpaló Benczúr Zsolt
Visual Basic for Application (VBA)
Programozás alapjai.
Programozáselmélet Logikák és módszerek a programhelyesség bizonyításához.
C A C nyelv utasításai.
C A C nyelv utasításai. Ismétlés Utasítások csoportosítása.
Készítette: Pető László
Programozás I. Horváth Ernő.
Java programozási nyelv 2. rész – Vezérlő szerkezetek
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 1 Fordítóprogramok 1.5 Programozó matematikus szak 2003/2004-es tanév II. félév.
Determinisztikus véges automaták csukva nyitva m s kbsm csukva nyitva csukva nyitva csukvanyitva 1. Példa: Fotocellás ajtó s b m m= mindkét helyen k= kint.
Reprezentációs függvény. Adva egy adattípus absztrakt és konkrét specifikációja: d a = ( A, F, E a ); d c = ( C, G, E c ); A = {A 0,..., A n };C = {C 0,...,
1. előadás. 1.) Szoftverfejlesztés, mint mérnöki tevékenység. Számítási eszközfejlődés. Számítási eszközfejlődés: hazai viszonyok. Mérföldkő: Simula 67.Klasszikus.
1. előadás. 1.) Szoftverfejlesztés, mint mérnöki tevékenység. Számítási eszközfejlődés. Számítási eszközfejlődés: hazai viszonyok. Mérföldkő: Simula 67.Klasszikus.
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
Alphabet is a type specification = sorts: alphabet oprs: a:  alphabet,...,z:  alphabet end alphabet; nat is a type specification = sorts:nat oprs:zerus:
Programozás I. Ciklusok
ISZAM III.évf. részére Bunkóczi László
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
C nyelv utasításai.
Alprogramok deklarációja, definíciója és meghívása Páll Boglárka.
Algoritmusok.
ismétlődő (azonos vagy hasonló) tevékenységek megvalósítására szolgál
Tömbök és programozási tételek
Rendezések és szövegkezelő függvények
Összetett adattípusok
PHP nyelv. PHP Interpreteres nyelv → parancsértelmező szükséges hozzá Rasmus Lerdorf 1995 → személyes felhasználás (internetes önéletrajzának megtekintésének.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Algoritmusok.
Algoritmus szerkezetek
Nevezetes algoritmusok
Termelő-fogysztó modell. A probléma absztrakt megfogalmazása: informális leírás. Adott egy N elemű közösen használt tároló, N  1. Adott a folyamatoknak.
Koncepció: Specifikáció: e par exp i = eb imp bod ib Specifikáció elemzése: tulajdonságok felírása a koncepció alapján + tulajdonságok bizonyítása.
A Visual Basic nyelvi elemei
Török Katalin és Marosi Nóra 11/c. Pascal: Az es években megjelent magas szintű programozási nyelv, közel áll az emberi gondolkodáshoz. Nevét.
Mintapélda Készítsünk programot, amely beolvas egy egész számot, és eldönti arról, hogy prímszám-e. Készítsünk programot, amely beolvas egy egész számot,
Adva S  parbegin S 1 ...  S n parend; Párhuzamos programszerkezet két vagy több olyan folyamatot tartalmaz, amelyek egymással közös változó segítségével.
Kiterjesztések szemantikája: Szemantikai tartomány : Adatoknak, vagy értékeknek egy nem üres halmazát szemantikai tartománynak nevezzük. Jelölése: D. Egy.
Kommunikáció és szinkronizáció. 1.) Kommunikáció: Lehetőség arra, hogy egyik folyamat befolyásolja a másik folyamat lefutását. Kommunikáció eszközei: közös.
Excel programozás (makró)
Félcsoport (semigroup) = ({s},{ *: s s  s [infix]}. semigroup is a type specification = sorts: s oprs: *: s s  s [infix] eqns: m 1, m 2, m 3  s (m 1.
C++2. Ciklusok elöltesztelő (for, while) A ciklusmag feldolgozása előtt történik a vizsgálat  lehet, hogy egyszer sem fut le. A soronkövetkező iteráció.
Adatszerkezetek és algoritmusok 2008/ Algoritmus Az algoritmus szó eredete a középkori arab matematikáig nyúlik vissza, egy a i.sz. IX. században.
Példa. Az ábrázolás szemléltetése.  = ({stack, elem },{ create :  stack; push : stack elem  stack}),  = ( {vector, nat, elem}, { create c :  vector.
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Alapvető programozási tételek megvalósítása Czigléczky Gábor 2009.
Excel programozás (makró)
Programozás C# -ban Elágazások.
A CLIPS keretrendszer
Példa: Dinteger = {..., -1,0,1,...}; Dboolean = {true, false};
Bevezetés a programozásba Algoritmikus gondolkodás
Lineáris keresés Keresés (N,A,sorszam) i := 1
ITERÁCIÓ.
Informatikai gyakorlatok 11. évfolyam
Gráfalgoritmusok G=(V,E) gráf ábrázolása
2-3-fák A 2-3-fa egy gyökeres fa az alábbi tulajdonságokkal:
Informatikai gyakorlatok 11. évfolyam
A piros sál a leghosszabb.
Előadás másolata:

Nem determinisztikusság és párhuzamosság. A nem determinisztikusság a párhuzamosságban gyökeredzik. Példa: S par  parbegin x:=0   x:=1   x:=2 parend; Tetszőleges sorrendet eredményezhet a végrehajtás. S ndet  if true  x:=0 true  x:=1 true  x:=2 fi; A legnagyobb közös osztó megtalálása: GCD: while x  y do if x  y then x:= x-y else y:= y-x fi od; GCD': do x  y  x:= x-y y  x  y:= y-x od; Olvasmányosabb megoldás.

Nem determinisztikus program. Szintaxis. 1.) Szekvenciális nem determinisztikus program: S::= skip  u  t  S 1 ;S 2  if  1  S 1...  1  S n fi  do  1  S 1...  n  S n od; Speciális esetek: if  then S 1 else S 2 fi : if  S 1 ~   S n fi ; when  do S od : do   S od ; 2.) Szekvenciális nem determinisztikus program exit iterációval: S::= skip   u  t  S 1 ;S 2  if S 1... S n fi  do S B S E exit od; S B :  1  S 1...  n  S n ;

A nem determinisztikus ciklus szintakszisának induktív definíciója: Jelölje  azt a nem determinisztikus programot, amelyre: (  )(M[  ](  )=  ); (do  1  S 1...  1  S n od) 0 =  ; (do  1  S 1...  1  S n od) k+1= if do  1  S 1...  1  S n od; (do  1  S 1...  1  S n od) k (~  1 ...  ~  n )  skip fi;

3.) párhuzamos nem determinisztikus program: S::= skip   u  t  S 1 ;S 2  if  1  S 1...  1  S n fi  do  1  S 1...  n  S n od  parbegin S 1  S 2 parend; Atomic program:  S  ; A nem determinisztikus kiválasztás if  1  S 1...  1  S n fi utasítás esetén: Az  i  S i őrfeltétetles utasítás kiválasztása végrehajtásra: Ha valamelyik  i értékre igaz, akkor a kiértékelés után S i végrehajtódik és az if...fi utasítás végrehajtása befejeződik. Ha több  i értéke is igaz, akkor véletlenszerű kiválasztásra kerül sor. Ha minden i  {1,..., n} esetén  i értéke hamis, akkor az utasítás végrehajtása hibajelzést eredményez, abortál.

Nem determinisztikus iteráció: do  1  S 1...  n  S n od utasítás esetén: Az  i  S i őrfeltételes utasítás kiválasztása végrehajtásra: Ha valamelyik  i értékre igaz, akkor a kiértékelés után S i végrehajtódik. Ha több  i értékre is igaz, akkor véletlenszerű kiválasztásra kerül sor. A fenti eljárás mind addig ismétlődik, amíg van olyan  i, amelynek értéke igaz. Ha minden i  {1,..., n} esetén  i értéke hamis, akkor a do... od utasítás végrehajtása befejeződik.

Szemantika. Szemantika definiálása állapot átmenetek axiómáival:  i = "true"   if  1  S 1...  n  S n fi,    S i,  ; (i=1,...,n). (  i  {1,...,n})(  i = "false")   if  1  S 1...  n  S n fi,    E,fail  ; (  E,fail  hiba konfiguráció és nincs rákövetkezője!)  i = "true"   do  1  S 1...  1  S n od,    S i ; do  1  S 1...  1  S n od,  ; (i=1,...,n). (  i  {1,...,n})(  i = "false")   do  1  S 1...  1  S n od,    E,  ;

Definíció. Adott S nem determinisztikus program és . Az S nem determinisztikus program  kezdeti állapotból elindítva hibás, ha létezik olyan kiszámítása, amely (S',fail) hiba konfigurációban végződik. Definíció. Adott S nem determinisztikus program és . Az S nem determinisztikus program parciális helyességi szemantikája: M[S](  ) ={   S,    E,  }; Az S nem determinisztikus program teljes helyességi szemantikája: M tot [S](  ) = M[S](  )  {  S divergál  kezdeti értékből indítva   {fail  S hibás  kezdeti értékből indítva  ;

Adott S nem determinisztikus program és  esetén: M tot [S](  ) vagy véges, vagy tartalmazza  virtuális állapotot. Indoklás a König lemma alapján. M tot [if  then S 1 else S 2 fi] = M tot [if   S 1 ~   S 2 fi]; M tot [while  do S od] = M tot [do   S od]; if  then S 1 else S 2 fi  if   S 1 ~   S 2 fi; while  do S od  do   S od; M tot [ if  then S fi ]  M tot [ if   S fi ]; nincs failvan fail

Transzformáljuk át a párhuzamos programot nem determinisztikus programmá. Módszer: Adva S  parbegin S 1 ...  S n parend; Vezessünk be egy pc i integer változót minden S i komponenshez. Ez a változó modellezi a programszámlálóját az S i végrehajtása során. Ez a számláló mindenkor az S i komponensen belül végrehajtandó következő atomi utasításra mutat. A pozíciók az S i komponensen belül 0,1,...; Az S i befejezési pontját azonosítsa termi. S i komponensben az atomi akciók "címeinek" halmaza: POS i

Példa: Pozitív értékű elem gyors keresése az a[1:N] tömbben. Specifikáció: (1  k  N+1  (i, 0  i  k)((a[i]  0  k  N)  a[k]  0); FINDPOS  i:=1 ; j:=2; oddtop:=N+1; eventop:=N+1; parbegin S 1  S 2 parend; S 1  while i  min(oddtop,eventop) do if a(i)  0 then oddtop:= i else i:= i+2 fi; od; S 2  while j  min(oddtop,eventop) do if a(j)  0 then oddtop:= j else j:= j+2 fi; od; Owicki and Gries [1976]

Példa. S  parbegin S 1  S 2 ; S 1  while i  min(oddtop,eventop) do 0 if a(i)  0 then oddtop:= i else i:= i+2 fi 1 23 od; 4 S 2  while j  min(oddtop,eventop) do 0 if a(j)  0 then oddtop:= j else j:= j+2 fi 1 23 od; 4 term 1 =4; term 2 = 4; POS1 = POS2 = {0,1,2,3,4};

S 1  while i  min(oddtop,eventop) do 0 if a(i)  0 then oddtop:= i else i:= i+2 fi 1 23 od; 4 T 1 : do pc 1 := 0  i  min(oddtop,eventop)  pc 1 := 1; pc 1 := 0  ~(i  min(oddtop,eventop))  pc 1 := 4; pc 1 := 1  a[i]  0  pc 1 := 2; pc 1 := 1  ~(a[i]  0 )  pc 1 := 3; pc 1 := 2  oddtop:= i; pc 1 := 0; pc 1 := 3  i:= i+2; pc 1 := 0;

S 2  while j  min(oddtop,eventop) do 0 if a(j)  0 then oddtop:= j else j:= j+2 fi 1 23 od; 4 do pc 2 := 0  j  min(oddtop,eventop)  pc 2 := 1; pc 1 := 0  ~(j  min(oddtop,eventop))  pc 2 := 4; pc 1 := 1  a[j]  0  pc 2 := 2; pc 1 := 1  ~(a[j]  0 )  pc 2 := 3; pc 1 := 2  oddtop:= j; pc 2 := 0; pc 1 := 3  j:= j+2; pc 2 := 0; term 1 = 4; term 2 = 4;

A nem determinisztikus program: T 1  pc 1 := 0; pc 2 := 0; do pc 1 := 0  i  min(oddtop,eventop)  pc 1 := 1; pc 1 := 0  ~(i  min(oddtop,eventop))  pc 1 := 4; pc 1 := 1  a[i]  0  pc 1 := 2; pc 1 := 1  ~(a[i]  0 )  pc 1 := 3; pc 1 := 2  oddtop:= i; pc 1 := 0; pc 1 := 3  i:= i+2; pc 1 := 0; pc 2 := 0  j  min(oddtop,eventop)  pc 2 := 1; pc 2 := 0  ~(j  min(oddtop,eventop))  pc 2 := 4; pc 2 := 1  a[j]  0  pc 2 := 2; pc 2 := 1  ~(a[j]  0 )  pc 2 := 3; pc 2 := 2  oddtop:= j; pc 2 := 0; pc 2 := 3  j:= j+2; pc 2 := 0; od;

M, M tot ; N. N[S] monoton: (X  Y   )  N[S](X)  N[S](Y); N[S 1 ; S 2 ](X) = N[S 2 ](N[S 1 ](X)); N[(S 1 ; S 2 ); S 3 ](X) = N[(S 1 ; (S 2 ; S 3 )](X); M[(if  1  S 1...  n  S n fi)](X) = M[(S 1 )](X  [  1 ]) ...  M[(S n )](X  [  n ]); (X  ([  1 ]) ...  [  n ]))  M tot [(if  1  S 1...  n  S n fi)](X) = M tot [(S 1 )](X  [  1 ]) ...  M tot [(S n )](X  [  n ]); M[(do  1  S 1...  n  S n od)] = M [do  1  S 1...  n  S n ) 1 ] ...  M [do  1  S 1...  n  S n )  ];

A segély kiosztásának nem determinisztikus programja. Adva három csoport: a, b, c, akik között ki kell osztani N darab segélyt. A szeretetszolgálat osztja ki az ajándékot. Véletlenszerű az, hogy a soron következő segélyt melyik csoport kapja, de egymás után közvetlenül kétszer ugyan az a csoport nem kaphat segélyt. A csoportok által megkapott segélyek száma legyen mindenkor xa = count(a,ex); xb = count(b,ex); xc = count(c,ex); Ezek kezdőértéke: xa = xb = xc = 0. A kiosztható segélyek száma mindenkor: r = N - (xa + xb + xc ). Így r kezdőértéke: r = N.

A mindenkor utoljára megajándékozott azonosítóját jelölje f  {a,b,c}. f kezdőértéke: f = a. A követelmények alapján: Az a csoport kaphat mindenkor segélyt, amelyik nem a legutoljára megajándékozott volt és van még segély: (f  a)  r  0; Készítsük el a kiosztás szimulálásának a nem determinisztikus programját.

kiosztás= (xa  0; xb  0; xc  0; f  a; r  N; átad; átad = do r  0  if f  a   (xa,r)  (xa+1, r-1)  ;  f  a  f  b   (xb,r)  (xb+1, r-1)  ;  f  b  f  c   (xc,r)  (xc+1, r-1)  ;  f  c  fi od;

A szemantika definiálásának másik módja a program-stuktúrák tranzakciós diagramjának megadása. S: u  e; ST: ({s,t},{(s, "true"  (u  e), t)}, s, t); "true"  (u  e) st S: S 1 ;S 2 ; S 1 T: (L 1,T 1, s, r); S 2 T: (L 2,T 2, r, t); Ha L 1  L 2 = {r}, akkor ST = S 1 T; S 2 T = (L 1  L 2, T 1  T 2, s, t); S1TS1T S2TS2T srt

S: if  then S 1 else S 2 fi; ({s, t},{(s,   (u  f S 1 ), t), (s, ~   (u  f S 2 ), t)},s,t);   f S 1 ~   f S 2 s t S: if   S 1  ~   S 2 fi;   S 1 T: (L 1,T 1,s,t); ~   S 2 T: (L 2,T 2,s,t); Ha L 1  L 2 = {s,t}, Akkor ST = (L 1  L 2, T 1  T 2, s,t). ST 1 ST 2 st

S = while  do S B od; ({s, t},{(s,   (u  f S B ), s), (s, ~   skip, t)}, s, t ); ~   skip   f S B st S = while  do S B od; S = do   S B ~   S E ; exit od; S B T = (L B, T B, s, t); S E T: (L E,T E,s,t); L B  L E = {s}; ST: (L B  L E, T B  T E, s, t); S E = skip.   S B T ~   S E T st