26.1. Feladat.
Lokális minimumok száma
Adottak az
hosszúságú egészeket tartalmazó vektor. Adjuk meg, hogy hány lokális minimum van a vektorban. (Lokális minimum egy elem, ha kisebb a baloldali és nem nagyobb a jobboldali szomszédjánál.) Oldjuk meg a feladatot legfeljebb
processzorral szinkron arhitekturán a lehető legkevesebb lépésben.
a) Specifikáljuk a feladatot!
b) Adjunk megoldó programot és mutassuk meg, hogy megfelel a specifikációnak !
26.2. Feladat.
Feltételes összegzés
Adott az
vektor, és az
függvény.
Számítsuk ki a
értéket!
Készítsük el a feladat specifikációját, írjunk fel megoldó programot és lássuk be a helyességét
26.3. Feladat.
Logikai mátrix sorainak egyezése egy mintával
Adottak az
logikai mátrix és az
-elemű logikai vektor. Adjuk meg, hogy a mátrix hány sora egyezik meg a vektorral. Oldjuk meg a feladatot
processzorral szinkron arhitekturán a lehető legkevesebb lépésben.
a) Specifikáljuk a feladatot!
b) Adjunk megoldó programot és mutassuk meg, hogy megfelel a specifikációnak
26.4. Feladat.
Logikai mátrix szorzása
Adottak az
logikai mátrix és az
-elemű logikai vektor. Számítsuk ki a mátrix és a vektor szorzatát. Oldjuk meg a feladatot
processzorral szinkron arhitekturán a lehető legkevesebb lépésben.
a) Specifikáljuk a feladatot!
b) Adjunk megoldó programot és mutassuk meg, hogy megfelel a specifikációnak
26.5. Feladat.
Első egyezés
Adottak az
függvények. Számítsuk ki az
és
értékeket, ahol
az első olyan index, melyre a három függvény értéke megegyezik, l az a tulajdonság, hogy létezik ilyen index.
a) Specifikáljuk a feladatot!
b) Adjunk megoldó programot és mutassuk meg, hogy megfelel a specifikációnak
26.6. Feladat.
Számoljuk ki két N bites bináris szám szorzatát. Specifikáljuk, adjunk rá programot, majd lássuk be, hogy a program megoldja a feladatot, megfelel a specifikációnak. A megengedett műveletek: léptetés, bitek egyenlőségvizsgálata és bitre vonatkozó értékadás.
26.7. Feladat.
Adott egy irányított, véges, körmentes gráf. Döntsük el, hogy van-e a gráfnak olyan irányított útja, amely minden csúcsot pontosan egyszer érint! (A gráfot egy
-s mátrixban reprezentáljuk.) A gráf csúcsainak száma:
, a csúcsok fokszáma legfeljebb
. Rendelkezésre áll
processzor.
26.8. Feladat.
Adott egy irányított, véges, körmentes gráf. A csúcsokat 0-val, illetve 1-gyel címkézzük. Döntsük el, hogy van-e a gráfnak olyan irányított útja, amely mentén a csúcsok címkéinek sorozata pontosan egy előre megadott természetes szám kettes számrendszerben felírt alakját adja meg! A gráf csúcsainak száma:
, a csúcsok fokszáma legfeljebb
. (A gráfot egy
-es mátrixban reprezentáljuk.) Rendelkezésre áll
processzor.
26.9. Feladat.
Visszavezetés
Adott egy fekete-fehér digitalizált kép egy sora az
hosszúságú
vektorban. A vektor egy eleme 0 vagy 1, a 0 a fekete, az 1 fehér képpontot jelöl. A sor minden képpontjára állapítsuk meg (azaz írjuk a
vektor megfelelő elemébe), hogy milyen messze van tőle jobbra az első fekete képpont ! ( Fekete pontokra ez az érték 0)
26.10. Feladat.
Visszavezetés
Adott egy fekete-fehér,
sorból és
oszlopból álló, digitalizált kép. A kép minden képpontjára az
mátrix tartalmazza, hogy milyen messze van tőle jobbra az első fekete képpont ( Fekete pontokra ez az érték 0). A kép egy bekezdésekre tagolt szöveget tartalmaz, minden bekezdés első sora beljebb kezdődik. Meg szeretnénk keresni a bekezdések kezdetét a k’epen. Feladat : Jelöljük meg a kép első oszlopának azon pontjait (azaz az
logikai vektor megfelelő elemeit állítsuk igazra) , melyek felett van legalább
olyan sor, melynek első
képpontja feh’er.
Párhuzamos és elosztott rendszereket gyakran írunk le folyamathálózatok formájában [[???Hoa 78, ???Hoa 85]]. A folyamatokat dobozokkal jelöljük, a folyamatok közötti kommunikáció formája üzenetküldés. Az üzeneteket egyirányú kommunikációra alkalmas csatornákon keresztül juttatja el a feladó a címzettnek, címzetteknek. Feltételezzük, hogy az üzenettovábbítás megbízható, üzenetek nem veszenek el, nem sérülnek meg, csak a valóban elküldött üzenetek érkeznek meg. Az üzenetküldés aszinkron, a feladó általában rögtön folytatja tevékenységét miután a csatornára elhelyezte az üzenetet, nem kell megvárnia az üzenet átvételét. A csatornák sor típusú változóként viselkednek, átmenetileg képesek tárolni a már elküldött, de még nem fogadott üzeneteket. A csatorna kapacitása határozza meg a tárolható üzenetek számát. Ha a csatorna kapcitása korlátos, akkor előfordulhat, hogy a küldő fél nem tudja rögtön elhelyezni üzenetét és várakozni kell, amíg a csatorna képes nem lesz újabb üzenet fogadására. Minden csatornához két sor típusú változó tartozik, az egyik a csatornán várakozó üzeneteket tartalmazza (a csatorna aktuális állapota), a másik a csatorna története. A csatorna története minden olyan üzenetet tartalmaz helyes sorrendben, amelyik valaha rákerült a csatornára, a történetváltozóról a fogadó fél nem távolítja el az üzeneteket. A történetváltozót egy felülvonással jelöljük. A történetváltozó tárolása a valóságban nehezen vagy egyáltalán nem megoldható, mert egy hosszú ideig futó programban az üzenetek száma idővel minden korlátot meghaladhat. Történetváltozókat ezért csak úgy használunk értékadásokban, hogy értéküket csak saját új érték meghatározásához használjuk fel. Ezek az egyszerű értékadások elhagyhatóak anélkül, hogy a program többi részének működése megváltozna.
A ábrán két folyamatot és az őket összekötő
csatornát láthatjuk.
A csatornára a
folyamat helyezhet el üzenetet, egész számok formájában. A
folyamat olvas a csatornáról. Az alábbi műveletek tartoznak a csatorna
típusú változókhoz:
üzenetküldés (P1): , vagy röviden:
,
üzenet eltávolítás (P2) ,
csatorna inicializálása: ,
üzenet olvasása (P2) ,
lekérdezés, hogy a csatorna üres-e:: , illetve hány üzenet várakozik a csatornán:
or
.
Az alábbiakban megadjuk az egyes műveletek pontos jelentését is. Elemi műveletek jelentését megadhatjuk hatásrelációjukkal, vagy azzal ekvivalens módon a leggyangébb előfeltételük kiszámításának meghatározásával is.
üzenetküldés:
üzenet eltávolítása:
,
csatorna inicializálása: .
Figyeljük meg, hogy üzenetküldés leggyengébb előfeltételének kiszámításakor a csatorna történetét is helyettesíteni kell az utófeltételben, míg az üzenet eltávolítása nem érinti a történetváltozót.
Ha a folyamatok közötti kommunikációra nem használunk osztott változókat, hanem kizárólag csatronaváltozók segítségével oldjuk meg az információ cseréjét, akkor az egyes folyamatok közötti kapcsolat jól ellenőrizhetővé válik. A lokalitás tétel állítását fogalmazhatjuk újra speciális formában:
26.11. Lemma (Lokalitás folyamthálózatokban).
Ha egy
állítás változói között csak
folyamat lokális változói, ill.
kimenő csatornaváltozói szerepelnek, akkor a
állítás stabil a többi folyamatban.
Ha
és
, akkor
stabil a teljes folyamathálózatban.