<?xml version="1.0" encoding="utf-8"?>

		<?xml-stylesheet type="text/xsl" href="mathml.xsl"?><h:html xmlns:h="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML"><h:head>        <h:title></h:title>        </h:head><h:body style="text-align:justify;margin:0 5% 0 5%;" alink="#3300FF" link="#3300FF" vlink="#3300FF">
<h:p>
<h:p><h:br/><h:center>
<h:img src="pics/ParAlgCimlap.gif">

</h:img>
</h:center></h:p>
<h:p><h:br/><h:center>
<h:font color="#3300FF" size="">

<h:b>Iványi Antal</h:b>
</h:font>
<h:a name="id4483534"/>
</h:center></h:p>
<h:p><h:br/><h:center>
<h:font color="#3300FF" size="">

<h:b>PÁRHUZAMOS ALGORITMUSOK</h:b>
</h:font>
</h:center></h:p>
<h:p><h:br/><h:center>
<h:font color="#3300FF" size="">

<h:b>ELTE Eötvös Kiadó, Budapest, 2005 március</h:b>
</h:font>
</h:center></h:p>
    
<h:p><h:br/><h:center><h:p><h:br/><h:center><h:img src="pics/OM.gif"/></h:center></h:p>
 Ez az elektronikus könyv az Oktatási Minisztérium támogatásával, a Felsőoktatási Tankönyvés Szakkönyvtámogatási pályázat keretében készült. </h:center></h:p>
<h:p><h:br/><h:center>© Iványi Antal, ELTE Eötvös Kiadó, 2005 <h:a name="id4483925"/></h:center></h:p>
<h:p><h:br/><h:center><h:b>Lektorok:</h:b> <h:a href="http://people.inf.elte.hu/hz">Horváth</h:a> Zoltán, 
<h:a href="http://www.cs.ubbcluj.ro/ kasa/">Kása</h:a> Zoltán, 
<h:a href="http://www.elte.hu/ pici/">Pécsy</h:a> Gábor, 
<h:a href="http://www.elte.hu/ slice/">Szűcs</h:a> László <h:a name="id4483967"/><h:a name="id4483972"/><h:a name="id4483977"/><h:a name="id4483982"/></h:center></h:p>
<h:p><h:br/><h:center>Kiadja az 
<h:a href="http://www.elte.hu/szervezet/eotvos kiado 7.html"><h:b>ELTE Eötvös Kiadó</h:b></h:a></h:center></h:p>
<h:p><h:br/><h:center>1051 Budapest, Szerb utca 1. </h:center></h:p>
<h:p><h:br/><h:center>Telefon: 411-6740, Fax: 485-52-26 </h:center></h:p>
<h:p><h:br/><h:center>Honlap: 
<h:a href="http://www.elte.hu/szervezet/eotvos kiado 7.html"><h:b>http://www.elte.hu/szervezet/eotvos kiado 7.html</h:b></h:a></h:center></h:p>
<h:p><h:br/><h:center>Elektronikus cím: 
<h:a href="mailto:eotvoskiado@ludens.elte.hu"><h:b>eotvoskiado@ludens.elte.hu</h:b></h:a></h:center></h:p>
<h:p><h:br/><h:center>Felelős kiadó: 
<h:a href="http://www.elte.hu/szervezet/eotvos˙kiado.html"><h:b>Pándi András</h:b></h:a><h:a name="id4484038"/></h:center></h:p>
</h:p>
<h:br/><h:br/><h:center><h:strong><h:font face="Arial" size="+2.5" color="#3300FF"><h:a name="id4484046">Tartalomjegyzék </h:a></h:font></h:strong></h:center>

<h:p>
<h:blockquote><h:a href="#">Előszó</h:a></h:blockquote><h:blockquote><h:a href="#id4486736">1. Bevezetés<h:a name="id4484075"/></h:a></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4487408">1.1. Alapfogalmak<h:a name="id4484088"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4488810">1.2. Hatékonysági mértékek<h:a name="id4484100"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4492300">1.3. Pszeudokód<h:a name="id4484113"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4493057">1.4. Számítási modellek<h:a name="id4484126"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4493078">1.4.1. Számítógépek<h:a name="id4484139"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4493217">1.4.2. Párhuzamos gépek<h:a name="id4484152"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4497281">1.4.3. Hálózatok<h:a name="id4484165"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4500935">1.5. Rekurzió<h:a name="id4484178"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4501908">1.6. Véletlenített algoritmusok (*)<h:a name="id4484191"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4502417">1.6.1. Egyenlőtlenségek<h:a name="id4484204"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4502907">1.6.2. Példák<h:a name="id4484217"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4503924">1.7. Alsó korlátok<h:a name="id4484230"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4503996">1.7.1. Egyszerű számolás<h:a name="id4484243"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4504714">1.7.2. Leszámlálás<h:a name="id4484256"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4505094">1.7.3. Döntési fák<h:a name="id4484269"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4505296">1.7.4. Tanácsadói érvelés<h:a name="id4484282"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4505355">1.7.5. Információelméleti érvelés<h:a name="id4484295"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4505421">1.7.6. Gráfelméleti érvelés<h:a name="id4484308"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4505445">1.8. Anomália<h:a name="id4484322"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4505502">1.8.1. Lapcsere<h:a name="id4484334"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4507433">1.8.2. Ütemezés<h:a name="id4484347"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4507828">1.8.3. Párhuzamos feldolgozás átfedéses memóriával<h:a name="id4484359"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4508750">1.8.4. Párhuzamos korlátozás és szétválasztás<h:a name="id4484373"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4509953">1.8.5. Az anomália elkerülése<h:a name="id4484387"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:a href="#id4511674">2. Párhuzamos gépek<h:a name="id4484400"/></h:a></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4511712">2.1. Alapvető módszerek<h:a name="id4484414"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4511752">2.1.1. Prefixszámítás<h:a name="id4484427"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4512529">Prefixszámítás CREW PRAM modellen<h:a name="id4484440"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4512968">Prefixszámítás EREW PRAM modellen<h:a name="id4484454"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4513110">Prefixszámítás munkaoptimálisan<h:a name="id4484467"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4513627">2.1.2. Tömb elemeinek rangsorolása<h:a name="id4484481"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4514250">Determinisztikus tömbrangsorolás<h:a name="id4484494"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4514685">Véletlenített listarangsorolás (*)<h:a name="id4484508"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4515718">2.2. Kiválasztás<h:a name="id4484522"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4515907">2.2.1. Kiválasztás négyzetes számú processzoron<h:a name="id4484534"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4516364">2.2.2. Kiválasztás 


<h:a name="id4484548"/><mml:math><mml:mi>p</mml:mi></mml:math></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4516934">2.2.3. Kiválasztás egész számok között<h:a name="id4484569"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4517726">2.2.4. Az általános kiválasztási feladat megoldása 


<h:a name="id4484582"/><mml:math><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>/</mml:mo></mml:mrow></mml:msup><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4518132">2.2.5. Munkaoptimális véletlenített algoritmus (*)<h:a name="id4484615"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4519094">2.3. Összefésülés<h:a name="id4484629"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4519156">2.3.1. Logaritmikus idejű algoritmus<h:a name="id4484642"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4519696">2.3.2. Páratlan-páros összefésülő algoritmus<h:a name="id4484655"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4521140">2.3.3. Munkaoptimális algoritmus<h:a name="id4484668"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4522255">2.3.4. Egy még gyorsabb algoritmus<h:a name="id4484681"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4523036">2.4. Rendezés<h:a name="id4484695"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4523556">2.4.1. Páratlanpáros algoritmus<h:a name="id4484707"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4524140">2.4.2. Egy véletlenített algoritmus 


<h:a name="id4484720"/><mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>*</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4524613">2.4.3. Preparata algoritmusa<h:a name="id4484747"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4525187">2.4.4. Reischuk véletlenített algoritmusa (*)<h:a name="id4484759"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4525966">2.5. Gráfalgoritmusok<h:a name="id4484773"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4526661">2.5.1. Minmátrix<h:a name="id4484786"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4526791">2.5.2. Tranzitív lezárt<h:a name="id4484798"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4526930">2.5.3. Összefüggő komponensek<h:a name="id4484811"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4527154">2.5.4. Minimális feszítőfa<h:a name="id4484824"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4527259">2.5.5. Konvex burok<h:a name="id4484837"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:a href="#id4528119">3. Rácsok<h:a name="id4484850"/></h:a></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4528176">3.1. Számítási modellek<h:a name="id4484862"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4529195">3.2. Csomagirányítás<h:a name="id4484875"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4529703">3.2.1. Csomagirányítás láncon<h:a name="id4484888"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4531332">3.2.2. Egy mohó algoritmus a PPR megoldására rácson<h:a name="id4484902"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4531871">3.2.3. Egy kis várakozási sort használó véletlenített algoritmus (*)<h:a name="id4484916"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4532718">3.3. Alapfeladatok<h:a name="id4484930"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4532866">3.3.1. Üzenetszórás<h:a name="id4484943"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4533339">3.3.2. Prefixszámítás<h:a name="id4484956"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4533363">Prefixszámítás láncon<h:a name="id4484969"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4533909">3.3.3. Adatkoncentráció<h:a name="id4484982"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4534138">3.3.4. Ritka rendezés<h:a name="id4484995"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4534391">3.4. Kiválasztás<h:a name="id4485008"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4534437">3.4.1. Véletlenített algoritmus az 


<h:a name="id4485021"/><mml:math><mml:mi>p</mml:mi><mml:mo>=</mml:mo><mml:mi>n</mml:mi></mml:math><mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>*</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4534692">3.4.2. Véletlenített algoritmus, ha a processzorsám kicsi (*)<h:a name="id4485055"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4535318">3.4.3. Determinisztikus algoritmus kis processzorszámra<h:a name="id4485069"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4536108">3.5. Összefésülés<h:a name="id4485083"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4536134">3.5.1. Rangon alapuló összefésülés láncon<h:a name="id4485096"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4536422">3.5.2. Páratlan-páros összefésülés láncon<h:a name="id4485110"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4536648">3.5.3. Páratlan-páros összefésülés négyzeten<h:a name="id4485123"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4537031">3.6. Rendezés<h:a name="id4485137"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4537052">3.6.1. Rendezés láncon<h:a name="id4485150"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4537071">Rangsoroló rendezés láncon<h:a name="id4485163"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4537152">Páratlan-páros felcserélő rendezés láncon<h:a name="id4485176"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4537273">Páratlan-páros összefésülő rendezés láncon<h:a name="id4485191"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4537360">3.6.2. Rendezés négyzeten<h:a name="id4485205"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4537373">Schearson rendező algoritmusa<h:a name="id4485218"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4537534">Páratlan-páros összefésülő rendezés<h:a name="id4485232"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4537681">3.7. Gráfalgoritmusok<h:a name="id4485245"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4537713">3.7.1. Kocka<h:a name="id4485258"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4537791">Minmátrix számítása<h:a name="id4485271"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4537988">Irányított gráf tranzitív lezártja<h:a name="id4485284"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4538088">Összefüggő komponensek meghatározása<h:a name="id4485298"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4538196">3.7.2. Négyzet<h:a name="id4485311"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4538215">Tranzitív lezárt<h:a name="id4485324"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4538508">Legrövidebb utak<h:a name="id4485337"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4538578">Konvex burok<h:a name="id4485350"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:a href="#id4541033">4. Hiperkocka<h:a name="id4485363"/></h:a></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4541060">4.1. Számítási modellek<h:a name="id4485375"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4541076">4.1.1. Hiperkocka<h:a name="id4485388"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4542138">4.1.2. Pillangó hálózat<h:a name="id4485401"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4543340">4.1.3. Hálózatok beágyazása<h:a name="id4485414"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4543682">Gyűrű beágyazása<h:a name="id4485427"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4544501">Tórusz beágyazása<h:a name="id4485440"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4545275">Bináris fa beágyazása<h:a name="id4485454"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4545821">4.2. Csomagirányítás<h:a name="id4485467"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4545839">4.2.1. Mohó algoritmus<h:a name="id4485480"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4546571">4.2.2. Véletlenített algoritmus<h:a name="id4485493"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4546942">4.2.3. Az első fázis elemzése<h:a name="id4485506"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4547741">A sorméret elemzése<h:a name="id4485520"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4547894">4.3. Alapvető algoritmusok<h:a name="id4485533"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4547972">4.3.1. Üzenetszórás fában<h:a name="id4485546"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4548271">4.3.2. Prefixszámítás fán<h:a name="id4485559"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4548813">4.3.3. Adatkoncentráció<h:a name="id4485572"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4549069">4.3.4. Kisszámú elem rendezése hiperkockán<h:a name="id4485585"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4549605">4.4. Kiválasztás<h:a name="id4485599"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4549704">4.4.1. Véletlenített algoritmus, ha p és n megegyezik (*)<h:a name="id4485611"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4549937">4.4.2. Véletlenített algoritmus kis processzorszámhoz (*)<h:a name="id4485626"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4550325">4.4.3. Determinisztikus algoritmus kis processzorszámhoz<h:a name="id4485640"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4550648">4.5. Összefésülés<h:a name="id4485654"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4550725">4.5.1. Páratlan-páros összefésülés<h:a name="id4485666"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4551821">4.5.2. Biton összefésülés<h:a name="id4485680"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4552297">4.6. Rendezés<h:a name="id4485693"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4552329">4.6.1. Páratlan-páros összefésülő rendezés<h:a name="id4485706"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4552567">4.6.2. Biton rendezés<h:a name="id4485720"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4552709">4.7. Gráfalgoritmusok<h:a name="id4485733"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4552725">4.7.1. Minmátrix meghatározása<h:a name="id4485746"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4553428">4.7.2. Tranzitív lezárt<h:a name="id4485759"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4553543">4.7.3. Összefüggő komponensek<h:a name="id4485772"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4553660">4.7.4. Legrövidebb utak<h:a name="id4485785"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4553852">4.7.5. Konvex burok<h:a name="id4485798"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:a href="#id4554810">5. Szinkronizált hálózat<h:a name="id4485810"/></h:a></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4554824">5.1. Számítási modell<h:a name="id4485823"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4555494">5.2. Vezető választása<h:a name="id4485836"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4555612">5.2.1. Vezetőválasztás megoldhatatlansága gyűrűben<h:a name="id4485849"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4555804">5.2.2. Vezetőválasztás gyűrűben<h:a name="id4485863"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4555915">LeLann algoritmusa<h:a name="id4485877"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4556385">Chang és Roberts algoritmusa<h:a name="id4485890"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4557830">Hirschberg és Sinclair algoritmusa<h:a name="id4485903"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4557966">IDŐSZELET algoritmus<h:a name="id4485917"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4558209">Alsó korlát az üzenetszámra<h:a name="id4485930"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4558325">5.2.3. Vezetőválasztás fában<h:a name="id4485944"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4558497">5.2.4. Vezetőválasztás általános hálózatban<h:a name="id4485957"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4558511">MAX-TERJED algoritmus<h:a name="id4485971"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4558626">OPT-MAX-TERJED algoritmus<h:a name="id4485984"/></h:a></h:blockquote></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4558725">5.2.5. Alsó korlát az üzenetek számára<h:a name="id4485996"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4558991">5.3. Megegyezés<h:a name="id4486010"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4559074">5.3.1. Megegyezés vonalhibák esetében<h:a name="id4486023"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4559157">5.3.2. Megegyezés processzorhibák esetében<h:a name="id4486036"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4559243">5.3.3. 
-megegyezés<h:a name="id4486050"/><mml:math><mml:mi>k</mml:mi></mml:math></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:blockquote><h:a href="#id4559404">5.3.4. Közelítő megegyezés<h:a name="id4486069"/></h:a></h:blockquote></h:blockquote></h:blockquote><h:blockquote><h:a href="#id4561774">6. Hagyományos és elektronikus irodalom<h:a name="id4486081"/></h:a></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4561788">6.1. Megjegyzések az 1. fejezethez<h:a name="id4486094"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4563909">6.2. Megjegyzések a 2. fejezethez<h:a name="id4486108"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4564167">6.3. Megjegyzések a 3. fejezethez<h:a name="id4486121"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4564254">6.4. Megjegyzések a 4. fejezethez<h:a name="id4486135"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:blockquote><h:a href="#id4564311">6.5. Megjegyzések az 5. fejezethez<h:a name="id4486148"/></h:a></h:blockquote></h:blockquote><h:blockquote><h:a href="#">Jelölések</h:a></h:blockquote><h:blockquote><h:a href="#">Angol szakkifejezések</h:a></h:blockquote><h:blockquote><h:a href="#">Magyar szakkifejezések</h:a></h:blockquote><h:blockquote><h:a href="#">Folyóiratok a hazai könyvtárakban</h:a></h:blockquote><h:blockquote><h:a href="#id4572213">Irodalomjegyzék<h:a name="id4486205"/></h:a></h:blockquote><h:blockquote><h:a href="#id4584749">Tárgymutató<h:a name="id4486218"/></h:a></h:blockquote><h:blockquote><h:a href="#id4588267">Névmutató<h:a name="id4486230"/></h:a></h:blockquote>
</h:p>

<h:br/><h:br/><h:center><h:strong><h:font face="Arial" size="+2.5" color="#3300FF"><h:a name="id4486240">Előszó </h:a></h:font></h:strong></h:center>

<h:p>Ez az elektronikus tankönyv az ELTE programtervező matematikus szakának I/2B sávjában a 
<h:i>Párhuzamos algoritmusok</h:i>
 tantárgy, valamint az Informatikai Doktori Iskolában a 
<h:i>Párhuzamos és osztott algoritmusok elemzése</h:i>
 tantárgy keretében tartott előadások anyagát tartalmazza. </h:p>
<h:p>A könyv hat fejezetből 
<h:i>(Bevezetés, Párhuzamos gép, Rács, Kocka, Szinkronizált hálózat, Hagyományos és elektronikus irodalom)</h:i>
 és nyolc további részből 
<h:i>(Jelölések, Angol szakkifejezések, Magyar szakkifejezések, Irodalomjegyzék, Lelőhelyjegyzék, Névmutató, Tárgymutató, Megoldások)</h:i>
 áll. </h:p>
<h:p>A második fejezetet 
<h:a href="http://people.inf.elte.hu/hz">Horváth</h:a> Zoltán, a harmadikat <h:a name="id4486298"/><h:a name="id4486304"/><h:a name="id4486309"/><h:a name="id4486314"/><h:a href="http://www.elte.hu/ slice/">Szűcs</h:a> László, a negyediket 
<h:a href="http://www.elte.hu/ pici/">Pécsy</h:a> Gábor, a könyv többi részét 
<h:a href="http://www.cs.ubbcluj.ro/ kasa/">Kása</h:a> Zoltán lektorálta. </h:p>
<h:p>Köszönöm a könyv lektorainak a sok hasznos észrevételt. Lényeges segítséget jelentett, hogy a lektorok nem csak a saját részüket nézték át. Kollégáim közül köszönöm 
<h:a href="b˙a˙s@inf.elte.hu">Balogh</h:a><h:a name="id4486356"/>
 Ádám (ELTE), 
<h:a href="mailto:dozsa@sztaki.hu">Dózsa</h:a><h:a name="id4486368"/>
 Gábor (SZTAKI), 
<h:a href="mailto:ttkinflib@inf.elte.hu">Fábián</h:a><h:a name="id4486380"/>
 (ELTE) Mária, 
<h:a href="mailto:newuser@sze.hu">Miletics</h:a> Edit (Széchenyi István Egyetem), <h:a name="id4486395"/><h:a href="http://www.math.klte.hu/ pethoe/">Pethő</h:a> Attila (Debreceni Egyetem), <h:a name="id4486407"/><h:a href="http://web.axelero.hu/antoncom">Rét</h:a><h:a name="id4486417"/>
 Anna (Műszaki Könyvkiadó), 
<h:a href="mailto:schabo@ludens.elte.hu">Scharnitzky</h:a><h:a name="id4486429"/>
 Viktorné (ELTE), 
<h:a href="http://www.bmf.hu/02szervezeti/sima˙dezso.htm">Sima</h:a><h:a name="id4486443"/>
 Dezső (BMF), 
<h:a href="mailto:simon@ludens.elte.hu">Simon</h:a><h:a name="id4486454"/>
 Péter (ELTE) és 
<h:a href="http://numanal.inf.elte.hu/ szili ">Szili</h:a><h:a name="id4486466"/>
 László (ELTE) javaslatait. </h:p>
<h:p>A korábbi változatok alapján vizsgázó hallgatók közül pedig 
<h:a href="bege@inf.elte.hu">Balázs</h:a><h:a name="id4486484"/>
 Gábor (ELTE), 
<h:a href="mailto:borbolya@inf.elte.hu">Baksa</h:a><h:a name="id4486496"/>
 Klára (ELTE), 
<h:a href="http://people.inf.elte.hu/deva/">Dévai</h:a><h:a name="id4486508"/>
 Gergely (ELTE), 
<h:a href="mailto:duhaj@hali.elte.hu">Hajdu</h:a><h:a name="id4486520"/>
 Tamás (ELTE), 
<h:a href="mailto:htamas@inf.elte.hu">Hegyessy</h:a><h:a name="id4486532"/>
 Tamás (ELTE), 
<h:a href="http://people.inf.elte.hu/hermannp/">Hermann</h:a><h:a name="id4486544"/>
 Péter (ELTE), 
<h:a href="http://people.inf.elte.hu/joba">Kapinya</h:a><h:a name="id4486556"/>
 Judit (ELTE), 
<h:a href="mailto:kovacsp@inf.elte.hu">Kovács</h:a><h:a name="id4486568"/>
 Péter (ELTE), 
<h:a href="mailto:mebea@inf.elte.hu">Metykó</h:a><h:a name="id4486580"/>
 Beáta (ELTE) és 
<h:a href="mailto:robi@inf.elte.hu">Szalai</h:a><h:a name="id4486592"/>
 Róbert (ELTE) segítettek. </h:p>
<h:p>A könyv ábráit 
<h:a href="mailto:locherk@freemail.hu">Locher</h:a> Kornél rajzolta. A könyv kézirata a HLA T E X kiadványszerkesztővel készült, amelyet az elmúlt években fejlesztettünk ki 
<h:a href="http://people.inf.elte.hu/bvic"><h:b>Belényesi</h:b></h:a> Viktorral és 
<h:a href="mailto:lkornel@inf.elte.hu"><h:b>Locher</h:b></h:a> Kornéllal. Az irodalomjegyzéket 
<h:a href="http://web.axelero.hu/antoncom"><h:b>Iványi</h:b></h:a> Anna tette élővé. <h:a name="id4486640"/><h:a name="id4486645"/><h:a name="id4486650"/>
 A párhuzamos algoritmusok szakirodalma nagyon gyorsan fejlődik. Ezért a könyvnek az ELTE Informatikai Kara 
<h:p><h:br/><h:center><h:a href="http://elek.inf.elte.hu">http://elek.inf.elte.hu</h:a></h:center></h:p>
 címen lévő elektronikus könyvtárában lévő 
<h:i>honlapján</h:i>
 folyamatosan karbantartjuk a 
<h:i>külföldi és hazai hivatkozások</h:i>
 aktuális listáját (hiperszöveg formájában, így a honlap látogatói kattintással közvetlenül elérhetik az idézett művek szerzőinek honlapját, és olyan elektronikus könyvtárakat, ahonnan az idézett cikkek letölthetők). Ugyanitt a beérkezett észrevételek alapján a nyomtatott könyv szövegében javasolt 
<h:i>változtatások</h:i>
 listáját is karbantartjuk. </h:p>
<h:p>Az 
<h:i>elektronikus címek aláhúzása</h:i>
 azt jelzi (itt az előszóban, az irodalomjegyzékben és a lelőhelyjegyzékben), hogy a könyv honlapján lévő PDF és DVI változatban a címek élnek, a PS változatban pedig kék színnel ki vannak emelve. </h:p>
<h:p>Kérem a könyv Olvasóit, hogy észrevételeiket és javaslataikat írják meg a 
<h:p><h:br/><h:center><h:a href="mailto:tony@inf.elte.hu">tony@inf.elte.hu</h:a></h:center></h:p>
 címre. Különösen köszönöm a témával kapcsolatos új feladatokat. <h:br/><h:br/>Budapest, 2005. április 10. <h:br/><h:br/>Iványi Antal </h:p>

<h:br/><h:br/><h:center><h:strong><h:font face="Arial" size="+2.5" color="#3300FF"><h:a name="id4486736">1. Bevezetés</h:a></h:font></h:strong></h:center>

<h:p>A számítógépes feladatmegoldás természetes és hagyományos világa a 
<h:i>soros adatfeldolgozás.</h:i><h:a name="id4486751"/><h:a name="id4486757"/>
 A különböző alkalmazási területek nagy teljesítményigényének és környezetünk párhuzamos jellegének hatására azonban rohamosan fejlődik a párhuzamos feldolgozás is. <h:br/><h:br/>
<h:font color="#3300FF" size=""><h:b>Párhuzamos adatfeldolgozás.</h:b></h:font>
 Egy feladat párhuzamos megoldása ugyanúgy 3 lépésből áll, mint a soros megoldás. Először meg kell érteni és pontosan <h:a name="id4486785"/><h:a name="id4486790"/><h:i>meg kell fogalmazni</h:i><h:a name="id4486798"/><h:a name="id4486804"/><h:a name="id4486809"/>
 a feladatot – ez a lépés hasonló a soros feldolgozás első lépéséhez. Mivel a soros adatfeldolgozás számára ismert feladatokat oldunk meg, a problémák megértése – az eddigi tapasztalatok szerint – az olvasók többsége (például harmadéves programtervező és informatika szakos hallgatók) számára nem jelent gondot. </h:p>
<h:p>A második lépésben választunk egy ismert architektúrát (esetleg tervezünk egy újat) és ahhoz 
<h:i>tervezünk egy megoldási algoritmust</h:i>
. <h:a name="id4486834"/>
 Ez vagy új algoritmus, vagy egy soros algoritmus párhuzamosított változata. Könyvünk tárgya a párhuzamos adatfeldolgozásnak ez a része, azaz a 
<h:i>párhuzamos algoritmusok tervezése és elemzése.</h:i>
 Végül a harmadik lépésben az algoritmust a meglévő programozási módszerek valamelyikével 
<h:i>párhuzamos program formájában megvalósítjuk</h:i>
 (itt is szóba jön új programozási módszer alkalmazása). <h:br/><h:br/>
<h:font color="#3300FF" size=""><h:b>Párhuzamos algoritmusok.</h:b></h:font>
 Ha egy feladatot együttműködő processzorok segítségével oldunk meg, akkor a számítási idő rendszerint csökken, mivel bizonyos műveletek egyidejűleg elvégezhetők. Ennek a csökkenésnek az ára a nagyobb beruházásigény és az elvégzendő munka mennyiségének növekedése. </h:p>
<h:p>A párhuzamos algoritmusokat különböző szempontok szerint szokták osztályozni. </h:p>
<h:p>Az egyik szempont a processzorok működésének 
<h:font color="#3300FF" size=""><h:b><h:i>időzítése.</h:i></h:b></h:font><h:a name="id4486900"/>
 Eszerint vannak összehangoltan dolgozó, ún. 
<h:font color="#3300FF" size=""><h:b><h:i>szinkronizált processzorok</h:i></h:b></h:font><h:a name="id4486916"/><h:a name="id4486922"/>
 és egymástól függetlenül dolgozó, ún. 
<h:font color="#3300FF" size=""><h:b><h:i>aszinkron processzorok.</h:i></h:b></h:font><h:a name="id4486937"/>
 Emellett vannak <h:a name="id4486943"/><h:a name="id4486948"/>
<h:font color="#3300FF" size=""><h:b><h:i>hibrid</h:i></h:b></h:font>
 megoldások, ahol a processzorok részben összehangoltan dolgoznak. <h:a name="id4486965"/><h:a name="id4486971"/><h:a name="id4486976"/><h:a name="id4486981"/>
 Egy másik osztályozási szempont az együttműködő processzorok közötti információcsere módja, azaz a 
<h:font color="#3300FF" size=""><h:b><h:i>kommunikációs modell.</h:i></h:b></h:font><h:a name="id4486999"/>
 Ez az információcsere történhet a közös memória segítségével és/vagy üzenetek küldésével és fogadásával. </h:p>
<h:p>Fontos a 
<h:font color="#3300FF" size=""><h:b><h:i>rendszer megbízhatóságával</h:i></h:b></h:font><h:a name="id4487022"/>
 kapcsolatos felfogásunk: hibátlan működést tételezünk fel vagy megengedünk bizonyos típusú hibákat (például a processzorok vagy az adatátviteli vonalak meghibásodását). </h:p>
<h:p>Lényeges az az 
<h:font color="#3300FF" size=""><h:b><h:i>architektúra,</h:i></h:b></h:font><h:a name="id4487046"/>
 amelyre algoritmusainkat tervezzük. A második fejezetben röviden áttekintjük a párhuzamos számítógépek főbb típusait, az elemzésekhez azonban a számítási modelleknek nevezett 
<h:font color="#3300FF" size=""><h:b><h:i>absztrakt számítógépeket</h:i></h:b></h:font><h:a name="id4487067"/>
 használjuk. </h:p>
<h:p>A párhuzamos algoritmusok közül csak a szinkronizált modelleken megvalósíthatókat tárgyaljuk. Eközben feltételezzük, hogy a processzorok, adatátviteli vonalak, közös és saját memória – azaz a rendszer minden eleme – megbízhatóan működnek.
<h:font color="#3300FF" size=""><h:b>Előismeretek.</h:b></h:font>
 A tárgyalt anyag nagy része az informatikai képzés alapvető kurzusait (adatszerkezetek, algoritmusok, analízis, diszkrét matematika, programozás) sikeresen elvégző hallgatók számára érthető. A véletlenített algoritmusok elemzése a binomiális eloszlás néhány tulajdonságán alapul, ezért ezekben az alfejezetekben a valószínűségszámítási ismeretekre is támaszkodunk. </h:p>
<h:p>Ezeket a részeket a címekben és a tartalomjegyzékben csillaggal (


<mml:math><mml:mo>*</mml:mo></mml:math>
) jelöltük. </h:p>
<h:p>A feladatok egy részének megoldásához hasznosak az operációkutatással, optimalizálással és szimulációval kapcsolatos ismeretek. 
<h:font color="#3300FF" size=""><h:b>A fejezetek egymásra épülése.</h:b></h:font>
 Bár helyenként felhasználunk a könyv korábbi részeiben bemutatott algoritmusokat, a bevezető első fejezet elolvasása után a többi fejezet egymástól függetlenül is érthető. Ha azonban az Olvasót például a konvex burok hiperkockán való meghatározása érdekli, célszerű a párhuzamos gépen és a rácson alkalmazott <h:a name="id4487141"/>
 algoritmusokkal is megismerkedni (a tartalomjegyzék és a tárgymutató segít a 
<h:i>visszalapozásban.</h:i>
) <h:br/><h:br/>
<h:font color="#3300FF" size=""><h:b>Tartalom.</h:b></h:font>
 A könyv hat fejezetből és hét további részből áll. </h:p>
<h:p>Az első fejezetben 
<h:i>(Bevezetés)</h:i>
 előkészítjük a további anyagot: megadjuk az alapvető meghatározásokat, ismertetjük a felhasznált számítási modelleket és pszeudokódot, foglalkozunk a rekurzív algoritmusokkal és a rekurzív egyenletekkel, a véletlenített algoritmusokkal, az alsó korlátokkal és az anomáliával. </h:p>
<h:p>A további négy fejezetben párhuzamos algoritmusokat ismertetünk és elemzünk – az algoritmusok megvalósítására használt számítási modellek (és az azok alapjául szolgáló architektúrák) szerint csoportosítva: a szinkronizált processzorok kapcsolatát párhuzamos közvetlen hozzáférésű gépek 
<h:i>(Párhuzamos gép),</h:i><h:a name="id4487202"/>
 rácsok 
<h:i>(Rács)</h:i><h:a name="id4487213"/>
 kockák 
<h:i>(Kocka)</h:i><h:a name="id4487222"/>
 és tetszőleges gráfok 
<h:i>(Szinkron hálózat)</h:i>
 segítségével adjuk meg. </h:p>
<h:p>A hatodik fejezetben 
<h:i>(Hagyományos és elektronikus irodalom)</h:i>
 a könyv írásához felhasznált és az egyes témák részletesebb megismeréséhez ajánlott – nyomtatott és elektronikus formában, magyar és idegen nyelveken hozzáférhető – dokumentumok tartalmát és lelőhelyi adatait foglaljuk össze.<h:br/><h:br/>
<h:font color="#3300FF" size=""><h:b>Módszertan.</h:b></h:font>
 A könyv felépítésével és az alkalmazott tipográfiai eszközökkel igyekeztünk megkönnyíteni az anyag megértését. A szövegben gyakran alkalmaztunk magyarázattal ellátott ábrákat és példákat. Az egyes fejezetek végén gyakorlatok és feladatok vannak. A gyakorlatok a fejezet anyagának jobb megértését segítik elő és az anyag ismeretében rendszerint gyorsan megoldhatók. </h:p>
<h:p>A feladatok megoldása önálló gondolkodást és esetenként több matematikai ismeretet igényel. </h:p>
<h:p>Az algoritmusok elemzését nem törtük meg hivatkozásokkal, viszont a hatodik fejezetben témakörönként összefoglaltuk az elsősorban ajánlott szakkönyvek és cikkek adatait, és alternatív megoldásokra is utaltunk. </h:p>
<h:p>A könyv végén összefoglaltuk az alkalmazott jelöléseket 
<h:i>(Jelölések),</h:i>
 és megadtuk az angol szakkifejezések 
<h:i>(Angol szakkifejezések)</h:i>
 magyar, valamint a magyar szakkifejezések 
<h:i>(Magyar szakkifejezések)</h:i>
 angol megfelelőjét. A bizonyítások végét 
<h:font color="#FF33FF" size="">,</h:font>
 a példák végét 
<h:font color="#FF33FF" size=""></h:font>
 jelzi. A definíciókban az új fogalom nevét 
<h:font color="#3300FF" size=""><h:b><h:i>kék félkövér dőlt betűkkel</h:i></h:b></h:font>
 írtuk. A sorszámozott képletek tördelésénél az Olvasók kényelmét szolgáló amerikai stílust követtük (azaz minden relációjel új sorba kerül – az ilyen képletek sorfolytonosan olvasandók). </h:p>
<h:p>Mivel a vesszőnek gyakran van a szövegben nyelvtani szerepe, a számokban tizedespontot használunk. A gyakorlatok egy részének megoldását megadtuk. </h:p>
<h:p>Az irodalomjegyzékben együtt adjuk meg a hazai és külföldi forrásokat. Az idegen nyelvű szakirodalomból csak a klasszikus és a viszonylag friss műveket soroljuk fel. A magyar nyelvű anyag összeállítása során – az algoritmusok elemzésével foglalkozó műveket tekintve – teljességre törekedtünk. Az elektronikus formában elérhető dokumentumoknál megadtuk a hálózati címet is. Minden dokumentumnál feltüntettük azoknak a szövegrészeknek az azonosítóját, amelyekből hivatkozás van az adott dokumentumra (pl. 2.7. a megfelelő alfejezetre, 113 pedig az irodalomjegyzék 113-as sorszámú elemében lévő hivatkozásra utal). </h:p>
<h:p>A névmutató a könyvben előforduló neveket tartalmazza – teljességre törekedve. </h:p>
<h:p>A tárgymutatóban 
<h:i>dőlt számok</h:i>
 jelzik az egyes fogalmak definiálásának helyét. </h:p>
<h:p>Az előfordulási helyek felsorolásánál megelégedtünk a lényegesnek tartott helyekre való utalással. A gyakorlatokban, feladatokban, ábrákban előforduló fogalmakat az oldalszám melletti rövidítések 
<h:i>(gy, fe, áb)</h:i>
 jelzik. </h:p>
<h:br/><h:center><h:strong><h:font face="Arial" size="+2" color="#3300FF"><h:a name="id4487408">1.1. Alapfogalmak </h:a></h:font></h:strong></h:center>

<h:p>A párhuzamos algoritmusok <h:a name="id4487419"/><h:a name="id4487425"/><h:a name="id4487430"/><h:a name="id4487436"/>
 tárgyalása a soros algoritmusokra épül, ezért a szokásos fogalmak mellett a soros algoritmusokkal kapcsolatos definíciókat is megadjuk. </h:p>
<h:p>Az algoritmusok elemzése – a helyesség bizonyítása mellett – a végrehajtáshoz szükséges erőforrások (ez számítógépen megvalósított algoritmus esetében lehet processzoridő, memóriakapacitás – számítási modellen futó algoritmus esetében pedig memóriarekesz, kommunikációs üzenet, műveleti lépés) mennyiségének meghatározását is jelenti. Gyakran nem tudjuk vagy nem akarjuk az igényelt erőforrás mennyiségét pontosan megadni. Ilyenkor megelégszünk az igény nagyságrendjének jellemzésével. </h:p>
<h:p>Ennek a jellemzésnek a jól bevált eszközei az 


<mml:math><mml:mi>Ω</mml:mi><mml:mo>,</mml:mo><mml:mi>O</mml:mi><mml:mo>,</mml:mo><mml:mi>Θ</mml:mi><mml:mo>,</mml:mo><mml:mi>o</mml:mi></mml:math>
és 


<mml:math><mml:mi>ω</mml:mi></mml:math>
jelölések. </h:p>
<h:p>Mivel az igények általában nemnegatívak, ezért az alábbi meghatározásokban mindenütt feltesszük, hogy az 


<mml:math><mml:mi>f</mml:mi></mml:math>
és 


<mml:math><mml:mi>g</mml:mi></mml:math>
függvények a pozitív egészek halmazán vannak értelmezve, az 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
és 


<mml:math><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
függvényértékek pedig nemnegatív valós számok. </h:p>
<h:p>Az 


<mml:math><mml:mi>O</mml:mi></mml:math>
jelöléssel aszimptotikus felső, az 


<mml:math><mml:mi>Ω</mml:mi></mml:math>
jelöléssel aszimptotikus alsó korlátot tudunk adni, míg a 


<mml:math><mml:mi>Θ</mml:mi></mml:math>
jelöléssel pontosan meg tudjuk adni a vizsgált függvény aszimptotikus viselkedését. </h:p>
<h:p><mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
<h:font color="#3300FF" size=""><h:b><h:i>(nagy ordó)</h:i></h:b></h:font>
 azon 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
függvények halmazát jelenti, amelyekhez léteznek olyan 


<mml:math><mml:mi>c</mml:mi></mml:math>
pozitív valós és 


<mml:math><mml:msub><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:math>
pozitív egész állandók, hogy <h:a name="id4487874"/><h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mtext> ha </mml:mtext><mml:mi>n</mml:mi><mml:mo>≥</mml:mo><mml:msub><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mtext/><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≤</mml:mo><mml:mi>c</mml:mi><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mtext/><mml:mtext/><mml:mtext/><mml:mtext/><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4487884">(1.1)</h:a></h:td></h:tr></h:table><mml:math><mml:mi>Ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
<h:font color="#3300FF" size=""><h:b><h:i>(nagy omega)</h:i></h:b></h:font><h:a name="id4487967"/>
 azon 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
függvények halmazát jelenti, amelyekhez léteznek olyan 


<mml:math><mml:mi>c</mml:mi></mml:math>
pozitív valós és 


<mml:math><mml:msub><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:math>
pozitív egész állandók, hogy 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mtext> ha </mml:mtext><mml:mi>n</mml:mi><mml:mo>≥</mml:mo><mml:msub><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mtext> akkor </mml:mtext><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≥</mml:mo><mml:mi>c</mml:mi><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mtext/><mml:mtext/><mml:mtext/><mml:mtext/><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4488011">(1.2)</h:a></h:td></h:tr></h:table><mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
<h:font color="#3300FF" size=""><h:b><h:i>(nagy teta)</h:i></h:b></h:font><h:a name="id4488093"/>
 azon 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
függvények halmazát jelenti, amelyekhez léteznek olyan pozitív valós 


<mml:math><mml:msub><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math>
és pozitív egész 


<mml:math><mml:msub><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:math>
állandók, hogy 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mtext> ha </mml:mtext><mml:mi>n</mml:mi><mml:mo>≥</mml:mo><mml:msub><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mtext> akkor </mml:mtext><mml:msub><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≤</mml:mo><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≤</mml:mo><mml:msub><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mtext/><mml:mtext/><mml:mtext/><mml:mtext/><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4488153">(1.3)</h:a></h:td></h:tr></h:table>
Az elemzésekben arra törekszünk, hogy 


<mml:math><mml:mi>Θ</mml:mi></mml:math>
típusú becsléseket adjunk, amihez azonos argumentumfüggvényt tartalmazó 


<mml:math><mml:mi>O</mml:mi></mml:math>
és 


<mml:math><mml:mi>Ω</mml:mi></mml:math>
típusú becslésekre van szükség. Ha egy becslésben hangsúlyozni akarjuk, hogy a becslés nem éles, akkor hasznos a 


<mml:math><mml:mi>o</mml:mi></mml:math>
és a 


<mml:math><mml:mi>ω</mml:mi></mml:math>
jelölés. </h:p>
<h:p><mml:math><mml:mi>o</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
<h:font color="#3300FF" size=""><h:b><h:i>(kis ordó)</h:i></h:b></h:font><h:a name="id4488307"/>
 azon 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
függvények halmazát jelenti, melyekre teljesül, hogy minden pozitív valós 


<mml:math><mml:mi>c</mml:mi></mml:math>
állandóhoz megadható egy pozitív egész 


<mml:math><mml:msub><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:math>
úgy, hogy 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mtext> ha </mml:mtext><mml:mi>n</mml:mi><mml:mo>≥</mml:mo><mml:msub><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mtext> akkor </mml:mtext><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≤</mml:mo><mml:mi>c</mml:mi><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mtext/><mml:mtext/><mml:mtext/><mml:mtext/><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4488354">(1.4)</h:a></h:td></h:tr></h:table><mml:math><mml:mi>ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
<h:font color="#3300FF" size=""><h:b><h:i>(kis omega)</h:i></h:b></h:font><h:a name="id4488439"/>
 azon 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
függvények halmazát jelenti, melyekre teljesül, hogy minden pozitív valós 


<mml:math><mml:mi>c</mml:mi></mml:math>
állandóhoz megadható egy pozitív egész 


<mml:math><mml:msub><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:math>
úgy, hogy 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mtext> ha </mml:mtext><mml:mi>n</mml:mi><mml:mo>≥</mml:mo><mml:msub><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mtext> akkor </mml:mtext><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≥</mml:mo><mml:mi>c</mml:mi><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mtext/><mml:mtext/><mml:mtext/><mml:mtext/><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4488486">(1.5)</h:a></h:td></h:tr></h:table>
Ha 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>o</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
, akkor 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mo>lim</mml:mo></mml:mrow><mml:mrow><mml:mi>n</mml:mi><mml:mo>→</mml:mo><mml:mo>∞</mml:mo></mml:mrow></mml:msub><mml:apply><mml:divide/><mml:ci><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci><mml:ci><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci></mml:apply><mml:mo>=</mml:mo><mml:mn>0</mml:mn><mml:mtext/><mml:mtext/><mml:mtext/><mml:mtext/><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4488584">(1.6)</h:a></h:td></h:tr></h:table>
és ha 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
, akkor 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mo>lim</mml:mo></mml:mrow><mml:mrow><mml:mi>n</mml:mi><mml:mo>→</mml:mo><mml:mo>∞</mml:mo></mml:mrow></mml:msub><mml:apply><mml:divide/><mml:ci><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci><mml:ci><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci></mml:apply><mml:mo>=</mml:mo><mml:mo>∞</mml:mo><mml:mtext/><mml:mtext/><mml:mtext/><mml:mtext/><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4488680">(1.7)</h:a></h:td></h:tr></h:table>
Az <h:a href="#id4489205">1.1</h:a>. táblázatban összefoglaltuk a függvények növekedésével kapcsolatban leggyakrabban használt jelöléseket és kifejezéseket. A táblázatban szereplő korlátok tetszőleges erőforrással kapcsolatban használhatók – elemzéseinkben azonban elsősorban lépésszámokra vonatkoznak. </h:p>
<h:p>A táblázatban a 
<h:i>szub</h:i>
 kifejezést 
<h:i>kisebb,</h:i>
 a 
<h:i>szuper</h:i>
 kifejezést pedig 
<h:i>nagyobb</h:i>
 értelemben használtuk. Érdemes megemlíteni, hogy szokás a 
<h:i>kisebb vagy egyenlő,</h:i>
 illetve a 
<h:i>nagyobb vagy egyenlő</h:i>
 értelmű használat is. </h:p>
<h:p>A könyvben a szuperpolinomiális kifejezés szinonimájaként fogjuk használni az 
<h:i>exponenciális</h:i>
 jelzőt. Ezzel az 
<h:font color="#3300FF" size=""><h:b><h:i>exponenciális futási időt</h:i></h:b></h:font><h:a name="id4488795"/>
 a matematikában szokásosnál tágabban definiáltuk: ha egy algoritmus futási ideje felülről nem korlátozható polinommal, akkor exponenciálisnak nevezzük. </h:p>

<h:br/><h:center><h:strong><h:font face="Arial" size="+2" color="#3300FF"><h:a name="id4488810">1.2. Hatékonysági mértékek </h:a></h:font></h:strong></h:center>

<h:p><h:p><h:br/><h:center><h:br/><h:table border="1"><h:tr><h:td>Sorszám </h:td><h:td>Növekedési korlát képlettel </h:td><h:td>Korlát típusa szóval </h:td></h:tr><h:tr><h:td>1 </h:td><h:td><mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></h:td><h:td>konstans </h:td></h:tr><h:tr><h:td>2 </h:td><h:td><mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mo>log</mml:mo></mml:mrow><mml:mrow><mml:mo>*</mml:mo></mml:mrow></mml:msup><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></h:td><h:td>majdnem konstans </h:td></h:tr><h:tr><h:td>3 </h:td><h:td><mml:math><mml:mi>o</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></h:td><h:td>szublogaritmikus </h:td></h:tr><h:tr><h:td>4 </h:td><h:td><mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></h:td><h:td>logaritmikus </h:td></h:tr><h:tr><h:td>5 </h:td><h:td><mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mo>log</mml:mo></mml:mrow><mml:mrow><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:msup><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></h:td><h:td>polilogaritmikus </h:td></h:tr><h:tr><h:td>6 </h:td><h:td><mml:math><mml:mi>ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></h:td><h:td>szuperlogaritmikus </h:td></h:tr><h:tr><h:td>7 </h:td><h:td><mml:math><mml:mi>o</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></h:td><h:td>szublineáris </h:td></h:tr><h:tr><h:td>8 </h:td><h:td><mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></h:td><h:td>lineáris </h:td></h:tr><h:tr><h:td>9 </h:td><h:td><mml:math><mml:mi>ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></h:td><h:td>szuperlineáris </h:td></h:tr><h:tr><h:td>10 </h:td><h:td><mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></h:td><h:td>négyzetes </h:td></h:tr><h:tr><h:td>11 </h:td><h:td><mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></h:td><h:td>köbös </h:td></h:tr><h:tr><h:td>12 </h:td><h:td><mml:math><mml:mi>o</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:msup></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></h:td><h:td>szubpolinomiális </h:td></h:tr><h:tr><h:td>13 </h:td><h:td><mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:msup></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></h:td><h:td>polinomiális </h:td></h:tr><h:tr><h:td>14 </h:td><h:td><mml:math><mml:mi>ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:msup></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></h:td><h:td>szuperpolinomiális </h:td></h:tr><h:tr><h:td/></h:tr></h:table><h:center><h:a name="id4489205"/>
<h:font color="#FF33FF" size=""><h:b>1.1. ábra.</h:b></h:font>
 Függvények növekedésének leggyakoribb korlátai.</h:center><h:br/></h:center></h:p><h:a name="id4489218"/><h:a name="id4489223"/><h:a name="id4489229"/><h:a name="id4489234"/><h:a name="id4489240"/><h:a name="id4489245"/><h:a name="id4489251"/><h:a name="id4489256"/><h:a name="id4489261"/><h:a name="id4489267"/><h:a name="id4489272"/><h:a name="id4489277"/><h:a name="id4489282"/><h:a name="id4489288"/><h:a name="id4489294"/><h:a name="id4489299"/><h:a name="id4489306"/><h:a name="id4489312"/><h:a name="id4489317"/><h:a name="id4489322"/><h:a name="id4489328"/><h:a name="id4489333"/><h:a name="id4489339"/><h:a name="id4489345"/><h:a name="id4489350"/><h:a name="id4489355"/><h:a name="id4489360"/><h:a name="id4489366"/><h:a name="id4489371"/><h:a name="id4489376"/><h:a name="id4489382"/><h:a name="id4489388"/><h:a name="id4489393"/><h:a name="id4489400"/>
 Az algoritmusok elemzése során az igényelt erőforrások mennyiségét 
<h:font color="#3300FF" size=""><h:b><h:i>abszolút</h:i></h:b></h:font>
 és 
<h:font color="#3300FF" size=""><h:b><h:i>relatív</h:i></h:b></h:font>
 mennyiségekkel jellemezzük. <h:a name="id4489427"/><h:a name="id4489433"/>
 Ezeknek a mennyiségeknek a célszerű megválasztása attól is függ, hogy az algoritmus 
<h:font color="#3300FF" size=""><h:b><h:i>konkrét gépen</h:i></h:b></h:font>
 vagy 
<h:font color="#3300FF" size=""><h:b><h:i>absztrakt gépen</h:i></h:b></h:font>
 (számítási modellen) fut. <h:a name="id4489461"/><h:a name="id4489466"/>
 Jelöljük 


<mml:math><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>π</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>-vel, illetve 


<mml:math><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>π</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>-vel azt az időt (azoknak a lépéseknek a számát), amely alatt a 


<mml:math><mml:mi>π</mml:mi></mml:math>
problémát az 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
soros, illetve a 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi></mml:math>
párhuzamos algoritmus – (utóbbi 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzort felhasználva) – 


<mml:math><mml:mi>n</mml:mi></mml:math>
méretű feladatokra legrosszabb esetben megoldja. <h:a name="id4489570"/><h:a name="id4489576"/>
 Hasonlóképpen jelöljük 


<mml:math><mml:mi>B</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>π</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>-vel, illetve 


<mml:math><mml:mi>B</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>π</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>-vel azt az időt (azoknak a lépéseknek a számát), amely alatt a 


<mml:math><mml:mi>π</mml:mi></mml:math>
problémát az 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
soros, illetve a 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi></mml:math>
párhuzamos algoritmus (utóbbi 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzort felhasználva) – 


<mml:math><mml:mi>n</mml:mi></mml:math>
méretű feladatokra legjobb esetben megoldja. </h:p>
<h:p>Jelöljük 


<mml:math><mml:mi>N</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>π</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>-vel, illetve 


<mml:math><mml:mi>N</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>π</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>-vel azoknak a lépéseknek a számát, amelyekre az 


<mml:math><mml:mi>n</mml:mi></mml:math>
méretű 


<mml:math><mml:mi>π</mml:mi></mml:math>
feladat megoldásához mindenképpen szüksége van bármely soros, illetve bármely párhuzamos algoritmusnak – utóbbinak akkor, ha legfeljebb 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzort vehet igénybe. <h:a name="id4489748"/>
 Tegyük fel, hogy minden 


<mml:math><mml:mi>n</mml:mi></mml:math>-re adott a 


<mml:math><mml:mi>π</mml:mi></mml:math>
feladat 


<mml:math><mml:mi>n</mml:mi></mml:math>
méretű konkrét előfordulásainak 


<mml:math><mml:mi>D</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>π</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
eloszlásfüggvénye. Ekkor legyen 


<mml:math><mml:mi>E</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>π</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math>
illetve 


<mml:math><mml:mi>E</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>π</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
annak az időnek a várható értéke, amennyi alatt a 


<mml:math><mml:mi>π</mml:mi></mml:math>
problémát 


<mml:math><mml:mi>n</mml:mi></mml:math>
méretű feladatokra megoldja az 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
soros, illetve a 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi></mml:math>
párhuzamos algoritmus – utóbbi 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzort felhasználva. <h:a name="id4489889"/><h:a name="id4489895"/>
 A tankönyvekben az elemzések során gyakori az a feltételezés, hogy az azonos méretű bemenetek előfordulási valószínűsége azonos. Ilyenkor 
<h:font color="#3300FF" size=""><h:b><h:i>átlagos futási időről</h:i></h:b></h:font><h:a name="id4489913"/>
 beszélünk, amit 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>-val jelölünk. </h:p>
<h:p>A 


<mml:math><mml:mi>W</mml:mi><mml:mo>,</mml:mo><mml:mi>B</mml:mi><mml:mo>,</mml:mo><mml:mi>N</mml:mi><mml:mo>,</mml:mo><mml:mi>E</mml:mi></mml:math>
és 


<mml:math><mml:mi>A</mml:mi></mml:math>
jellemzők függnek attól a számítási modelltől is, amelyen az algoritmust megvalósítjuk. Az egyszerűség kedvéért feltesszük, az algoritmus egyúttal a számítási modellt is egyértelműen meghatározza. </h:p>
<h:p>Amennyiben a szövegkörnyezet alapján egyértelmű, hogy melyik problémáról van szó, akkor a jelölésekből 


<mml:math><mml:mi>π</mml:mi></mml:math>
-t elhagyjuk. </h:p>
<h:p>Ezek között a jellemzők között érvényesek az 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>N</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≤</mml:mo><mml:mi>B</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4490003">(1.8)</h:a></h:td></h:tr></h:table><h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mo>≤</mml:mo><mml:mi>E</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4490037">(1.9)</h:a></h:td></h:tr></h:table><h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mo>≤</mml:mo><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4490060">(1.10)</h:a></h:td></h:tr></h:table>
egyenlőtlenségek. Hasonlóképpen a párhuzamos algoritmusok jellemző adataira az <h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>N</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≤</mml:mo><mml:mi>B</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4490095">(1.11)</h:a></h:td></h:tr></h:table><h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mo>≤</mml:mo><mml:mi>E</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4490138">(1.12)</h:a></h:td></h:tr></h:table><h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mo>≤</mml:mo><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4490166">(1.13)</h:a></h:td></h:tr></h:table>
egyenlőtlenségek teljesülnek. Az átlagos futási időre pedig a 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>B</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≤</mml:mo><mml:mi>A</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4490204">(1.14)</h:a></h:td></h:tr></h:table><h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mo>≤</mml:mo><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4490245">(1.15)</h:a></h:td></h:tr></h:table>
illetve 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>B</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≤</mml:mo><mml:mi>A</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4490278">(1.16)</h:a></h:td></h:tr></h:table><h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mo>≤</mml:mo><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4490327">(1.17)</h:a></h:td></h:tr></h:table>
áll fenn. </h:p>
<h:p>Hangsúlyozzuk, hogy ezek a jelölések nem csak futási időre, hanem az algoritmusok más jellemzőire – például memóriaigény, küldött üzenetek száma – is alkalmazhatók. </h:p>
<h:p>Ezután relatív jellemzőket, úgynevezett 
<h:font color="#3300FF" size=""><h:b><h:i>hatékonysági mértékeket</h:i></h:b></h:font><h:a name="id4490376"/>
 definiálunk. </h:p>
<h:p>A gyorsítás (vagy relatív lépésszám) azt mutatja, hányszor kisebb a párhuzamos algoritmus futási ideje a soros algoritmus futási idejénél. </h:p>
<h:p>A 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi></mml:math>
párhuzamos algoritmusnak az 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
soros algoritmusra vonatkozó 
<h:font color="#3300FF" size=""><h:b><h:i>gyorsítása</h:i></h:b></h:font><h:a name="id4490423"/><h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:apply><mml:divide/><mml:ci><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci><mml:ci><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci></mml:apply><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4490434">(1.18)</h:a></h:td></h:tr></h:table>
Ha a gyorsítás egyenesen arányos a felhasznált processzorok számával, akkor lineáris gyorsításról beszélünk. Ha a 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi></mml:math>
párhuzamos és az 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
soros algoritmusra 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:apply><mml:divide/><mml:ci><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci><mml:ci><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci></mml:apply><mml:mo>=</mml:mo><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4490537">(1.19)</h:a></h:td></h:tr></h:table>
akkor 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi><mml:mi>A</mml:mi></mml:math>
-ra vonatkozó gyorsítása 
<h:font color="#3300FF" size=""><h:b><h:i>lineáris.</h:i></h:b></h:font><h:a name="id4490619"/><h:a name="id4490624"/>
 Ha a 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi></mml:math>
párhuzamos és az 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
soros algoritmusra 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:apply><mml:divide/><mml:ci><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci><mml:ci><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci></mml:apply><mml:mo>=</mml:mo><mml:mi>o</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4490652">(1.20)</h:a></h:td></h:tr></h:table>
akkor 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi><mml:mi>A</mml:mi></mml:math>
-ra vonatkozó gyorsítása 
<h:font color="#3300FF" size=""><h:b><h:i>szublineáris.</h:i></h:b></h:font><h:a name="id4490735"/><h:a name="id4490740"/>
 Ha a 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi></mml:math>
párhuzamos és az 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
soros algoritmusra 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:apply><mml:divide/><mml:ci><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci><mml:ci><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci></mml:apply><mml:mo>=</mml:mo><mml:mi>ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4490770">(1.21)</h:a></h:td></h:tr></h:table>
akkor 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi><mml:mi>A</mml:mi></mml:math>
-ra vonatkozó gyorsítása 
<h:i>szuperlineáris.</h:i><h:a name="id4490848"/><h:a name="id4490833"/>
 A párhuzamos algoritmusok esetében fontos jellemző az 


<mml:math><mml:mi>m</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
<h:font color="#3300FF" size=""><h:b><h:i>munka,</h:i></h:b></h:font><h:a name="id4490894"/>
 amit a futási idő és a processzorszám szorzatával definiálunk. </h:p>
<h:p>Akkor is ez a szokásos definíció, ha a processzorok egy része csak a futási idő egy részében dolgozik: 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>m</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>p</mml:mi><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4490917">(1.22)</h:a></h:td></h:tr></h:table>
Érdemes hangsúlyozni, hogy – különösen az aszinkron algoritmusok esetében – a ténylegesen elvégzett lépések száma lényegesen kevesebb lehet, mint amit a fenti (<h:a href="#id4490917">1.22</h:a>) képlet szerint kapunk. </h:p>
<h:p>Egy 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi></mml:math>
párhuzamos algoritmusnak az ugyanazon problémát megoldó soros algoritmusra vonatkozó 


<mml:math><mml:mi>h</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
<h:font color="#3300FF" size=""><h:b><h:i>hatékonysága</h:i></h:b></h:font><h:a name="id4491036"/>
 a két algoritmus munkájának hányadosa: 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>h</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:apply><mml:divide/><mml:ci><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci><mml:ci><mml:mi>p</mml:mi><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci></mml:apply><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4491050">(1.23)</h:a></h:td></h:tr></h:table>
Abban a természetes esetben, amikor a párhuzamos algoritmus munkája legalább akkora, mint a soros algoritmusé, a hatékonyság nulla és egy közötti érték – és a viszonylag nagy érték a kedvező. </h:p>
<h:p>Központi fogalom a párhuzamos algoritmusok elemzésével kapcsolatban a munkahatékonyság és munkaoptimalitás. <h:a name="id4491144"/><h:a name="id4491150"/>
 Ha a 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi></mml:math>
párhuzamos és 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
soros algoritmusra 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>p</mml:mi><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>~</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4491180">(1.24)</h:a></h:td></h:tr></h:table>
akkor 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi></mml:math><mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>-ra nézve 
<h:font color="#3300FF" size=""><h:b><h:i>munkahatékony.</h:i></h:b></h:font><h:a name="id4491267"/>
 Ez a meghatározás egyenértékű a 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:apply><mml:divide/><mml:ci><mml:mi>p</mml:mi><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci><mml:ci><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci></mml:apply><mml:mo>=</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4491282">(1.25)</h:a></h:td></h:tr></h:table>
egyenlőség előírásával. Eszerint egy párhuzamos algoritmus csak akkor munkahatékony, ha munkája nagyságrendileg nem nagyobb, mint a soros algoritmus munkája. </h:p>
<h:p>Ha a 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi></mml:math>
párhuzamos és 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
soros algoritmusra <h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>p</mml:mi><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4491379">(1.26)</h:a></h:td></h:tr></h:table>
akkor 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi></mml:math><mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
-ra nézve 
<h:font color="#3300FF" size=""><h:b><h:i>munkaoptimális.</h:i></h:b></h:font><h:a name="id4491460"/><h:a name="id4491465"/>
 Ez a meghatározás egyenértékű a 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:apply><mml:divide/><mml:ci><mml:mi>p</mml:mi><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci><mml:ci><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci></mml:apply><mml:mo>=</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mo>log</mml:mo></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msup><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4491479">(1.27)</h:a></h:td></h:tr></h:table>
egyenlőség előírásával. Eszerint egy párhuzamos algoritmus csak akkor munkaoptimális, ha van olyan 


<mml:math><mml:mi>k</mml:mi></mml:math>
érték, hogy a párhuzamos algoritmus munkája nagyságrendileg nem nagyobb, mint a soros algoritmus munkájának 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mo>log</mml:mo></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msup><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
-szerese. </h:p>
<h:p>Egy párhuzamos algoritmus csak akkor munkahatékony, ha a gyorsítása legalább lineáris. Egy munkahatékony párhuzamos algoritmus hatékonysága 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Ha egy algoritmus egy feladat megoldásához adott erőforrásból csak 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>N</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
mennyiséget használ fel, akkor az algoritmust az adott erőforrásra, számítási modellre (és processzorszámra) nézve 
<h:font color="#3300FF" size=""><h:b><h:i>aszimptotikusan optimálisnak</h:i></h:b></h:font>
 nevezzük. </h:p>
<h:p><h:a name="id4491650"/><h:a name="id4491656"/>
 Ha egy 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi mathvariant="script">P</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
algoritmus egy feladat megoldásához adott erőforrásból a bemenet minden lehetséges 


<mml:math><mml:mi>n</mml:mi><mml:mo>≥</mml:mo><mml:mn>1</mml:mn></mml:math>
mérete esetében csak az okvetlenül szükséges 


<mml:math><mml:mi>N</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
– illetve 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>N</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
– mennyiséget használja fel, azaz 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>N</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4491758">(1.28)</h:a></h:td></h:tr></h:table>
illetve 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>N</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4491808">(1.29)</h:a></h:td></h:tr></h:table>
akkor az algoritmust az adott erőforrásra (és az adott számítási modellre) nézve 
<h:font color="#3300FF" size=""><h:b><h:i>abszolút optimálisnak</h:i></h:b></h:font><h:a name="id4491870"/><h:a name="id4491876"/>
 nevezzük és azt mondjuk, hogy a vizsgált feladat 
<h:font color="#3300FF" size=""><h:b><h:i>pontos bonyolultsága </h:i></h:b></h:font><h:a name="id4491893"/><mml:math><mml:mi>N</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>N</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Két algoritmus összehasonlításakor a 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">B</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4491944">(1.30)</h:a></h:td></h:tr></h:table>
esetben azt mondjuk, hogy a 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
és 


<mml:math mathvariant="script"><mml:mi mathvariant="script">B</mml:mi></mml:math>
algoritmus futási idejének növekedési sebessége aszimptotikusan 
<h:font color="#3300FF" size=""><h:b><h:i>azonos nagyságrendű.</h:i></h:b></h:font><h:a name="id4492020"/>
 Amikor két algoritmus futási idejét (például a legrosszabb esetben) összehasonlítjuk, akkor gyakran találunk olyan helyeket, melyeknél kisebb méretű bemenetekre az egyik, míg nagyobb méretű bemenetekre a másik algoritmus futási ideje kedvezőbb. A formális definíció a következő: ha a pozitív egész helyeken értelmezett 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
és 


<mml:math><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
függvényekre, valamint a 


<mml:math><mml:mi>v</mml:mi><mml:mo>≥</mml:mo><mml:mn>0</mml:mn></mml:math>
pozitív egész számra teljesül, hogy 1. 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>;</mml:mo></mml:math>
2. 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>v</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>−</mml:mo><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>v</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>v</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>−</mml:mo><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>v</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>&lt;</mml:mo><mml:mn>0</mml:mn><mml:mo>,</mml:mo></mml:math>
akkor a 


<mml:math><mml:mi>v</mml:mi></mml:math>
számot az 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
és 


<mml:math><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
függvények 
<h:font color="#3300FF" size=""><h:b><h:i>váltási helyének</h:i></h:b></h:font><h:a name="id4492239"/>
 nevezzük. <h:a name="id4492246"/>
 Például két mátrix szorzatának a definíció alapján történő és a Strassenalgoritmussal történő kiszámítását összehasonlítva (lásd például Cormen, Leiserson, Rivest és Stein többször idézett új könyvét) azt kapjuk, hogy kis mátrixok esetén a hagyományos módszer, míg nagy mátrixok esetén a Strassen-algoritmus az előnyösebb – egy váltási hely van, melynek értéke körülbelül 20. </h:p>
<h:p>Az idő mellett algoritmusok számos más erőforrást is használnak – például memóriát, üzeneteket. Utóbbira például 


<mml:math><mml:msub><mml:mrow><mml:mi>W</mml:mi></mml:mrow><mml:mrow><mml:mtext> üzenet </mml:mtext></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mtext> P </mml:mtext></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
módon hivatkozhatunk. </h:p>

<h:br/><h:center><h:strong><h:font face="Arial" size="+2" color="#3300FF"><h:a name="id4492300">1.3. Pszeudokód </h:a></h:font></h:strong></h:center>

<h:p>Az algoritmusok formális leírására a következő, a Pascal és a C++ nyelvek elemeiből összeállított pszeudokódot használjuk. </h:p>
<h:p><h:b>1.</h:b>
 Az algoritmus blokkszerkezetét elsősorban a tagolás tükrözi. Ezt a megoldást a programozási nyelvekben is használják – bár a használat szabályai nyelvenként változnak. A pszeudokódot lényegesen egyszerűsíti és áttekinthetőbbé teszi – értelmezése tapasztalataink szerint nem okoz gondot. </h:p>
<h:p><h:b>2.</h:b>
 A változók neve betűvel kezdődik. A változók típusát külön nem deklaráljuk, mert az a környezetből látszik. Egyszerű adattípusok (mint egész, lebegőpontos, karakter, logikai stb.) fognak szerepelni. </h:p>
<h:p><h:b>3.</h:b>
 A változók értékadó utasításokkal kapnak értéket: 


<mml:math><mml:mrow><mml:mo>〈</mml:mo><mml:mrow><mml:mtext>változónév </mml:mtext></mml:mrow><mml:mo>〉</mml:mo></mml:mrow><mml:mo>←</mml:mo><mml:mrow><mml:mo>〈</mml:mo><mml:mrow><mml:mtext>kifejezés </mml:mtext></mml:mrow><mml:mo>〉</mml:mo></mml:mrow></mml:math><h:br/><h:b>4.</h:b>
 Két logikai érték van, az IGAZ és a HAMIS. Ezek a logikai értékek az 
<h:b>és </h:b><mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>∧</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math><h:b>vagy </h:b><mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>∨</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
és a 
<h:b>nem </h:b><mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>¬</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
logikai operátorokkal, valamint a 


<mml:math><mml:mo>&lt;</mml:mo><mml:mo>,</mml:mo></mml:math><mml:math><mml:mo>≤</mml:mo><mml:mo>,</mml:mo></mml:math><mml:math><mml:mo>=</mml:mo><mml:mo>,</mml:mo><mml:mo>≥</mml:mo></mml:math>
és 


<mml:math><mml:mo>&gt;</mml:mo></mml:math>
relációs operátorokkal állíthatók elő. <h:br/><h:br/><h:b>5.</h:b>
 A többdimenziós tömbök elemei szögletes zárójelek közé tett indexekkel érhetők el, például 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Az indexek nullától kezdődnek. A tömb egy részére az indextartomány megadásával hivatkozhatunk: például 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>3</mml:mn><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math><h:br/><h:br/><h:b>6.</h:b>
 A következő két ciklusszervező utasítást alkalmazzuk: 
<h:b>while</h:b>
 és 
<h:b>for.</h:b>
 A 
<h:b>while</h:b>
 ciklus alakja a következő: 
<h:p><h:br/><h:center><h:img src="pics/p1-k26a.gif"/></h:center></h:p>
 Amíg a 


<mml:math><mml:mrow><mml:mo>〈</mml:mo><mml:mrow><mml:mtext>feltétel </mml:mtext></mml:mrow><mml:mo>〉</mml:mo></mml:mrow></mml:math>
IGAZ, az 


<mml:math><mml:mi>u</mml:mi></mml:math> <mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>u</mml:mi><mml:mo>≥</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
utasítás végrehajtódik. Amikor a 


<mml:math><mml:mrow><mml:mo>〈</mml:mo><mml:mrow><mml:mtext>feltétel </mml:mtext></mml:mrow><mml:mo>〉</mml:mo></mml:mrow><mml:mtext>HAMIS </mml:mtext></mml:math>
lesz, kilépünk a ciklusból. </h:p>
<h:p>A 
<h:b>for</h:b>
 ciklus alakja a következő: 
<h:p><h:br/><h:center><h:img src="pics/p1-k26b.gif"/></h:center></h:p>Ha például a ciklusváltozó 


<mml:math><mml:mi>i</mml:mi></mml:math>
, a kezdőérték 


<mml:math><mml:mi>k</mml:mi></mml:math>
és a befejező érték 


<mml:math><mml:mi>b</mml:mi><mml:mo>,</mml:mo></mml:math>
akkor az 


<mml:math><mml:mi>u</mml:mi></mml:math>
utasítás egymás után végrehajtódik az 


<mml:math><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mi>b</mml:mi></mml:math>
értékekre. <h:br/><h:br/><h:b>7.</h:b>
 A feltételes utasítás lehetséges alakjai: 
<h:p><h:br/><h:center><h:img src="pics/p1-k27a.gif"/></h:center></h:p>
 vagy 
<h:p><h:br/><h:center><h:img src="pics/p1-k27b.gif"/></h:center></h:p><h:b>8.</h:b>
 A bevitel/kivitel a 
<h:b>read</h:b>
 és 
<h:b>write</h:b>
 utasításokkal történik. Pontos formájuk számítási modellenként változó. <h:br/><h:b>9.</h:b>
 Egyetlen eljárás van, amely fejből és törzsből áll. A fej 
<h:p><h:br/><h:center><h:img src="pics/p1-k27c.gif"/></h:center></h:p>
 Az eljárás típusa lehet 
<h:i>soros eljárás,</h:i><h:i>soros rekurzív eljárás,</h:i><h:i>párhuzamos eljárás</h:i>
 és 
<h:i>párhuzamos rekurzív eljárás.</h:i>
 Az eljárások törzse sorszámozott utasításokból áll. Az utolsó utasítást kivéve az egyes utasítások végét a következő sorszám, a törzs végét a tagolás jelzi. </h:p>
<h:p>Ezek a számozott utasítások gyakran az algoritmus nagy (több lépésből álló) részét tükrözik. Ilyenkor az elemzésben ezeket a részeket szakasznak vagy fázisnak nevezzük. Más esetekben több számozott lépést együtt nevezünk az algoritmus szakaszának vagy fázisának. <h:br/><h:b>10.</h:b>
 Az eljárások hívásának alakja: 


<mml:math><mml:mrow><mml:mo>〈</mml:mo><mml:mrow><mml:mtext>ELJARAS NEVE </mml:mtext></mml:mrow><mml:mo>〉</mml:mo></mml:mrow><mml:mrow><mml:mo>〈</mml:mo><mml:mrow><mml:mtext>(paraméterek listája) </mml:mtext></mml:mrow><mml:mo>〉</mml:mo></mml:mrow></mml:math>
A soros és a párhuzamos eljárások esetén egyaránt ezt a hívó utasítást használjuk. </h:p>
<h:p><h:b>11.</h:b>
 A megjegyzések a 


<mml:math><mml:mo>△</mml:mo></mml:math>
jellel kezdődnek és az adott sor végéig tartanak. </h:p>
<h:p><h:b>12.</h:b>
 A párhuzamosságot egy 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzoros PRAM vagy lánc esetében a következőképpen írjuk le: 
<h:p><h:br/><h:center><h:img src="pics/p1-k28.gif"/></h:center></h:p>
 Egy 


<mml:math><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>×</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>×</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>×</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:math>
méretű, 


<mml:math><mml:mi>k</mml:mi></mml:math>
dimenziós rács esetében a hasonló utasítás a 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub></mml:math>
<h:font color="#3300FF" size=""><h:b>in parallel for </h:b></h:font><mml:math><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>←</mml:mo><mml:mn>1</mml:mn></mml:math>
<h:font color="#3300FF" size=""><h:b>to </h:b></h:font><mml:math><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>←</mml:mo><mml:mn>1</mml:mn></mml:math>
<h:font color="#3300FF" size=""><h:b>to </h:b></h:font><mml:math><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:math>
sorral kezdődik. </h:p>

<h:br/><h:center><h:strong><h:font face="Arial" size="+2" color="#3300FF"><h:a name="id4493057">1.4. Számítási modellek </h:a></h:font></h:strong></h:center>

<h:p>Az algoritmusokat absztrakt vagy konkrét gépeken hajthatjuk végre. Ebben az alfejezetben először röviden bemutatjuk a párhuzamos számítógépek főbb típusait, azután az absztrakt gépek közül a párhuzamos közvetlen hozzáférésű gépekkel és a hálózatokkal foglalkozunk. </h:p>
<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4493078">1.4.1. Számítógépek </h:a></h:font></h:strong>

<h:p>Az elmúlt évtizedekben sok különböző párhuzamos számítógépet építettek, és számos próbálkozás történt rendszerezésükre. Flynn 1972-ben az utasításáram és az adatáram alapján 4 csoportot különböztetett meg: <h:a name="id4493096"/>
 1. SISD (
<h:b>S</h:b>imple 
<h:b>I</h:b>nstruction Stream – 
<h:b>S</h:b>imple 
<h:b>D</h:b>ata Stream); SISD 2. SIMD (
<h:b>S</h:b>imple 
<h:b>I</h:b>nstruction Stream – 
<h:b>M</h:b>ultiple 
<h:b>D</h:b>ata Stream); <h:a name="id4493132"/>
 3. MISD (
<h:b>M</h:b>ultiple 
<h:b>I</h:b>nstruction Strem – 
<h:b>S</h:b>ingle 
<h:b>D</h:b>ata Stream); <h:a name="id4493153"/>
 4. MIMD (
<h:b>M</h:b>ultiple 
<h:b>I</h:b>nstruction Stream – 
<h:b>M</h:b>ultiple 
<h:b>D</h:b>
ata Stream). <h:a name="id4493174"/>
 Eszerint a SISD a klasszikus soros, Neumann-elvű <h:a name="id4493182"/>
 számítógép. A SIMD típusú számítógépben lépésenként egyféle művelet hajtódik végre, de az egyszerre több adaton. Az ILLIAC-IV számítógép példa erre a típusra. <h:a name="id4493195"/>
 A MISD típusú gépben egy adaton egyszerre többféle művelet hajtódik végre. A csővezeték-elvű számítógépek példák erre a típusra. </h:p>
<h:p>A legtöbb párhuzamos számítógép a MIMD típushoz tartozik: ebben az esetben több processzor dolgozik párhuzamosan, és rendszerint különböző adatokkal. </h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4493217">1.4.2. Párhuzamos gépek </h:a></h:font></h:strong>

<h:p>A párhuzamos számítási modellek alapja a soros számításokhoz széles körben használt <h:a name="id4493231"/><h:a name="id4493237"/><h:a name="id4493242"/>
 RAM (
<h:b>R</h:b>andom 
<h:b>A</h:b>ccess 
<h:b>M</h:b>achine = 
<h:i>közvetlen hozzáférésű gép</h:i>
) általánosítása, a PRAM (
<h:b>P</h:b>arallel 
<h:b>R</h:b>andom 
<h:b>A</h:b>ccess 
<h:b>M</h:b>achine = 
<h:font color="#3300FF" size=""><h:b><h:i>párhuzamos közvetlen hozzáférésű gép.</h:i></h:b></h:font>
) <h:a name="id4493289"/>
 A PRAM modell tartalmaz <h:a name="id4493297"/><mml:math><mml:mi>p</mml:mi></mml:math>
szinkronizáltan dolgozó processzort 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
és az 


<mml:math><mml:mi>M</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mi>M</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mi>M</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
rekeszekből álló közös memóriát, <h:a name="id4493405"/><h:a name="id4493411"/><h:a name="id4487506"/>
 ahogy azt az <h:a href="#id4487618">1.2</h:a>. ábra mutatja (az ábrán a memóriarekeszeknek csak az indexét tüntettük fel). A modell szerint minden processzor rendelkezik saját memóriával: a 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
processzor esetében ez az 


<mml:math><mml:mi>M</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mi>M</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mn>2</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math><mml:math><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mi>M</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
rekeszekből áll. </h:p>
<h:p>Nem jelent megszorítást, hogy a közös memória és a saját memóriák méretét ugyanúgy jelöltük (szokás ezeket a memóriákat végtelen méretűnek is tekinteni). </h:p>
<h:p>Feltesszük, hogy a rekeszek tetszőleges egész szám tárolására alkalmasak. 
<h:p><h:br/><h:center><h:img src="pics/p1-a1.gif"/><h:center><h:a name="id4487618"/>
<h:font color="#FF33FF" size=""><h:b>1.2. ábra.</h:b></h:font>
 Párhuzamos közvetlen hozzáférésű gép (PRAM).</h:center><h:br/></h:center></h:p>
 A párhuzamos közvetlen hozzáférésű gép helyett rendszerint a rövidebb 
<h:i>párhuzamos gép</h:i>
 kifejezést fogjuk használni. <h:a name="id4487640"/>
 Típusok írás/olvasás alapján: <h:br/>1. EREW (
<h:b>E</h:b>xclusive 
<h:b>R</h:b>ead – 
<h:b>E</h:b>xclusive 
<h:b>W</h:b>rite: kizárólagos olvasás – kizárólagos írás) <h:a name="id4487664"/><h:a name="id4487669"/><h:br/>2. ERCW (
<h:b>E</h:b>xclusive 
<h:b>R</h:b>ead – 
<h:b>C</h:b>oncurrent 
<h:b>W</h:b>rite) <h:a name="id4487691"/><h:a name="id4487695"/><h:a name="id4487700"/><h:br/>3. CREW (
<h:b>C</h:b>oncurrent 
<h:b>R</h:b>ead – 
<h:b>E</h:b>xclusive 
<h:b>W</h:b>rite) <h:a name="id4487722"/><h:a name="id4487726"/><h:a name="id4487731"/><h:br/>4. CRCW (
<h:b>C</h:b>oncurrent 
<h:b>R</h:b>ead – 
<h:b>C</h:b>oncurrent 
<h:b>W</h:b>rite) <h:a name="id4487753"/><h:a name="id4487757"/><h:a name="id4487762"/><h:br/>Ugyanabba a memóriarekeszbe egyidejűleg csak írás vagy olvasás van megengedve. </h:p>
<h:p>A <h:a href="#id4495616">1.3</h:a>. ábra (a) része arra példa, hogy minden rekeszből legfeljebb egy processzor olvas (ER), a (b) részében minden rekeszbe legfeljebb egy processzor ír (EW), a (c) részében több processzor olvas párhuzamosan (CR), végül a (d) részében több processzor ír egyidejűleg ugyanabba a rekeszbe (CW). 
<h:p><h:br/><h:center><h:img src="pics/p1-a2.gif"/><h:center><h:a name="id4495616"/>
<h:font color="#FF33FF" size=""><h:b>1.3. ábra.</h:b></h:font>
 Számítási modellek típusa az írás és olvasás tulajdonságai alapján.</h:center><h:br/></h:center></h:p>
 Ha több processzor írhat egyidejűleg (ERCW vagy CRCW), akkor több eset van: az írás 
<h:font color="#1. 3300FF" size=""><h:b><h:i>közös:</h:i></h:b></h:font><h:a name="id4495639"/>
 a processzorok csak a közös, azonos értéket írhatják; 
<h:font color="#2. 3300FF" size=""><h:b><h:i>tetszőleges:</h:i></h:b></h:font><h:a name="id4495653"/>
 nem tudjuk, melyik processzor beírása marad meg a rekeszben, vagy esetleg a beírásoktól független érték; 
<h:font color="#3. 3300FF" size=""><h:b><h:i>prioritásos:</h:i></h:b></h:font><h:a name="id4495670"/>
 a legnagyobb prioritású processzor ír; 
<h:font color="#4. 3300FF" size=""><h:b><h:i>kombinált:</h:i></h:b></h:font><h:a name="id4495684"/>
 az egyes processzorok által beírt értékek valamilyen függvénye kerül a memóriarekeszbe. A következő példákban a párhuzamos olvasást, párhuzamos írást, illetve egy logikai érték párhuzamos kiszámítását mutatjuk be. </h:p>
<h:p>Először egy 4 processzoros gépben minden processzor a közös 


<mml:math><mml:mi>M</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
rekeszből olvas.
<h:p><h:br/><h:center><h:img src="pics/p1-p32a.gif"/></h:center></h:p><h:a name="id4495723"/><h:a name="id4495728"/><h:a name="id4495733"/>
 Ebben az esetben mind a 4 processzor saját memóriájának első rekeszébe bekerül az 


<mml:math><mml:mi>M</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
tömbelem. </h:p>
<h:p>A következő példában egy 16 processzoros gépben minden processzor a közös 


<mml:math><mml:mi>M</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
rekeszbe ír. </h:p>
<h:p><h:p><h:br/><h:center><h:img src="pics/p1-p32b.gif"/></h:center></h:p><h:a name="id4495786"/><h:a name="id4495791"/><h:a name="id4495798"/>
 Ebben az esetben a 16 processzor párhuzamosan beírja az 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
tömbelembe saját memóriája első rekeszének tartalmát. </h:p>
<h:p>Legyen az 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>:</mml:mo><mml:mn>16</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
tömb 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
elemeiben tárolt 


<mml:math><mml:mi>n</mml:mi></mml:math>
bit logikai összege (diszjunkciója) <h:a name="id4495889"/><mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>∨</mml:mo><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>∨</mml:mo><mml:mo>⋯</mml:mo><mml:mo>∨</mml:mo><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math><h:a name="id4495952"/>
 Ekkor a következő ERCW algoritmus 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
időben dolgozik. 
</h:p>
<h:p>
<h:font color="#" size="-1&#10;">

<h:p>
<h:a name="id4495987"/>
<h:font color="#FF33FF" size="">

<h:b>1.1. példa.</h:b>
</h:font>
<h:i>Logikai összeg kiszámítása n processzoron.</h:i>
</h:p>
</h:font>
</h:p>
<h:p>
<h:p><h:br/><h:center>
<h:img src="pics/p1-p33.gif">

</h:img>
</h:center></h:p>
<h:a name="id4496020"/>
<h:a name="id4496026"/>
<h:a name="id4496033"/>
</h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>1.1. 
<h:font color="#FF33FF" size="">tétel</h:font>
(logikai összeadás művelet elvégzése). </h:b>
</h:font>
<h:i>A 


<mml:math><mml:mtext>LOGIKAI-ÖSSZEAD </mml:mtext></mml:math>
algoritmus az n bites 


<mml:math><mml:mo>∨</mml:mo></mml:math>
műveletet egy 


<mml:math><mml:mtext> ERCW PRAM </mml:mtext></mml:math>-en 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépés alatt elvégzi. </h:i>
</h:p>
<h:p><h:a name="id4496098"/><h:a name="id4496102"/>
 Most a párhuzamos gépek néhány mennyiségi tulajdonságát mutatjuk be. </h:p>
<h:p>Feltesszük, hogy egy 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzoros gép bármely lépése szimulálható egy soros processzor 


<mml:math><mml:mi>p</mml:mi></mml:math>
lépésével (vannak olyan valódi gépek, amelyekre ez a feltétel nem teljesül). Ebből adódik a következő állítás. </h:p>
<h:p>
<h:a name="id4496137"/>
</h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>1.2. 
<h:font color="#FF33FF" size="">tétel</h:font>
(Brent tétele). </h:b>
</h:font>
<h:i>Ha egy feladatot a 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi></mml:math>
párhuzamos algoritmus 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzoron 


<mml:math><mml:mi>t</mml:mi></mml:math>
lépésben old meg, eközben az 


<mml:math><mml:mi>i</mml:mi></mml:math>-edik 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mi>t</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben 


<mml:math><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
műveletet végez, akkor ez a feladat 


<mml:math><mml:mi>q</mml:mi><mml:mo>&lt;</mml:mo><mml:mi>p</mml:mi></mml:math>
processzoron megoldható <h:a name="id4496248"/><h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mrow><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mi>x</mml:mi></mml:ci><mml:ci><mml:mi>q</mml:mi></mml:ci></mml:apply></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4496260">(1.31)</h:a></h:td></h:tr></h:table>
lépésben, ahol <h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>x</mml:mi><mml:mo>=</mml:mo><mml:msubsup><mml:mrow><mml:mo>∑</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>t</mml:mi></mml:mrow></mml:msubsup><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4496292">(1.32)</h:a></h:td></h:tr></h:table></h:i>
</h:p>
<h:p>Ebből a tételből adódik a következő egyszerű állítás. <h:a name="id4496332"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>1.3. 
<h:font color="#FF33FF" size="">következmény</h:font>
(lassulás). </h:b>
</h:font>
<h:i>Ha a 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi></mml:math>
párhuzamos algoritmus egy 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzoros gépen 


<mml:math><mml:mi>t</mml:mi></mml:math>
lépést tesz, akkor 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi></mml:math>
minden 


<mml:math><mml:mi>q</mml:mi><mml:mo>&lt;</mml:mo><mml:mi>p</mml:mi></mml:math>
processzort tartalmazó gépen végrehajtható 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mi>t</mml:mi><mml:mo>/</mml:mo><mml:mi>q</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben. </h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 A 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzoros 


<mml:math><mml:mi>G</mml:mi></mml:math>
gépen futó 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi></mml:math>
párhuzamos algoritmus minden lépése szimulálható egy 


<mml:math><mml:mi>q</mml:mi></mml:math>
processzoros 


<mml:math><mml:mi>H</mml:mi></mml:math>
gépen, legfeljebb 


<mml:math><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>/</mml:mo><mml:mi>q</mml:mi></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow></mml:math>
lépést végezve. Ezért a 


<mml:math><mml:mi>H</mml:mi></mml:math>
szimulációs futási ideje legfeljebb 


<mml:math><mml:mi>t</mml:mi><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>/</mml:mo><mml:mi>q</mml:mi></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math>
és így 


<mml:math><mml:mi>H</mml:mi></mml:math>
munkája legfeljebb 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>q</mml:mi><mml:mi>t</mml:mi><mml:mrow><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mi>p</mml:mi></mml:ci><mml:ci><mml:mi>q</mml:mi></mml:ci></mml:apply></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow></mml:mrow><mml:mo>≤</mml:mo><mml:mi>p</mml:mi><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mi>q</mml:mi><mml:mi>t</mml:mi></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4496530">(1.33)</h:a></h:td></h:tr></h:table><h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mo>=</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mi>p</mml:mi><mml:mi>t</mml:mi></mml:ci><mml:ci><mml:mi>q</mml:mi></mml:ci></mml:apply></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4496568">(1.34)</h:a></h:td></h:tr></h:table>
lesz.  <h:img src="pics/fkocka.gif"/><h:br/><h:br/>A következő 3 állítás az elérhető gyorsítás mértékével kapcsolatos. </h:p>
<h:p>
<h:a name="id4496609"/>
</h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>1.4. 
<h:font color="#FF33FF" size="">tétel</h:font>
(Amdahl <h:a name="id4496630"/>
 törvénye a maximális gyorsításról). </h:b>
</h:font>
<h:i><h:a name="id4496643"/>
 Ha egy 


<mml:math><mml:mi>π</mml:mi></mml:math>
feladat megoldásának nem párhuzamosítható hányada 


<mml:math><mml:mi>s</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>π</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math>
akkor egy 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzoros 


<mml:math><mml:mtext>PRAM </mml:mtext></mml:math>
-on elérhető 


<mml:math><mml:msub><mml:mrow><mml:mi>g</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>a</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>π</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
legnagyobb gyorsítás <h:a name="id4496720"/><h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>g</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>a</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>π</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:apply><mml:divide/><mml:ci><mml:mn>1</mml:mn></mml:ci><mml:ci><mml:mi>s</mml:mi><mml:mo>+</mml:mo><mml:apply><mml:divide/><mml:ci><mml:mn>1</mml:mn><mml:mo>−</mml:mo><mml:mi>s</mml:mi></mml:ci><mml:ci><mml:mi>p</mml:mi></mml:ci></mml:apply></mml:ci></mml:apply><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4496732">(1.35)</h:a></h:td></h:tr></h:table></h:i>
</h:p>
<h:p>
<h:a name="id4496797"/>
</h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>1.5. 
<h:font color="#FF33FF" size="">tétel</h:font>
(Gustafson <h:a name="id4496817"/>
 törvénye a maximális gyorsításról). </h:b>
</h:font>
<h:i>Ha egy 


<mml:math><mml:mi>π</mml:mi></mml:math>
feladat megoldásának nem párhuzamosítható <h:a name="id4496840"/>
 hányada 


<mml:math><mml:mi>s</mml:mi><mml:mo>,</mml:mo></mml:math>
akkor egy 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzoros 


<mml:math><mml:mtext> PRAM </mml:mtext></mml:math>
-on elérhető 


<mml:math><mml:msub><mml:mrow><mml:mi>g</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>a</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>π</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
legnagyobb gyorsítás 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>g</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>a</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>π</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:apply><mml:divide/><mml:ci><mml:mi>s</mml:mi><mml:mo>+</mml:mo><mml:mi>p</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>−</mml:mo><mml:mi>s</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci><mml:ci><mml:mi>s</mml:mi><mml:mo>+</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>−</mml:mo><mml:mi>s</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci></mml:apply><mml:mo>=</mml:mo><mml:mi>s</mml:mi><mml:mo>+</mml:mo><mml:mi>p</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>−</mml:mo><mml:mi>s</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4496906">(1.36)</h:a></h:td></h:tr></h:table></h:i>
</h:p>
<h:p>Amdahl és Gustafson tételének bizonyítását meghagyjuk feladatnak. </h:p>
<h:p>Amdahl szerint 


<mml:math><mml:mi>s</mml:mi></mml:math>
reciproka korlátot szab az elérhető gyorsításnak, míg Gustafson szerint a gyorsítás a processzorszámmal arányosan növelhető. </h:p>
<h:p>
<h:a name="id4497031"/>
</h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>1.6. 
<h:font color="#FF33FF" size="">tétel</h:font>
(van-e 


<mml:math><mml:mi>p</mml:mi></mml:math>
-nél nagyobb gyorsítás). </h:b>
</h:font>
<h:i>A 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzorszámnál nagyobb gyorsítás nem érhető el. </h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 Tegyük fel, hogy egy 


<mml:math><mml:mi>π</mml:mi></mml:math>
problémára 


<mml:math><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
a legjobb ismert soros végrehajtási idő. Ha van olyan 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi></mml:math>
párhuzamos algoritmus, melynek gyorsítása 


<mml:math><mml:mi>p</mml:mi></mml:math>
-nél nagyobb, akkor 


<mml:math><mml:mi>p</mml:mi><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>&lt;</mml:mo><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Mivel egy 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzoros gép egy lépésének szimulálása az 1 processzoros gépen legfeljebb 


<mml:math><mml:mi>p</mml:mi></mml:math>
lépést igényel, ezért 


<mml:math mathvariant="script"><mml:mi mathvariant="script">P</mml:mi></mml:math>
munkája sorosan szimulálható legfeljebb 


<mml:math><mml:mi>p</mml:mi><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
idő alatt, ami feltételünk szerint kisebb, mint 


<mml:math><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Ez ellentmond annak, hogy 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
a 


<mml:math><mml:mi>π</mml:mi></mml:math>
megoldására ismert legjobb soros algoritmus.  <h:img src="pics/fkocka.gif"/><h:br/><h:br/></h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4497281">1.4.3. Hálózatok </h:a></h:font></h:strong>

<h:p>A számítási modellek másik típusát a hálózatok adják. Ezekben a processzorok nem a közös memórián keresztül érintkeznek, hanem adatátviteli vonalakon keresztül, amelyek jól szemléltethetők gráfok segítségével. A processzor és a csúcs szavakat szinonimaként használjuk – általában a szövegkörnyezethez jobban illeszkedőt választva. </h:p>
<h:p>Ez a tény egyúttal ad egy jó szempontot a hálózatok osztályozására: síkba rajzolható és síkba nem rajzolható hálózatokat különböztetünk meg. </h:p>
<h:p>A gráfelmélet ismert eredménye, hogy minden véges gráf ábrázolható a 3dimenziós euklideszi térben. Ezt beláthatjuk például úgy, hogy a 


<mml:math><mml:mi>G</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>V</mml:mi><mml:mo>,</mml:mo><mml:mi>E</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
véges gráf 


<mml:math><mml:msub><mml:mrow><mml:mi>V</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mo>|</mml:mo><mml:mi>V</mml:mi><mml:mo>|</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
csúcsát az 


<mml:math><mml:mi>x</mml:mi></mml:math>
-


<mml:math><mml:mi>y</mml:mi></mml:math>
sík 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
pontjába rajzoljuk, majd a síkot az 


<mml:math><mml:mi>x</mml:mi></mml:math>
-tengely körül rendre elforgatjuk 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mn>360</mml:mn><mml:mi>j</mml:mi><mml:mo>/</mml:mo><mml:mo>|</mml:mo><mml:mi>V</mml:mi><mml:mo>|</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mo>|</mml:mo><mml:mi>V</mml:mi><mml:mo>|</mml:mo><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4497429">(1.37)</h:a></h:td></h:tr></h:table>
fokkal. Az így kapott 


<mml:math><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mo>|</mml:mo><mml:mi>V</mml:mi><mml:mo>|</mml:mo><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
síkokban rendre a 


<mml:math><mml:msub><mml:mrow><mml:mi>V</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math>
csúcsot a nála nagyobb indexű csúcsokkal összekötő éleket rajzoljuk meg. </h:p>
<h:p>A rövidség kedvéért a 
<h:i>síkba rajzolható</h:i>
 gráfokat 
<h:font color="#3300FF" size=""><h:b><h:i>síkgráfoknak,</h:i></h:b></h:font><h:a name="id4497566"/>
 a síkba nem rajzolható gráfokat pedig 
<h:font color="#3300FF" size=""><h:b><h:i>térgráfoknak</h:i></h:b></h:font><h:a name="id4497581"/>
 fogjuk nevezni. Ennek megfelelően beszélhetünk 
<h:font color="#3300FF" size=""><h:b><h:i>síkhálózatról</h:i></h:b></h:font>
 és 
<h:font color="#3300FF" size=""><h:b><h:i>térhálózatról.</h:i></h:b></h:font><h:a name="id4497606"/><h:a name="id4497611"/>
 A legismertebb hálózatok közül a síkhálózatokhoz tartozik például a csillag, fa, lánc, gyűrű, négyzet és a henger. <h:a name="id4497622"/>
 A 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzoros 
<h:font color="#3300FF" size=""><h:b><h:i>csillagban</h:i></h:b></h:font><h:a name="id4497642"/>
 kitüntetett szerepe van a 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
processzornak: ez van minden további processzorral összekötve. Az <h:a href="#id4497676">1.4</h:a>. ábra egy 9 processzoros csillagot ábrázol. </h:p>
<h:p><h:p><h:br/><h:center><h:img src="pics/p1-a3.gif"/><h:center><h:a name="id4497676"/>
<h:font color="#FF33FF" size=""><h:b>1.4. ábra.</h:b></h:font>
 9 processzoros csillag.</h:center><h:br/></h:center></h:p>
 Egy 


<mml:math><mml:mi>d</mml:mi></mml:math>
szintes (teljes) 
<h:font color="#3300FF" size=""><h:b><h:i>bináris fában </h:i></h:b></h:font><mml:math><mml:mi>p</mml:mi><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msup><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:math>
processzor van: 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msub><mml:mo>.</mml:mo></mml:math><h:a name="id4497760"/><h:a name="id4497766"/>
 Az adatszerkezetekkel kapcsolatos terminológia szerint a 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
processzort 
<h:font color="#3300FF" size=""><h:b><h:i>gyökérnek,</h:i></h:b></h:font><h:a name="id4497794"/><h:a name="id4497798"/>
 a 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>/</mml:mo><mml:mn>2</mml:mn><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msub></mml:math>processzorokat 
<h:font color="#3300FF" size=""><h:b><h:i>levélnek,</h:i></h:b></h:font><h:a name="id4497886"/><h:a name="id4497891"/>
 a többi processzort 
<h:font color="#3300FF" size=""><h:b><h:i>belső processzornak</h:i></h:b></h:font>
 nevezzük. Ha 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
nem levél, akkor össze van kötve a 
<h:font color="#3300FF" size=""><h:b><h:i>gyerekeinek</h:i></h:b></h:font><h:a name="id4497928"/><h:a name="id4497933"/>
 nevezett 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
processzorokkal. Ha 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math>
nem a gyökér, akkor össze van kötve a 
<h:font color="#3300FF" size=""><h:b><h:i>szülőjének</h:i></h:b></h:font><h:a name="id4497990"/><h:a name="id4497994"/>
 nevezett 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo>⌊</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:mrow><mml:mo>⌋</mml:mo></mml:mrow></mml:mrow></mml:msub></mml:math>
processzorral. A negyedik fejezetben lévő <h:a href="#id4545616">4.8</h:a>. ábra egy háromszintes bináris fa hálózatot ábrázol. Hasonlóképpen lehetne 


<mml:math><mml:mi>m</mml:mi></mml:math>
-áris fákat és nem teljes fákat is definiálni. </h:p>
<h:p>A 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzoros gyűrűs hálózatot a negyedik fejezetben ismertetjük. A <h:a href="#id4543789">4.4</h:a>. ábra egy 6 processzoros 
<h:font color="#3300FF" size=""><h:b><h:i>gyűrűt</h:i></h:b></h:font><h:a name="id4498062"/>
 mutat. </h:p>
<h:p>A térhálózatok közül megemlítjük a 


<mml:math><mml:mi>k</mml:mi></mml:math>
-dimenziós rácsot, kockát, tóruszt, piramist, pillangót, permutációs hálózatot, de Bruijn-hálózatot és a hiperkockát. </h:p>
<h:p>A 


<mml:math><mml:mi>k</mml:mi></mml:math>
dimenziós 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mo>≥</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
rács <h:a name="id4498109"/>
 egy <h:a name="id4498121"/>
 olyan 


<mml:math><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>×</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>×</mml:mo><mml:mo>⋯</mml:mo><mml:mo>×</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>≥</mml:mo><mml:mn>2</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
méretű háló, amelynek minden egyes metszéspontjában van egy processzor. Az élek a kommunikációs vonalak, melyek <h:a name="id4498219"/>
 kétirányúak. A rács minden processzorát megcímkézzük egy 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math><mml:math><mml:mi>k</mml:mi></mml:math>
assal – erre a processzorra a 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub></mml:math>
jelöléssel hivatkozunk. </h:p>
<h:p>Minden processzor egy RAM, <h:a name="id4498317"/>
 amely rendelkezik saját (helyi) memóriával. A 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub></mml:math>
processzor saját memóriája az 


<mml:math><mml:mi>M</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
, 


<mml:math><mml:mi>M</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mn>2</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math><mml:math><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mi>M</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
rekeszekből áll. </h:p>
<h:p>Minden processzor végre tud hajtani egyetlen lépésben olyan alapvető műveleteket, mint az összeadás, kivonás, szorzás, összehasonlítás, saját memória elérése és így tovább. A processzorok működése szinkron módon történik, azaz minden processzor egy globális óra ütemére egyszerre hajtja végre az aktuális feladatát. </h:p>
<h:p>A legegyszerűbb rács a 


<mml:math><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:math>
értékhez tartozó 
<h:font color="#3300FF" size=""><h:b><h:i>lánc</h:i></h:b></h:font>
 (lánc alakú rács). </h:p>
<h:p><h:a name="id4498537"/>
 Egy 6 processzoros lánc látható a harmadik fejezetben lévő <h:a href="#id4528649">3.1</h:a>. ábrán. Ha egy lánc 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msub></mml:math>
processzorát összekötjük, akkor gyűrűt kapunk. </h:p>
<h:p>Ha 


<mml:math><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>2</mml:mn></mml:math>
, akkor 
<h:font color="#3300FF" size=""><h:b><h:i>téglalapot</h:i></h:b></h:font>
 (téglalap alakú rácsot) kapunk. <h:a name="id4498597"/><h:a name="id4498602"/>
 Ha most 


<mml:math><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mi>p</mml:mi></mml:ci></mml:apply><mml:mo>,</mml:mo></mml:math>
akkor 


<mml:math><mml:mi>a</mml:mi><mml:mo>×</mml:mo><mml:mi>a</mml:mi></mml:math>
méretű 
<h:font color="#3300FF" size=""><h:b><h:i>négyzetet</h:i></h:b></h:font><h:a name="id4498660"/>
 kapunk. <h:a name="id4498666"/>
 Egy 


<mml:math><mml:mn>4</mml:mn><mml:mo>×</mml:mo><mml:mn>4</mml:mn></mml:math>
méretű négyzet látható a harmadik fejezetben lévő <h:a href="#id4528880">3.2</h:a>. ábrán. </h:p>
<h:p>A lánc és a négyzet a síkhálózatokhoz tartoznak. </h:p>
<h:p>Ha 


<mml:math><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>3</mml:mn></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:math>
akkor 
<h:i>téglát</h:i>
 kapunk. <h:a name="id4498744"/><h:a name="id4498749"/>
 Ha ennek a hálózatnak a 3 mérete azonos, akkor 
<h:i>kockának</h:i>
 nevezzük. A 3.3. ábra egy 


<mml:math><mml:mn>2</mml:mn><mml:mo>×</mml:mo><mml:mn>2</mml:mn><mml:mo>×</mml:mo><mml:mn>2</mml:mn></mml:math>
méretű 
<h:font color="#3300FF" size=""><h:b><h:i>kockát</h:i></h:b></h:font><h:a name="id4498784"/>
 ábrázol. <h:a name="id4498791"/><h:a name="id4498796"/><h:a name="id4498802"/><h:a name="id4498808"/>
 Ha egy rácsot további élekkel kiegészítünk, akkor 
<h:font color="#3300FF" size=""><h:b><h:i>összetett</h:i></h:b></h:font>
 rácsot kapunk. <h:a name="id4498825"/><h:a name="id4498830"/><h:a name="id4498836"/>
 Ha egy láncban a 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msub></mml:math>
processzorokat összekötjük, akkor gyűrűt kapunk, amely már csak két dimenzióban ábrázolható A negyedik fejezetben lévő 4.4. </h:p>
<h:p>ábra egy 6 processzoros láncot ábrázol. </h:p>
<h:p>Ha egy téglalapban a sorok első 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
és utolsó 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
elemeit összekötjük, akkor az ugyancsak 2-dimenziós 
<h:font color="#3300FF" size=""><h:b><h:i>hengert</h:i></h:b></h:font>
 kapjuk. <h:a name="id4498926"/><h:a name="id4498931"/>
 Az <h:a href="#id4498962">1.5</h:a>. ábra egy 


<mml:math><mml:mn>4</mml:mn><mml:mo>×</mml:mo><mml:mn>4</mml:mn></mml:math>
méretű hengert ábrázol. </h:p>
<h:p><h:p><h:br/><h:center><h:img src="pics/p1-a4.gif"/><h:center><h:a name="id4498962"/>
<h:font color="#FF33FF" size=""><h:b>1.5. ábra.</h:b></h:font><mml:math><mml:mn>4</mml:mn><mml:mo>×</mml:mo><mml:mn>4</mml:mn></mml:math>
méretű henger.</h:center><h:br/></h:center></h:p>
 Az ILLIAC-IV megépült változata olyan 2-dimenziós rácsból származtatható, amelyben 


<mml:math><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn>8</mml:mn></mml:math>
és a 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math>
processzor szomszédai rendre a 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:math>
ahol az indexek (mod 8) értendők. Az ILLIAC-IV architektúrájának ábrázolásához már három dimenzióra van szükség. <h:a name="id4499107"/>
 A 
<h:font color="#3300FF" size=""><h:b><h:i>tórusz</h:i></h:b></h:font><h:a name="id4499119"/>
 például úgy származtatható egy kétdimenziós rácsból, hogy a belső élek mellett az egyes sorok első és utolsó processzorait, valamint az egyes oszlopok első és utolsó oszlopait is összekötjük. A negyedik fejezetben lévő 4.6. ábra egy 


<mml:math><mml:mn>5</mml:mn><mml:mo>×</mml:mo><mml:mn>5</mml:mn></mml:math>
méretű tóruszt mutat. <h:a name="id4499146"/>
 Egy 
<h:font color="#3300FF" size=""><h:b><h:i>d szintes piramis </h:i></h:b></h:font><h:a name="id4499159"/><mml:math><mml:mi>i</mml:mi></mml:math>
-edik 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>≤</mml:mo><mml:mi>i</mml:mi><mml:mo>≤</mml:mo><mml:mi>d</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
szintjén 


<mml:math><mml:msup><mml:mrow><mml:mn>4</mml:mn></mml:mrow><mml:mrow><mml:mi>d</mml:mi><mml:mo>−</mml:mo><mml:mi>i</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup></mml:math>
processzor van, amelyek az <h:a href="#id4499270">1.6</h:a>. ábra szerint vannak összekötve. Eszerint a piramis 


<mml:math><mml:mi>i</mml:mi></mml:math>
-edik szintje egy 


<mml:math><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>d</mml:mi><mml:mo>−</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:msup><mml:mo>×</mml:mo><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>d</mml:mi><mml:mo>−</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:msup></mml:math>
méretű rács. A piramis az egyes szinteken lévő processzorok számát tekintve hasonló a ternáris fához, azonban a fa azonos szinten lévő processzorai között nincs kapcsolat. <h:a name="id4499260"/><h:p><h:br/><h:center><h:img src="pics/p1-a5.gif"/><h:center><h:a name="id4499270"/>
<h:font color="#FF33FF" size=""><h:b>1.6. ábra.</h:b></h:font>
 Háromszintes piramis.</h:center><h:br/></h:center></h:p>
 A 
<h:font color="#3300FF" size=""><h:b><h:i>d dimenziós pillangó</h:i></h:b></h:font><h:a name="id4499290"/><h:a name="id4499296"/>
 hálózat 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>d</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msup></mml:math>
processzorból áll, amelyek 


<mml:math><mml:mi>d</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:math>
– egyenként 


<mml:math><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msup></mml:math>
processzort tartalmazó – sorban vannak elrendezve, ahogy azt a negyedik fejezetben lévő 4.2. ábra mutatja. A 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>d</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>×</mml:mo><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msup></mml:math>
méretű pillangó kifejezést is használni fogjuk. </h:p>
<h:p>Természetes architektúra a 
<h:font color="#3300FF" size=""><h:b><h:i>teljes hálózat,</h:i></h:b></h:font><h:a name="id4499392"/>
 amelyben minden processzor pár össze van kötve. Egy teljes hálózatot ábrázol az <h:a href="#id4499411">1.7</h:a>. ábra.
<h:p><h:br/><h:center><h:img src="pics/p1-a6.gif"/><h:center><h:a name="id4499411"/>
<h:font color="#FF33FF" size=""><h:b>1.7. ábra.</h:b></h:font>
 8 processzoros teljes hálózat.</h:center><h:br/></h:center></h:p>
 A 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>d</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
-paraméterű 
<h:font color="#3300FF" size=""><h:b><h:i>de Bruijn-hálózat </h:i></h:b></h:font><h:a name="id4499449"/><h:a name="id4499455"/><mml:math><mml:msup><mml:mrow><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msup></mml:math>
processzort tartalmaz, amelyek <h:a name="id4499472"/>
 a 


<mml:math><mml:mi>d</mml:mi></mml:math>
betűs 


<mml:math><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mi>d</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>}</mml:mo></mml:mrow></mml:math>
ábécé feletti 


<mml:math><mml:mi>k</mml:mi></mml:math>
hosszúságú szavakkal címezhetők. Az 


<mml:math><mml:msub><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:msub><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:math>
nevű processzorból az 


<mml:math><mml:msub><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msub><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:msub><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mi>q</mml:mi></mml:math>
című processzorokba vezet irányított él – ahol 


<mml:math><mml:mi>q</mml:mi></mml:math>
az ábécé tetszőleges eleme. Eszerint minden processzorból 


<mml:math><mml:mi>d</mml:mi></mml:math>
él indul, és minden processzorban 


<mml:math><mml:mi>d</mml:mi></mml:math>
él végződik. Az <h:a href="#id4499629">1.8</h:a>. ábra egy (2,3)-paraméterű de Bruijn-hálózatot mutat. Az ábra alapján ez kétdimenziós. </h:p>
<h:p><h:p><h:br/><h:center><h:img src="pics/p1-a7.gif"/><h:center><h:a name="id4499629"/>
<h:font color="#FF33FF" size=""><h:b>1.8. ábra.</h:b></h:font><mml:math><mml:mn>2</mml:mn><mml:mo>×</mml:mo><mml:mn>3</mml:mn></mml:math>
paraméterű de Bruijn-hálózat.</h:center><h:br/></h:center></h:p>
 A 


<mml:math><mml:mi>d</mml:mi></mml:math>
dimenziós 
<h:font color="#3300FF" size=""><h:b><h:i>permutációs hálózatban</h:i></h:b></h:font><h:a name="id4499666"/><h:a name="id4499671"/>
 a processzorok a 


<mml:math><mml:mi>d</mml:mi></mml:math>
-betűs 


<mml:math><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mi>d</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>}</mml:mo></mml:mrow></mml:math>
ábécé elemeinek különböző permutációival címezhetők. Ezért a hálózatban 


<mml:math><mml:mi>p</mml:mi><mml:mo>=</mml:mo><mml:mi>d</mml:mi><mml:mo>!</mml:mo></mml:math>
processzor van. A 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
processzor pontosan azokkal a processzorokkal van összekötve, amelyek címkéje előállítható úgy, hogy 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
címkéjében az első betűt a 


<mml:math><mml:mi>j</mml:mi></mml:math>
-edik 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>2</mml:mn><mml:mo>≤</mml:mo><mml:mi>j</mml:mi><mml:mo>≤</mml:mo><mml:mi>d</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
betűvel cseréljük ki. A <h:a href="#id4499824">1.9</h:a>. ábra egy 4 paraméterű permutációs hálózatot ábrázol. Ebben minden processzor fokszáma 


<mml:math><mml:mi>d</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn><mml:mo>=</mml:mo><mml:mn>3</mml:mn></mml:math>
és a processzorok száma 4! = 24. <h:a name="id4499810"/><h:a name="id4499814"/><h:p><h:br/><h:center><h:img src="pics/p1-a8.gif"/><h:center><h:a name="id4499824"/>
<h:font color="#FF33FF" size=""><h:b>1.9. ábra.</h:b></h:font>
 24 processzoros permutációs hálózat.</h:center><h:br/></h:center></h:p>
 A 


<mml:math><mml:mi>d</mml:mi></mml:math>
dimenziós 
<h:font color="#3300FF" size=""><h:b><h:i>hiperkockában</h:i></h:b></h:font><h:a name="id4499852"/><h:a name="id4499857"/><mml:math><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msup></mml:math>
processzor van, amelyek 


<mml:math><mml:mi>d</mml:mi></mml:math>
hosszúságú bináris sorozatokkal címezhetők. Minden 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
processzor pontosan azokkal a processzorokkal van összekötve, amelyek címe pontosan egy bitben tér el 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
címétől. A 3-dimenziós hiperkockában a 0,1,0 csúcs szomszédjai az 1,1,0, 0,0,0 és a 0,1,1 című csúcsok. Mivel a 


<mml:math><mml:mn>2</mml:mn><mml:mo>×</mml:mo><mml:mn>2</mml:mn><mml:mo>×</mml:mo><mml:mn>2</mml:mn></mml:math>
méretű kocka egyúttal 3-dimenziós hiperkocka is, a negyedik fejezetben lévő <h:a href="#id4529168">3.3</h:a>. ábra egyúttal egy 3-dimenziós hiperkockát is bemutat. Az ugyancsak a negyedik fejezetben lévő 4.1. ábra pedig egy 4-dimenziós hiperkockát mutat. </h:p>
<h:p>A 


<mml:math><mml:mi>d</mml:mi></mml:math>
-dimenziós rácsok, permutációs hálózatok és hiperkockák természetes módon elképzelhetők és ábrázolhatók 


<mml:math><mml:mi>d</mml:mi></mml:math>
dimenzióban. A korábban említett tétel szerint ugyanakkor tetszőlegesen nagy 


<mml:math><mml:mi>d</mml:mi></mml:math>
esetében is ábrázolhatók a 3-dimenziós euklideszi térben úgy, hogy az élek ne metsszék egymást. </h:p>
<h:p>A hálózatok jellemzésére sokféle adatot használnak. Ha a 


<mml:math><mml:mi>H</mml:mi></mml:math>
hálózatot 


<mml:math><mml:mi>H</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>V</mml:mi><mml:mo>,</mml:mo><mml:mi>E</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
formában, a csúcsok és élek halmazával adjuk meg, akkor természetes adat a 
<h:font color="#3300FF" size=""><h:b><h:i>processzorok száma</h:i></h:b></h:font><h:a name="id4500009"/><mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>|</mml:mo><mml:mi>V</mml:mi><mml:mo>|</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
és az 
<h:i>adatátviteli vonalak száma</h:i><mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>|</mml:mo><mml:mi>E</mml:mi><mml:mo>|</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math><h:a name="id4500052"/>
 Az adatátviteli vonalak lehetnek egyirányúak és kétirányúak. Az eddigi példák közül csak a de Bruijn-hálózat tartalmazott egyirányú éleket (ezért a hálózatot irányított gráffal ábrázoljuk), míg a többi esetben kétirányú éleket tételeztünk fel. </h:p>
<h:p>További jellemző a csúcsok 
<h:font color="#3300FF" size=""><h:b><h:i>maximális,</h:i></h:b></h:font><h:a name="id4500079"/>
<h:font color="#3300FF" size=""><h:b><h:i>minimális</h:i></h:b></h:font><h:a name="id4500092"/>
 és 
<h:font color="#3300FF" size=""><h:b><h:i>átlagos fokszáma,</h:i></h:b></h:font><h:a name="id4500106"/>
 a csúcsok 
<h:font color="#3300FF" size=""><h:b><h:i>maximális,</h:i></h:b></h:font><h:a name="id4500120"/>
<h:font color="#3300FF" size=""><h:b><h:i>minimális</h:i></h:b></h:font><h:a name="id4500134"/>
 és 
<h:font color="#3300FF" size=""><h:b><h:i>átlagos távolsága.</h:i></h:b></h:font><h:a name="id4500149"/>
 A csúcsok maximális távolságát a hálózat 
<h:font color="#3300FF" size=""><h:b><h:i>átmérőjének</h:i></h:b></h:font><h:a name="id4500164"/>
 nevezik. </h:p>
<h:p>Ha egy 


<mml:math><mml:mi>H</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>V</mml:mi><mml:mo>,</mml:mo><mml:mi>E</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
összefüggő hálózat csúcsait 


<mml:math><mml:mi>X</mml:mi></mml:math>
és 


<mml:math><mml:mi>Y</mml:mi></mml:math>
halmazra osztjuk, akkor a hálózat adott felbontáshoz tartozó 
<h:font color="#3300FF" size=""><h:b><h:i>vágási száma</h:i></h:b></h:font><h:a name="id4500217"/>
 a legkisebb olyan élhalmaz elemszáma, amelynek eltávolításával a hálózat elveszti 
<h:p><h:br/><h:center><h:br/><h:table border="1"><h:tr><h:td>Hálózat </h:td><h:td>Paraméter </h:td><h:td>Csúcsszám </h:td><h:td>Élszám </h:td><h:td>Átmérő </h:td></h:tr><h:tr><h:td>Lánc </h:td><h:td><mml:math><mml:mi>p</mml:mi></mml:math></h:td><h:td><mml:math><mml:mi>p</mml:mi></mml:math></h:td><h:td><mml:math><mml:mi>p</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:math></h:td><h:td><mml:math><mml:mi>p</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:math></h:td></h:tr><h:tr><h:td>Gyűrű </h:td><h:td><mml:math><mml:mi>p</mml:mi></mml:math></h:td><h:td><mml:math><mml:mi>p</mml:mi></mml:math></h:td><h:td><mml:math><mml:mi>p</mml:mi></mml:math></h:td><h:td><mml:math><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mi>p</mml:mi></mml:ci><mml:ci><mml:mn>2</mml:mn></mml:ci></mml:apply></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow></mml:math></h:td></h:tr><h:tr><h:td>Csillag </h:td><h:td><mml:math><mml:mi>p</mml:mi></mml:math></h:td><h:td><mml:math><mml:mi>p</mml:mi></mml:math></h:td><h:td><mml:math><mml:mi>p</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:math></h:td><h:td>2 </h:td></h:tr><h:tr><h:td>Fa </h:td><h:td><mml:math><mml:mi>d</mml:mi></mml:math></h:td><h:td><mml:math><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msup><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:math></h:td><h:td><mml:math><mml:mn>2</mml:mn><mml:mi>d</mml:mi><mml:mo>−</mml:mo><mml:mn>2</mml:mn></mml:math></h:td><h:td><mml:math><mml:mn>2</mml:mn><mml:mi>d</mml:mi><mml:mo>−</mml:mo><mml:mn>2</mml:mn></mml:math></h:td></h:tr><h:tr><h:td>Négyzet </h:td><h:td><mml:math><mml:mi>a</mml:mi><mml:mo>=</mml:mo><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mi>p</mml:mi></mml:ci></mml:apply></mml:math></h:td><h:td><mml:math><mml:msup><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:math></h:td><h:td><mml:math><mml:mn>2</mml:mn><mml:mi>d</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>d</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></h:td><h:td><mml:math><mml:mn>2</mml:mn><mml:mi>d</mml:mi><mml:mo>−</mml:mo><mml:mn>2</mml:mn></mml:math></h:td></h:tr><h:tr><h:td>Kocka </h:td><h:td><mml:math><mml:mi>a</mml:mi><mml:msup><mml:mrow><mml:mo>=</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mi>p</mml:mi></mml:ci></mml:apply></mml:math></h:td><h:td><mml:math><mml:msup><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup></mml:math></h:td><h:td><mml:math><mml:mn>3</mml:mn><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>a</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:msup><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:math></h:td><h:td><mml:math><mml:mn>3</mml:mn><mml:mi>a</mml:mi><mml:mo>−</mml:mo><mml:mn>3</mml:mn></mml:math></h:td></h:tr><h:tr><h:td>Piramis </h:td><h:td><mml:math><mml:mi>d</mml:mi></mml:math></h:td><h:td><mml:math><mml:apply><mml:divide/><mml:ci><mml:msup><mml:mrow><mml:mn>4</mml:mn></mml:mrow><mml:mrow><mml:mi>d</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:ci><mml:ci><mml:mn>3</mml:mn></mml:ci></mml:apply></mml:math></h:td><h:td><mml:math><mml:mn>2</mml:mn><mml:mi>d</mml:mi></mml:math></h:td><h:td><mml:math><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msup><mml:mo>−</mml:mo><mml:mn>2</mml:mn></mml:math></h:td></h:tr><h:tr><h:td>Permutációs </h:td><h:td><mml:math><mml:mi>d</mml:mi></mml:math></h:td><h:td><mml:math><mml:msup><mml:mrow><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:math></h:td><h:td><mml:math><mml:mn>2</mml:mn><mml:mi>d</mml:mi></mml:math></h:td><h:td><mml:math><mml:apply><mml:divide/><mml:ci><mml:mi>d</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>d</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>!</mml:mo></mml:ci><mml:ci><mml:mn>2</mml:mn></mml:ci></mml:apply></mml:math></h:td></h:tr><h:tr><h:td>De Bruijn </h:td><h:td><mml:math><mml:mi>d</mml:mi></mml:math></h:td><h:td><mml:math><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msup></mml:math></h:td><h:td><mml:math><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>d</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup></mml:math></h:td><h:td><mml:math><mml:mi>d</mml:mi></mml:math></h:td></h:tr><h:tr><h:td>Hiperkocka </h:td><h:td><mml:math><mml:mi>d</mml:mi></mml:math></h:td><h:td><mml:math><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msup></mml:math></h:td><h:td><mml:math><mml:mi>d</mml:mi><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>d</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup></mml:math></h:td><h:td><mml:math><mml:mi>d</mml:mi></mml:math></h:td></h:tr><h:tr><h:td>Teljes </h:td><h:td><mml:math><mml:mi>p</mml:mi></mml:math></h:td><h:td><mml:math><mml:mi>p</mml:mi></mml:math></h:td><h:td><mml:math><mml:mi>p</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:math></h:td><h:td>1 </h:td></h:tr><h:tr><h:td/></h:tr></h:table><h:center><h:a name="id4500763"/>
<h:font color="#FF33FF" size=""><h:b>1.10. ábra.</h:b></h:font>
 Hálózatok mennyiségi jellemzői.</h:center><h:br/></h:center></h:p>
 összefüggőségét. </h:p>
<h:p>Hálózatok 
<h:font color="#3300FF" size=""><h:b><h:i>felezési száma</h:i></h:b></h:font><h:a name="id4500787"/>
 azon élek minimális száma, amelyek eltávolításával a hálózat két azonos részre bontható. Ha egy hálózat processzorainak száma páros 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>=</mml:mo><mml:mn>2</mml:mn><mml:mi>k</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math>
akkor a hálózat biztosan felbontható két azonos részre (például két, egyenként 


<mml:math><mml:mi>k</mml:mi></mml:math>
izolált csúcsot tartalmazó hálózatra). Ha 


<mml:math><mml:mi>p</mml:mi><mml:mo>=</mml:mo><mml:mn>2</mml:mn><mml:mi>k</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo></mml:math>
akkor a hálózat nem bontható két azonos részre. Ha 


<mml:math><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mi>p</mml:mi></mml:ci></mml:apply></mml:math>
páros, akkor egy 


<mml:math><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mi>p</mml:mi></mml:ci></mml:apply><mml:mo>×</mml:mo><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mi>p</mml:mi></mml:ci></mml:apply></mml:math>
méretű rács vágási száma 


<mml:math><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mi>p</mml:mi></mml:ci></mml:apply><mml:mo>.</mml:mo></mml:math>
Az <h:a href="#id4500763">1.10</h:a>. táblázat az ismertetett hálózatok néhány alapvető adatát tartalmazza. A táblázat 
<h:i>Paraméter</h:i>
 oszlopában 


<mml:math><mml:mi>p</mml:mi></mml:math>
a processzorszámot jelöli. 


<mml:math><mml:mi>d</mml:mi></mml:math>
a fa és a piramis esetében a szintek számát, permutációs hálózat, de Bruijn hálózat és hiperkocka esetében a dimenziót jelöli. Négyzet és kocka esetében az oldalhosszúság a paraméter. </h:p>


<h:br/><h:center><h:strong><h:font face="Arial" size="+2" color="#3300FF"><h:a name="id4500935">1.5. Rekurzió </h:a></h:font></h:strong></h:center>

<h:p>Az algoritmusok megadásának gyakran alkalmazott módja az, hogy a végrehajtás során – változó paraméterekkel – újra és újra alkalmazzuk magát az algoritmust. </h:p>
<h:p>Egy algoritmusnak önmaga segítségével való megadását 
<h:font color="#3300FF" size=""><h:b><h:i>rekurziónak</h:i></h:b></h:font><h:a name="id4500960"/>
 az így megadott algoritmust pedig 
<h:font color="#3300FF" size=""><h:b><h:i>rekurzív algoritmusnak</h:i></h:b></h:font>
 nevezzük. </h:p>
<h:p><h:a name="id4500979"/><h:a name="id4500984"/>
 Példaként oldjunk meg egy népszerű, 1883-ból származó, Hanoi híres tornyairól szóló feladatot, melyben korongok és 3 rúd szerepel. Brahma tornya 64 – közepén lyukas – arany korongból áll, melyet Brahma egy gyémánt rúdra tett. </h:p>
<h:p>A korongok mérete alulról felfelé csökken. Az <h:a href="#id4501033">1.11</h:a>. ábra a kiinduló helyzetet mutatja 5 koronggal, melyek az 


<mml:math><mml:mi>A</mml:mi></mml:math>
rúdon vannak. A 


<mml:math><mml:mi>B</mml:mi></mml:math>
és 


<mml:math><mml:mi>C</mml:mi></mml:math>
rudakon kezdetben nincs korong. </h:p>
<h:p><h:p><h:br/><h:center><h:img src="pics/p1-a9.gif"/><h:center><h:a name="id4501033"/>
<h:font color="#FF33FF" size=""><h:b>1.11. ábra.</h:b></h:font>
 Hanoi tornyai 3 rúddal és 5 koronggal.</h:center><h:br/></h:center></h:p>
 A Világ teremtésével egyidejűleg Brahma megbízott szerzeteseket azzal, hogy az egyik rúdon lévő korongokat helyezzék át egy másik rúdra – egy harmadik rúd felhasználásával. A szerzetesek munkájának egy lépése egy korong áthelyezése egyik rúdról egy másik rúdra – azzal a megszorítással, hogy korongot csak üres rúdra vagy nála nagyobb korongra szabad helyezni. A történet szerint amikor a szerzetesek végeznek a munkával, a torony összeomlik és vége a világnak. </h:p>
<h:p>Mennyi időnk van hátra, ha a szerzetesek a lehető legkevesebb lépésben elvégzik a munkát – és egy lépés egy másodpercig tart. </h:p>
<h:p>Jelöljük 


<mml:math><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>K</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
-nel az 


<mml:math><mml:mi>n</mml:mi></mml:math>
korong áthelyezéséhez szükséges lépések számát egy 


<mml:math><mml:mi>K</mml:mi></mml:math>
korong-áthelyező algoritmus esetében. Minden 


<mml:math><mml:mi>K</mml:mi></mml:math>
algoritmusra igaz, hogy 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>K</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≥</mml:mo><mml:mn>1</mml:mn><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4501117">(1.38)</h:a></h:td></h:tr></h:table><mml:math><mml:mi>n</mml:mi></mml:math>
korongot csak úgy tudunk áthelyezni, hogy előbb a felső 


<mml:math><mml:mi>n</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:math>
korongot áthelyezzük egy másik rúdra, ezután a legalsó korongot áthelyezzük, és végül az 


<mml:math><mml:mi>n</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:math>
kisebb korongot ráhelyezzük a legnagyobb korongra. Eszerint minden 


<mml:math><mml:mi>K</mml:mi></mml:math>
algoritmusra 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>K</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≥</mml:mo><mml:mn>2</mml:mn><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>K</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mn>1</mml:mn><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4501189">(1.39)</h:a></h:td></h:tr></h:table>
Az ehhez hasonló egyenleteket – amelyekben egy függvény adott helyen felvett értékét más helyen vagy helyeken felvett értékei segítségével adjuk meg – 
<h:font color="#3300FF" size=""><h:b><h:i>rekurzív egyenletnek</h:i></h:b></h:font><h:a name="id4501255"/>
 nevezzük. </h:p>
<h:p>Tegyük fel, hogy a szerzetesek a következő rekurzív program szerint dolgoznak, melyben az ÁTHELYEZ(


<mml:math><mml:mi>k</mml:mi></mml:math>
,
<h:i>végez</h:i>
) eljárás <h:a name="id4501279"/>
 feladata az, hogy a 


<mml:math><mml:mi>k</mml:mi></mml:math>
nevű rúdon lévő legfelső korongot áthelyezze a 
<h:i>végez</h:i>
 nevű rúdra. </h:p>
<h:p><h:p><h:br/><h:center><h:img src="pics/p1-p46.gif"/></h:center></h:p><h:a name="id4501305"/>
 Eszerint a szerzetesek először – 


<mml:math><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>S</mml:mi><mml:mi>z</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépés alatt – átrakják a legkisebb korongot a 


<mml:math><mml:mi>B</mml:mi></mml:math>
rúdra, majd – 


<mml:math><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>S</mml:mi><mml:mi>z</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>2</mml:mn><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>S</mml:mi><mml:mi>z</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mn>1</mml:mn><mml:mo>=</mml:mo><mml:mn>3</mml:mn></mml:math>
lépés alatt – átrakják a két legkisebb korongot a 


<mml:math><mml:mi>C</mml:mi></mml:math>
rúdra, majd – 


<mml:math><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>S</mml:mi><mml:mi>z</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>3</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>2</mml:mn><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>S</mml:mi><mml:mi>z</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:math>
lépés alatt – átrakják a három legkisebb korongot a 


<mml:math><mml:mi>B</mml:mi></mml:math>
rúdra és így tovább. Ebből következik, hogy 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>S</mml:mi><mml:mi>z</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>2</mml:mn><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>S</mml:mi><mml:mi>z</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4501467">(1.40)</h:a></h:td></h:tr></h:table>
Mivel a szerzetesek minden részfeladatot a lehető legkevesebb lépésben megoldanak, algoritmusuk optimális. Módszerük futási idejét egyszerűen 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
-nel jelölve a következő 
<h:font color="#3300FF" size=""><h:b><h:i>kezdeti feltételt</h:i></h:b></h:font><h:a name="id4501548"/>
 és 
<h:i>rekurzív egyenletet</h:i>
 kapjuk: 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4501565">(1.41)</h:a></h:td></h:tr></h:table>
és 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mtext> ha </mml:mtext><mml:mi>n</mml:mi><mml:mo>≥</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mtext> akkor </mml:mtext><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>2</mml:mn><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mn>1</mml:mn><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4501591">(1.42)</h:a></h:td></h:tr></h:table>
Függvényeknek kezdeti feltétel (vagy feltételek) és rekurzív egyenlet segítségével történő megadását 
<h:font color="#3300FF" size=""><h:b><h:i>rekurziónak</h:i></h:b></h:font><h:a name="id4501657"/>
 nevezzük. Eszerint a rekurzió szót kétféle – egymással összefüggő – jelentéssel használjuk. Megjegyezzük, hogy bizonyos esetekben a kezdeti feltételt nem akarjuk vagy tudjuk megadni – ilyenkor a rekurzív egyenlet rendszereint csak a megfelelő függvény nagyságrendjét határozza meg. </h:p>
<h:p>Teljes indukcióval és a 
<h:font color="#3300FF" size=""><h:b><h:i>rekurziótétellel</h:i></h:b></h:font><h:a name="id4501684"/>
 (lásd például Halmos könyvét) bebizonyíthatjuk, hogy ennek a rekurzív egyenletnek a megoldása az 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msup><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4501701">(1.43)</h:a></h:td></h:tr></h:table>
függvény. </h:p>
<h:p>Eszerint a világ élettartama 
<h:p><h:br/><h:center><h:img src="pics/p1-k47.gif"/></h:center></h:p>
 Tehát a korongok átrakása a szerzeteseknek körülbelül ötszáz milliárd évig tart. Eszerint még akkor is sok időnk lenne hátra a világ végéig, ha a szerzetesek 4,6 milliárd évvel ezelőtt (amikor a geológusok szerint a Föld és a világegyetem az ősrobbanással létrejött) kezdték volna el a korongok átrakását. </h:p>
<h:p>Ez a példa több szempontból nagyon érdekes. </h:p>
<h:p>Mutatja, hogy – legalábbis bizonyos esetekben – elemi eszközökkel meg tudjuk határozni a rekurzív algoritmusok futási idejét. </h:p>
<h:p>Tegyük fel, hogy sok szerzetes dolgozik a korongok átrakásán, és 


<mml:math><mml:mi>s</mml:mi></mml:math>
szerzetes már 


<mml:math><mml:mn>1</mml:mn><mml:mo>/</mml:mo><mml:mi>s</mml:mi></mml:math>
másodperc alatt átrak egy korongot, vagy pedig a lépéseket egyenletesen fel tudják egymás között osztani. Ekkor az algoritmus futási ideje az 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:apply><mml:divide/><mml:ci><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msup><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:ci><mml:ci><mml:mi>s</mml:mi></mml:ci></mml:apply></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4501802">(1.49)</h:a></h:td></h:tr></h:table>
értékre csökken. Ezzel elvben tetszőleges kicsire csökkenthető az átrakási idő. </h:p>
<h:p>De hogyan tud a sok szerzetes hozzáférni a korongokhoz? </h:p>
<h:p>A kérdés rávilágít arra, hogy egy feladat részfeladatokra bontásának lehetőségeit gyakran korlátozzák a feladat sajátosságai. Ha például megengedjük, hogy a szerzetesek felemeljék a felső 


<mml:math><mml:mi>n</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:math>
korongot és a legalsót körcikkekre vágva áthelyezzék, akkor megfelelő számú szerzetes esetében lineáris (vagy akár konstans) futási idejű algoritmust kaphatunk. Ezzel a megközelítéssel a könyvben nem foglalkozunk: a párhuzamos processzorok csak olyan műveleteket végezhetnek, amelyet a soros is végre tud hajtani. </h:p>
<h:p>Másik kérdés, mit érünk azzal, ha a gyakorlatilag végtelen futási időt például század vagy ezred részére csökkentjük? Ez a kérdés pedig arra világít rá, hogy a sokprocesszoros rendszerek és párhuzamos algoritmusok lehetőségei is korlátozottak. </h:p>
<h:p>A feladat megoldása azt is mutatja, hogy ha csak a futási időre van szükségünk, az (<h:a href="#id4501701">1.43</h:a>) képletet levezetve és alkalmazva nagyon gyorsan meg tudjuk mondani. </h:p>

<h:br/><h:center><h:strong><h:font face="Arial" size="+2" color="#3300FF"><h:a name="id4501908">1.6. Véletlenített algoritmusok (*) </h:a></h:font></h:strong></h:center>

<h:p>A véletlenített algoritmusok bizonyos helyzetekben több döntés közül választanak – ezek valószínűsége pontosan adott. </h:p>
<h:p>Két típusuk van. A 
<h:font color="#3300FF" size=""><h:b><h:i>Las Vegas algoritmusok</h:i></h:b></h:font><h:a name="id4501933"/><h:a name="id4501938"/>
 mindig helyes eredményt adnak – futási idejük azonban nem állandó, hanem egy valószínűségi változóval jellemezhető. </h:p>
<h:p>A 
<h:font color="#3300FF" size=""><h:b><h:i>Monte Carlo algoritmusok</h:i></h:b></h:font>
 adhatnak hibás eredményt is. <h:a name="id4501963"/><h:a name="id4501968"/>
 A Las Vegas algoritmusok futási ideje tág határok között változhat, míg a Monte Carlo algoritmusoké viszonylag állandó. </h:p>
<h:p>A véletlenített algoritmusokat tekinthetjük algoritmushalmaznak. Adott bemenet esetében bizonyos algoritmusok futhatnak sokáig vagy adhatnak hibás választ. A tervezés célja, hogy az ilyen 
<h:i>rossz algoritmusok</h:i><h:a name="id4501991"/>
 algoritmusok hányada kicsi legyen. Ha meg tudjuk mutatni, hogy 
<h:i>bármilyen</h:i>
 bemenetre az algoritmusoknak legalább 


<mml:math><mml:mn>1</mml:mn><mml:mo>−</mml:mo><mml:mi>ε</mml:mi></mml:math>
hányada (ahol a pozitív 


<mml:math><mml:mi>ε</mml:mi></mml:math>
elég kicsi) gyors (illetve helyes eredményt ad), akkor a halmazból véletlenül választott algoritmusra igaz, hogy legalább 


<mml:math><mml:mn>1</mml:mn><mml:mo>−</mml:mo><mml:mi>ε</mml:mi></mml:math>
valószínűséggel gyors (helyes eredményt ad). Ekkor 


<mml:math><mml:mi>ε</mml:mi></mml:math>
-t 
<h:font color="#3300FF" size=""><h:b><h:i>hibavalószínűségnek</h:i></h:b></h:font>
 nevezzük. <h:a name="id4502054"/>
 Az alábbi definíciókban a 


<mml:math><mml:mi>d</mml:mi><mml:mo>,</mml:mo></mml:math><mml:math><mml:mi>v</mml:mi></mml:math>
és 


<mml:math><mml:mi>g</mml:mi></mml:math>
függvények a pozitív egészek halmazán vannak értelmezve, a 


<mml:math><mml:mi>d</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math><mml:math><mml:mi>v</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
és 


<mml:math><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
függvényértékek pedig nemnegatív valós számok. </h:p>
<h:p>Egy 


<mml:math><mml:mi>D</mml:mi></mml:math>
determinisztikus algoritmusnak adott erőforrásból 


<mml:math><mml:mi>d</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
egységre van szüksége, míg a 


<mml:math><mml:mi>V</mml:mi></mml:math>
véletlenített algoritmusnak 


<mml:math><mml:mi>v</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
egységre – ahol 


<mml:math><mml:mi>v</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
valószínűségi változó. Egy 


<mml:math><mml:mi>n</mml:mi></mml:math>
-től függő 


<mml:math><mml:mi>ε</mml:mi></mml:math>
esemény 
<h:font color="#3300FF" size=""><h:b><h:i>nagy valószínűséggel</h:i></h:b></h:font><h:a name="id4502210"/>
 bekövetkezik, ha tetszőleges 


<mml:math><mml:mi>α</mml:mi></mml:math>
értékre a bekövetkezés valószínűsége legalább 


<mml:math><mml:mn>1</mml:mn><mml:mo>−</mml:mo><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>−</mml:mo><mml:mi>α</mml:mi></mml:mrow></mml:msup><mml:mo>.</mml:mo></mml:math>
Az 


<mml:math><mml:mi>α</mml:mi></mml:math>
számot 
<h:font color="#3300FF" size=""><h:b><h:i>valószínűségi paraméternek</h:i></h:b></h:font><h:a name="id4502260"/>
 nevezzük. </h:p>
<h:p><mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
(ejtsd: 
<h:font color="#3300FF" size=""><h:b><h:i>nagy valószínűséggel nagy ordó</h:i></h:b></h:font>
) <h:a name="id4502309"/>
 azon 


<mml:math><mml:mi>v</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
függvények halmazát jelenti, amelyekhez létezik olyan 


<mml:math><mml:mi>c</mml:mi></mml:math>
pozitív állandó, hogy tetszőleges 


<mml:math><mml:mi>α</mml:mi></mml:math>
esetében nagy valószínűséggel teljesül 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>P</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>v</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≤</mml:mo><mml:mi>c</mml:mi><mml:mi>α</mml:mi><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>≥</mml:mo><mml:mn>1</mml:mn><mml:mo>−</mml:mo><mml:apply><mml:divide/><mml:ci><mml:mn>1</mml:mn></mml:ci><mml:ci><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mi>α</mml:mi></mml:mrow></mml:msup></mml:ci></mml:apply><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4502353">(1.50)</h:a></h:td></h:tr></h:table></h:p>
<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4502417">1.6.1. Egyenlőtlenségek </h:a></h:font></h:strong>

<h:p>Ebben a részben olyan egyenlőtlenségeket adunk meg, amelyek azt jellemzik, hogy a valószínűségi változók ritkán térnek el lényegesen a várható értéküktől. </h:p>
<h:p>Ezek az egyenlőtlenségek majd hasznosak lesznek a véletlenített algoritmusok várható viselkedésének elemzése során.<h:a name="id4502441"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>1.7. lemma( Markov-egyenlőtlenség). </h:b>
</h:font>
<h:i>Ha 


<mml:math><mml:mi>X</mml:mi></mml:math>
nemnegatív <h:a name="id4502470"/>
 valószínűségi változó, melynek várható értéke 


<mml:math><mml:mi>μ</mml:mi><mml:mo>,</mml:mo></mml:math>
akkor 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>P</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>X</mml:mi><mml:mo>≥</mml:mo><mml:mi>x</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>≤</mml:mo><mml:apply><mml:divide/><mml:ci><mml:mi>μ</mml:mi></mml:ci><mml:ci><mml:mi>x</mml:mi></mml:ci></mml:apply><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4502492">(1.51)</h:a></h:td></h:tr></h:table></h:i>
</h:p>
<h:p><h:a name="id4502528"/><h:a name="id4502533"/>
 A 
<h:font color="#3300FF" size=""><h:b><h:i>Bernoulli-kísérletnek</h:i></h:b></h:font><h:a name="id4502547"/>
 2 lehetséges eredménye van: 


<mml:math><mml:mi>p</mml:mi></mml:math>
valószínűséggel sikeres, 


<mml:math><mml:mn>1</mml:mn><mml:mo>−</mml:mo><mml:mi>p</mml:mi></mml:math>
valószínűséggel sikertelen a kísérlet. Ha 


<mml:math><mml:mi>X</mml:mi></mml:math>
jelöli azt, hogy 


<mml:math><mml:mi>n</mml:mi></mml:math>
kísérletből hány sikeres, akkor 


<mml:math><mml:mi>X</mml:mi></mml:math>
eloszlása binomiális: 
<h:p><h:br/><h:center><h:img src="pics/p1-k50.gif"/></h:center></h:p><h:a name="id4502598"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>1.8. lemma(Csernov-egyenlőtlenségek). </h:b>
</h:font>
<h:i>Ha 


<mml:math><mml:mi>X</mml:mi></mml:math><mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
paraméterű binomiális eloszlású valószínűségi változó és 


<mml:math><mml:mi>m</mml:mi><mml:mo>&gt;</mml:mo><mml:mi>n</mml:mi><mml:mi>p</mml:mi></mml:math>
egész szám, akkor <h:a name="id4502655"/><h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>P</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>X</mml:mi><mml:mo>≥</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>≤</mml:mo><mml:msup><mml:mrow><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mi>n</mml:mi><mml:mi>p</mml:mi></mml:ci><mml:ci><mml:mi>m</mml:mi></mml:ci></mml:apply></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:msup><mml:msup><mml:mrow><mml:mi>e</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mo>−</mml:mo><mml:mi>n</mml:mi><mml:mi>p</mml:mi></mml:mrow></mml:msup><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4502665">(1.53)</h:a></h:td></h:tr></h:table>
Továbbá minden 


<mml:math><mml:mn>0</mml:mn><mml:mo>&lt;</mml:mo><mml:mi>ε</mml:mi><mml:mo>&lt;</mml:mo><mml:mn>1</mml:mn></mml:math>
számra <h:a name="id4502744"/><h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>P</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>X</mml:mi><mml:mo>≤</mml:mo><mml:mrow><mml:mo>⌊</mml:mo><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>−</mml:mo><mml:mi>ε</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mi>p</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mo>⌋</mml:mo></mml:mrow></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>≤</mml:mo><mml:msup><mml:mrow><mml:mi>e</mml:mi></mml:mrow><mml:mrow><mml:mo>−</mml:mo><mml:msup><mml:mrow><mml:mi>ε</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mi>n</mml:mi><mml:mi>p</mml:mi><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4502756">(1.54)</h:a></h:td></h:tr></h:table>
és 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>P</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>X</mml:mi><mml:mo>≥</mml:mo><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>+</mml:mo><mml:mi>ε</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mi>n</mml:mi><mml:mi>p</mml:mi></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>≤</mml:mo><mml:msup><mml:mrow><mml:mi>e</mml:mi></mml:mrow><mml:mrow><mml:mo>−</mml:mo><mml:msup><mml:mrow><mml:mi>ε</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mi>n</mml:mi><mml:mi>p</mml:mi><mml:mo>/</mml:mo><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4502832">(1.55)</h:a></h:td></h:tr></h:table></h:i>
</h:p>
<h:p>
    
</h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4502907">1.6.2. Példák </h:a></h:font></h:strong>

<h:p>Ebben a pontban két példát mutatunk véletlenített algoritmusra. </h:p>
  
<h:p>
<h:font color="#" size="-1&#10;">

<h:p><h:a name="id4502930"/>
<h:font color="#FF33FF" size=""><h:b>1.2. példa.</h:b></h:font><h:i>Ismétlődő tömbelem meghatározása.</h:i>
 Tegyük fel, hogy 


<mml:math><mml:mi>n</mml:mi></mml:math>
páros, az 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>:</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
tömb elemei között az 


<mml:math><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mi>n</mml:mi><mml:mo>/</mml:mo><mml:mn>2</mml:mn><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:math>
számok egyike 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
-ször fordul elő, a többi szám pedig egyszer. </h:p>
<h:p>Határozzuk meg a többször előforduló elemet. </h:p>
<h:p>Bármely determinisztikus algoritmusnak legrosszabb esetben legalább 


<mml:math><mml:mi>n</mml:mi><mml:mo>/</mml:mo><mml:mn>2</mml:mn><mml:mo>+</mml:mo><mml:mn>2</mml:mn></mml:math>
lépésre van szüksége. Ugyanis bármely determinisztikus algoritmushoz megadható úgy a bemenet, hogy az első 


<mml:math><mml:mi>n</mml:mi><mml:mo>/</mml:mo><mml:mn>2</mml:mn><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:math>
vizsgált elem különböző legyen. </h:p>
<h:p>Most megadunk egy Las Vegas algoritmust, amely legrosszabb esetben 


<mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
ideig fut. Az algoritmus bemenete egy 


<mml:math><mml:mi>n</mml:mi></mml:math>
szám és egy 


<mml:math><mml:mi>n</mml:mi></mml:math>-elemű 


<mml:math><mml:mi>A</mml:mi></mml:math>
tömb, kimenete az egyik ismételt elem indexe. </h:p>
</h:font>
</h:p>
<h:p><h:p><h:br/><h:center><h:img src="pics/p1-p51.gif"/></h:center></h:p><h:a name="id4503121"/>
 Ebben az algoritmusban felhasználjuk a VÉLETLEN


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
eljárást, amely minden hívásakor a 


<mml:math><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>:</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
intervallumból <h:a name="id4503160"/>
 vett egyenletes eloszlású, véletlen egész számot ad kimenetként. </h:p>
<h:p>Most megmutatjuk, hogy az algoritmus futási ideje 


<mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
A 
<h:b>while</h:b>
 ciklus bármely végrehajtása sikeres, ha 


<mml:math><mml:mi>i</mml:mi></mml:math>
az 


<mml:math><mml:mi>n</mml:mi><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:math>
azonos elem valamelyikének indexe és 


<mml:math><mml:mi>j</mml:mi></mml:math>
egy tőle különböző helyen lévő azonos elem indexe. Ennek az eseménynek a 


<mml:math><mml:mi>P</mml:mi></mml:math>
valószínűsége 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>P</mml:mi><mml:mo>=</mml:mo><mml:apply><mml:divide/><mml:ci><mml:apply><mml:divide/><mml:ci><mml:mi>n</mml:mi></mml:ci><mml:ci><mml:mn>2</mml:mn></mml:ci></mml:apply><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mi>n</mml:mi></mml:ci><mml:ci><mml:mn>2</mml:mn></mml:ci></mml:apply><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci><mml:ci><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:ci></mml:apply><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4503243">(1.56)</h:a></h:td></h:tr></h:table>
ami 


<mml:math><mml:mi>n</mml:mi><mml:mo>&gt;</mml:mo><mml:mn>10</mml:mn></mml:math>
esetében kisebb, mint 1/5. Tehát annak valószínűsége, hogy az algoritmus egy adott lépésben nem fejeződik be, (1/5)-nél kisebb. </h:p>
<h:p>Ezért annak valószínűsége, hogy az algoritmus 10 lépés alatt nem fejeződik be, 


<mml:math><mml:msup><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>4</mml:mn><mml:mo>/</mml:mo><mml:mn>5</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mn>10</mml:mn></mml:mrow></mml:msup></mml:math>-nél kisebb, ami kisebb 0.1074-nél. Ezért az algoritmus 10 lépés alatt legalább 0.8926 valószínűséggel befejeződik. Annak valószínűsége, hogy 100 lépés alatt sem fejeződik be, kisebb 


<mml:math><mml:msup><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>4</mml:mn><mml:mo>/</mml:mo><mml:mn>5</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mn>100</mml:mn></mml:mrow></mml:msup></mml:math>-nál, ami pedig kisebb 


<mml:math><mml:mn>2.04</mml:mn><mml:mo>*</mml:mo><mml:msup><mml:mrow><mml:mn>10</mml:mn></mml:mrow><mml:mrow><mml:mo>−</mml:mo><mml:mn>10</mml:mn></mml:mrow></mml:msup></mml:math>nél. </h:p>
<h:p>Általában annak az 


<mml:math><mml:mi>ε</mml:mi></mml:math>
eseménynek a valószínűsége, hogy az algoritmus az első 


<mml:math><mml:mi>c</mml:mi><mml:mi>α</mml:mi><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math>
(ahol a 


<mml:math><mml:mi>c</mml:mi></mml:math>
konstans rögzített érték) lépésben nem fejeződik be, 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>P</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>ε</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>&lt;</mml:mo><mml:msup><mml:mrow><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mn>4</mml:mn></mml:ci><mml:ci><mml:mn>5</mml:mn></mml:ci></mml:apply></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow><mml:mrow><mml:mi>c</mml:mi><mml:mi>α</mml:mi><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow></mml:msup><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4503424">(1.57)</h:a></h:td></h:tr></h:table>
és 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mtext> ha </mml:mtext><mml:mi>c</mml:mi><mml:mo>≥</mml:mo><mml:apply><mml:divide/><mml:ci><mml:mn>1</mml:mn></mml:ci><mml:ci><mml:mo>log</mml:mo><mml:apply><mml:divide/><mml:ci><mml:mn>5</mml:mn></mml:ci><mml:ci><mml:mn>4</mml:mn></mml:ci></mml:apply></mml:ci></mml:apply><mml:mo>,</mml:mo><mml:mtext> akkor </mml:mtext><mml:msup><mml:mrow><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mn>4</mml:mn></mml:ci><mml:ci><mml:mn>5</mml:mn></mml:ci></mml:apply></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow><mml:mrow><mml:mi>c</mml:mi><mml:mi>α</mml:mi><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow></mml:msup><mml:mo>&lt;</mml:mo><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>−</mml:mo><mml:mi>α</mml:mi></mml:mrow></mml:msup><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4503479">(1.58)</h:a></h:td></h:tr></h:table>
Tehát az algoritmus legalább 


<mml:math><mml:mn>1</mml:mn><mml:mo>−</mml:mo><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>−</mml:mo><mml:mi>α</mml:mi></mml:mrow></mml:msup></mml:math>
valószínűséggel befejeződik legfeljebb 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:apply><mml:divide/><mml:ci><mml:mi>α</mml:mi><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:ci><mml:ci><mml:mo>log</mml:mo><mml:apply><mml:divide/><mml:ci><mml:mn>5</mml:mn></mml:ci><mml:ci><mml:mn>4</mml:mn></mml:ci></mml:apply></mml:ci></mml:apply></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4503582">(1.59)</h:a></h:td></h:tr></h:table>
lépésben. Mivel minden iteráció 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
ideig tart, ezért az algoritmus futási ideje valóban 


<mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Mivel algoritmusunk mindig helyes eredményt ad, ezért Las Vegas típusú. </h:p>
<h:p>Megmutattuk, hogy nagy valószínűséggel gyorsan befejeződik. </h:p>
<h:p>Ha például kétmillió elemünk van, akkor bármely 


<mml:math mathvariant="script"><mml:mi mathvariant="script">D</mml:mi></mml:math>
determinisztikus algoritmushoz megadhatunk olyan bemenetet, amelyre 


<mml:math mathvariant="script"><mml:mi mathvariant="script">D</mml:mi></mml:math>
legalább egymillió lépést végez, Az ISMÉTELLT-ELEM algoritmusnak viszont bármely bemenetre – nagy valószínűséggel – legfeljebb száz lépésre van szüksége. </h:p>
<h:p>Ugyanakkor az ISMÉTELT-ELEM algoritmus – igaz, csak kis valószínűséggel – egymilliónál lényegesen több lépést is végezhet. </h:p>
<h:p>Az adott problémát másképp is megoldhatjuk: először rendezünk, azután lineárisan keresünk – ekkor 


<mml:math><mml:mi>Ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
időre van szükség. Vagy hármas csoportokra osztjuk a tömböt – ekkor 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
a futási idő. </h:p>
  
<h:p>
<h:font color="#" size="-1&#10;">

<h:p><h:a name="id4503739"/>
<h:font color="#FF33FF" size=""><h:b>1.3. példa.</h:b></h:font><h:i>Pénzérme ismételt feldobása.</h:i>
 Dobjunk fel egy szabályos pénzérmét ezerszer. Mekkora annak valószínűsége, hogy legalább hatszázszor fejet dobunk? </h:p>
<h:p>A Markov-egyenlőtlenség szerint legfeljebb 5/6. </h:p>
<h:p>Az (<h:a href="#id4502832">1.55</h:a>) képletet, azaz <h:a name="id4503772"/>
 a harmadik Csernov-egyenlőtlenséget is alkalmazhatjuk az 


<mml:math><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mn>1000</mml:mn><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>/</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mi>ε</mml:mi><mml:mo>=</mml:mo><mml:mn>0.2</mml:mn></mml:math>
értékekkel. Eszerint <h:a name="id4503813"/><h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>P</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>X</mml:mi><mml:mo>≥</mml:mo><mml:mn>600</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>≤</mml:mo><mml:msup><mml:mrow><mml:mi>e</mml:mi></mml:mrow><mml:mrow><mml:mo>−</mml:mo><mml:msup><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>500</mml:mn><mml:mo>/</mml:mo><mml:mn>3</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:msup></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4503824">(1.60)</h:a></h:td></h:tr></h:table><h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mi>e</mml:mi></mml:mrow><mml:mrow><mml:mo>−</mml:mo><mml:mn>20</mml:mn><mml:mo>/</mml:mo><mml:mn>3</mml:mn></mml:mrow></mml:msup></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4503884">(1.61)</h:a></h:td></h:tr></h:table><h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mo>≤</mml:mo><mml:mn>0.001273</mml:mn><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4503905">(1.62)</h:a></h:td></h:tr></h:table>
Meghagyjuk gyakorlatnak az ennél pontosabb becslést. </h:p>
</h:font>
</h:p>
  


<h:br/><h:center><h:strong><h:font face="Arial" size="+2" color="#3300FF"><h:a name="id4503924">1.7. Alsó korlátok </h:a></h:font></h:strong></h:center>

<h:p>Az algoritmusok elemzése során számos korábbi tankönyv szerzői (a múlt század hetvenes és a nyolcvanas éveiben) megelégedtek azzal, hogy többé-kevésbé pontos felső korlátokat adtak az adott algoritmus által igényelt erőforrások legnagyobb és átlagos mennyiségére. </h:p>
<h:p>Ezeknek a becsléseknek a pontossága azonban gyakran homályban maradt. </h:p>
<h:p>Pedig e nélkül megválaszolatlan marad az a fontos kérdés, hogy érdemes-e jobb algoritmust keresni. Különösen fontos az erőforrásigény pontos ismerete a párhuzamos algoritmusok vizsgálata során, hiszen e nélkül nem tudjuk eldönteni, hogy adott párhuzamos algoritmus munkahatékony-e, munkaoptimális-e. </h:p>
<h:p>A munkahatékonyság és munkaoptimalitás bizonyításához a párhuzamos algoritmus igényét felülről, a feladat jellegéből fakadó igényt pedig alulról kell becsülnünk. </h:p>
<h:p>A munkahatékonyság cáfolásához pedig elég egy jó soros algoritmus igényének felülről, a párhuzamos algoritmus igényének pedig alulról való becslése. </h:p>
<h:p>Ebben az alfejezetben olyan módszereket mutatunk be, melyek segítségével alsó korlátokat bizonyíthatunk. Ez az alfejezet bevezető jellegű. A későbbiekben a számítási modellekhez és problémákhoz kapcsolódva további alsó korlátokat adunk meg. </h:p>
<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4503996">1.7.1. Egyszerű számolás </h:a></h:font></h:strong>

<h:p>Tegyük fel, hogy adott egy 


<mml:math><mml:mi>n</mml:mi></mml:math>
méretű 


<mml:math><mml:mi>L</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
lista és feladatunk a lista legnagyobb elemének megkeresése úgy, hogy elempárok összehasonlítása a megengedett művelet. </h:p>
<h:p>Ha 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
-nel jelöljük az 


<mml:math><mml:mi>A</mml:mi></mml:math>
kereső algoritmus által elvégzett összehasonlítások számát, akkor tetszőleges 


<mml:math><mml:mi>A</mml:mi></mml:math>
összehasonlítás alapú algoritmusra teljesül, hogy 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>A</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≥</mml:mo><mml:mi>N</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4504081">(1.63)</h:a></h:td></h:tr></h:table><h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mo>≥</mml:mo><mml:mrow><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mi>n</mml:mi></mml:ci><mml:ci><mml:mn>2</mml:mn></mml:ci></mml:apply></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow></mml:mrow><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4504109">(1.64)</h:a></h:td></h:tr></h:table>
Megmutatjuk, hogy ennél több is igaz. </h:p>
<h:p>Az egyszerűség kedvéért tegyük fel, hogy a lista különböző elemeket tartalmaz. Amikor egy 


<mml:math><mml:mi>A</mml:mi></mml:math>
összehasonlítás alapú algoritmus összehasonlítja az 


<mml:math><mml:mi>X</mml:mi></mml:math>
és 


<mml:math><mml:mi>Y</mml:mi></mml:math>
elemet, akkor az 


<mml:math><mml:mi>X</mml:mi><mml:mo>&gt;</mml:mo><mml:mi>Y</mml:mi></mml:math>
esetben azt mondjuk, hogy 


<mml:math><mml:mi>X</mml:mi></mml:math>
megnyerte az összehasonlítást – ellenkező esetben pedig azt mondjuk, hogy 


<mml:math><mml:mi>X</mml:mi></mml:math>
elvesztette az összehasonlítást. Tehát minden összehasonlítás egy vereséget eredményez. </h:p>
<h:p>Mivel mindazon elemeknek, amelyek nem a legnagyobbak, legalább egy összehasonlítást el kell veszíteniük, ezért 


<mml:math><mml:mi>n</mml:mi></mml:math>
elem legnagyobbikának meghatározásához 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≥</mml:mo><mml:mi>n</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4504214">(1.65)</h:a></h:td></h:tr></h:table>
összehasonlításra van szükség. </h:p>
<h:p>Ennek szigorú bizonyításához tegyük fel, 


<mml:math><mml:mi>A</mml:mi></mml:math>
úgy fejezi be a keresést, hogy az 


<mml:math><mml:mi>L</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
lista két különböző eleme, például 


<mml:math><mml:mi>L</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
és 


<mml:math><mml:mi>L</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math>
egyetlen összehasonlítást sem veszítettek el. Feltehetjük, hogy 


<mml:math><mml:mi>A</mml:mi></mml:math>
az 


<mml:math><mml:mi>L</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
elemet adta meg legnagyobbként. </h:p>
<h:p>Most tekintsük azt az 


<mml:math><mml:mi>L</mml:mi><mml:mo>′</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
bemenő listát, amely csak annyiban különbözik az előzőtől, hogy abban 


<mml:math><mml:mi>L</mml:mi><mml:mo>′</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
nagyobb, mint 


<mml:math><mml:mi>L</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Mivel 


<mml:math><mml:mi>A</mml:mi></mml:math>
összehasonlítás alapú, ezért ugyanolyan összehasonlításokat végez 


<mml:math><mml:mi>L</mml:mi></mml:math>
és 


<mml:math><mml:mi>L</mml:mi><mml:mo>′</mml:mo></mml:math>
esetében. Ez következik abból, hogy különbség legfeljebb akkor fordulhatna elő, amikor 


<mml:math><mml:mi>L</mml:mi><mml:mo>′</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
is részt vesz az összehasonlításban. 


<mml:math><mml:mi>L</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
azonban minden összehasonlítást megnyert és 


<mml:math><mml:mi>L</mml:mi><mml:mo>′</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>&gt;</mml:mo><mml:mi>L</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Tehát az 


<mml:math><mml:mi>A</mml:mi></mml:math>
algoritmusnak ismét az 


<mml:math><mml:mi>L</mml:mi><mml:mo>′</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>L</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
elemet kell a legnagyobbnak nyilvánítania, ami ellentmondás. </h:p>
<h:p>Például az alábbi közismert program nemcsak legjobb, hanem legrosszabb esetben is 


<mml:math><mml:mi>n</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:math>
összehasonlítással meghatározza az 


<mml:math><mml:mi>L</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>:</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
lista maximális elemét. 
<h:p><h:br/><h:center><h:img src="pics/p1-p55.gif"/></h:center></h:p><h:a name="id4504566"/>
 Tehát beláttuk, hogy MAX az összehasonlítás alapú maximumkeresést a feladat megoldásához okvetlenül szükséges számú összehasonlítással megoldja. </h:p>
<h:p>Azokat az algoritmusokat, amelyekre a legjobb és a legrosszabb futási idő megegyezik, azaz amelyekre 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>B</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4504592">(1.66)</h:a></h:td></h:tr></h:table>
<h:font color="#3300FF" size=""><h:b><h:i>stabilnak</h:i></h:b></h:font><h:a name="id4504630"/><h:a name="id4504635"/>
 nevezzük. </h:p>
<h:p>Megállapításainkat a következőképpen összegezhetjük. <h:a name="id4504647"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>1.9. 
<h:font color="#FF33FF" size="">tétel</h:font>
(MAX abszolút optimális). </h:b>
</h:font>
<h:i>Ha különböző elemeket tartalmazó, 


<mml:math><mml:mi>n</mml:mi></mml:math>
hosszúságú lista maximális elemét összehasonlítás alapú algoritmussal határozzuk meg, akkor ennek a problémának az időbonyolultsága legjobb, legrosszabb és átlagos esetben is 


<mml:math><mml:mi>n</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn><mml:mo>.</mml:mo></mml:math>
A feladat megoldására 


<mml:math><mml:mtext> MAX </mml:mtext></mml:math>
abszolút optimális algoritmus. </h:i>
</h:p>
<h:p>Érdemes megemlíteni, hogy a pontos bonyolultságot csak nagyon ritkán tudjuk meghatározni. </h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4504714">1.7.2. Leszámlálás </h:a></h:font></h:strong>

<h:p>A leszámlálási módszereket leggyakrabban az átlagos jellemzők meghatározására használjuk. Minden 


<mml:math><mml:mi>I</mml:mi></mml:math>
bemenethez hozzárendelünk egy 


<mml:math><mml:mi>α</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>I</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
jellemző adatot, majd leszámláljuk, hogy mennyi lesz ezen jellemző adatok összege az összes lehetséges bemenetre nézve. </h:p>
<h:p>Tekintsük például azt a feladatot, hogy az 


<mml:math><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mi>n</mml:mi></mml:math>
számok különböző permutációit kell rendeznünk úgy, hogy a permutációban szomszédos elemek összehasonlítása (és egyúttal cseréje) a felhasználható művelet. Minden 


<mml:math><mml:mi>I</mml:mi></mml:math>
permutációhoz 


<mml:math><mml:mi>α</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>I</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
-ként hozzárendeljük a benne lévő 
<h:i>inverziók</h:i>
 számát <h:a name="id4504813"/>
 és leszámláljuk, hogy összesen hány inverzió van a permutációkban. <h:a name="id4504822"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>1.10. 
<h:font color="#FF33FF" size="">tétel</h:font>. </h:b>
</h:font>
<h:i>Ha 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
egy különböző elemekből álló sorozatot a szomszédos elemek összehasonlításával rendező algoritmus, akkor 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>N</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≥</mml:mo><mml:apply><mml:divide/><mml:ci><mml:mi>n</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci><mml:ci><mml:mn>4</mml:mn></mml:ci></mml:apply><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4504866">(1.67)</h:a></h:td></h:tr></h:table></h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 Ha 


<mml:math><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo></mml:math>
akkor igaz az állítás. Ha 


<mml:math><mml:mi>n</mml:mi><mml:mo>≥</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo></mml:math>
akkor rendeljük minden permutációhoz az 
<h:font color="#3300FF" size=""><h:b><h:i>inverzét,</h:i></h:b></h:font><h:a name="id4504965"/>
 azaz azt a sorozatot, amelyben az elemek fordított sorrendben következnek. </h:p>
<h:p>Mivel tetszőleges 


<mml:math><mml:mi>i</mml:mi></mml:math>
és 


<mml:math><mml:mi>j</mml:mi></mml:math>
indexre 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>≤</mml:mo><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi><mml:mo>≤</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
igaz, hogy az 


<mml:math><mml:mi>i</mml:mi></mml:math>-edik és a 


<mml:math><mml:mi>j</mml:mi></mml:math>edik elem az egymáshoz rendelt permutációk közül 
<h:i>pontosan</h:i>
 az egyikben van inverzióban, ezért minden párra igaz, hogy bennük együttesen annyi inverzió van, ahány pár (külön-külön), azaz 


<mml:math><mml:mi>n</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>/</mml:mo><mml:mn>2</mml:mn><mml:mo>.</mml:mo></mml:math>
Ezért 


<mml:math><mml:mi>n</mml:mi></mml:math>
elem permutációiban összesen
<h:p><h:br/><h:center><h:img src="pics/p1-k57.gif"/></h:center></h:p>
 inverzió van. Ha ezt a számot elosztjuk 


<mml:math><mml:mi>n</mml:mi></mml:math>
elem permutációinak számával, megkapjuk a kívánt alsó korlátot.  <h:img src="pics/fkocka.gif"/><h:br/><h:br/></h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4505094">1.7.3. Döntési fák </h:a></h:font></h:strong>

<h:p>Egy 
<h:font color="#3300FF" size=""><h:b><h:i>döntési fa</h:i></h:b></h:font><h:a name="id4505111"/>
 segítségével modellezhetjük az összes döntést, amelyet egy determinisztikus algoritmus végezhet. Egy adott bemenethez tartozó döntések megadnak egy irányított utat a döntési fa gyökerétől valamelyik leveléig, amely megadja az algoritmusnak az adott bemenethez tartozó kimenetét. A döntési fa csak azokat a csúcsokat tartalmazza, amelyekbe legalább egy bemenet esetében eljutunk. A belső csúcsok megfelelnek az algoritmus döntéseinek és az ahhoz tartozó alapműveleteknek (mint például két elem összehasonlítása vagy egy mátrix két elemének összeszorzása). Mivel minden belső csúcshoz legalább egy elvégzendő művelet tartozik, ezért a fa magassága alsó korlát 


<mml:math><mml:mi>N</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>-ra. </h:p>
<h:p>Hasonlóképpen a levelek 
<h:font color="#3300FF" size=""><h:b><h:i>átlagos szintje</h:i></h:b></h:font><h:a name="id4505172"/>
 alsó korlát 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>-ra. </h:p>
<h:p>Bizonyítás nélkül idézünk néhány közismert eredményt, amelyek például döntési fák segítségével igazolhatók. <h:a name="id4505207"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>1.11. 
<h:font color="#FF33FF" size="">tétel</h:font>
(alsó korlát a bináris keresés futási idejére). </h:b>
</h:font>
<h:i>Ha 


<mml:math><mml:mtext> BINÁRISAN-KERES </mml:mtext></mml:math>
a rendezett sorozatban binárisan kereső algoritmus, akkor minden pozitív n számra 
<h:p><h:br/><h:center><h:img src="pics/p1-k58a.gif"/></h:center></h:p></h:i>
</h:p>
<h:p>
<h:a name="id4505251"/>
</h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>1.12. 
<h:font color="#FF33FF" size="">tétel</h:font>
(alsó korlát az összehasonlítás alapú rendező algoritmusok futási idejére). </h:b>
</h:font>
<h:i>Ha 


<mml:math><mml:mtext> ÖSSZEHASONL </mml:mtext></mml:math>
összehasonlítás alapú rendező algoritmus, akkor 
<h:p><h:br/><h:center><h:img src="pics/p1-k58b.gif"/></h:center></h:p></h:i>
</h:p>
  

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4505296">1.7.4. Tanácsadói érvelés </h:a></h:font></h:strong>

<h:p>Ennél a módszernél úgy jutunk alsó korláthoz, hogy dinamikusan olyan bemenetet állítunk elő, amely az algoritmust lehetőleg nagyszámú művelet elvégzésére kényszeríti. </h:p>
<h:p>Ez a módszer olyan játékhoz hasonlít, amelyben egy tanácsadónak feltett kérdésekkel juthatunk információhoz, és a tanácsadó arra törekszik, hogy a válaszaival minél kevesebb információt adjon. </h:p>
<h:p>A 


<mml:math><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
futási idő alsó becsléséhez úgy jutunk, hogy összeszámoljuk, hány műveletet kellett az adott bemenetre a vizsgált algoritmusnak elvégeznie. </h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4505355">1.7.5. Információelméleti érvelés </h:a></h:font></h:strong>

<h:p>Ez a módszer azon alapul, hogy az egy művelettel nyerhető információra felső, a feladat megoldásához szükséges információ mennyiségére pedig alsó korlátot adunk. Ha például egy összehasonlítás lehetséges eredményei IGAZ és HAMIS, akkor 


<mml:math><mml:mi>n</mml:mi></mml:math>
összehasonlítással legfeljebb 


<mml:math><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msup></mml:math>
lehetőséget tudunk megkülönböztetni. </h:p>
<h:p>Mivel egy 


<mml:math><mml:mi>n</mml:mi></mml:math>
elemet rendező, összehasonlítás alapú algoritmusnak 


<mml:math><mml:mi>n</mml:mi><mml:mo>!</mml:mo></mml:math>
lehetőséget kell megkülönböztetnie, ezzel a módszerrel is bizonyíthatjuk a <h:a href="#id4505251">1.12</h:a>. tételt. </h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4505421">1.7.6. Gráfelméleti érvelés </h:a></h:font></h:strong>

<h:p>Mivel a hálózatokat rendszerint gráfokkal modellezzük, ezért természetes, hogy az alsó korlátok bizonyításában is gyakran szerepelnek gráfok. </h:p>
<h:p>Erre a későbbiek során több példát is mutatunk. </h:p>


<h:br/><h:center><h:strong><h:font face="Arial" size="+2" color="#3300FF"><h:a name="id4505445">1.8. Anomália </h:a></h:font></h:strong></h:center>

<h:p>A számítógépes rendszerekben 
<h:i>anomáliának</h:i>
 nevezzük azt a jelenséget, amikor egy feladat megoldásához több erőforrást felhasználva rosszabb eredményt kapunk. </h:p>
<h:p>Négy konkrét példát említünk. Az egyik a virtuális memória lapjait párhuzamosan használó FIFO (First In – First Out) <h:a name="id4505473"/>
 lapcserélési algoritmussal, a másik a processzorok ütemezésére használt 


<mml:math><mml:mtext> Listásan-ütemez </mml:mtext></mml:math>
algoritmussal, a harmadik az átfedéses memóriájú számítógépekben folyó párhuzamos programvégrehajtással, végül a negyedik a 


<mml:math><mml:mtext> Párh-korlátoz-szétválaszt </mml:mtext></mml:math>
optimalizációs algoritmussal kapcsolatos. </h:p>
<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4505502">1.8.1. Lapcsere </h:a></h:font></h:strong>

<h:p>Legyenek 


<mml:math><mml:mi>m</mml:mi><mml:mo>,</mml:mo><mml:mi>M</mml:mi><mml:mo>,</mml:mo><mml:mi>n</mml:mi></mml:math>
és 


<mml:math><mml:mi>p</mml:mi></mml:math>
pozitív egészek 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>≤</mml:mo><mml:mi>m</mml:mi><mml:mo>≤</mml:mo><mml:mi>M</mml:mi><mml:mo>≤</mml:mo><mml:mi>n</mml:mi><mml:mo>&lt;</mml:mo><mml:mo>∞</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math><mml:math><mml:mi>k</mml:mi></mml:math>
nemnegatív egész, 


<mml:math><mml:mi>A</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>}</mml:mo></mml:mrow></mml:math>
egy véges ábécé. 


<mml:math><mml:msup><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msup></mml:math>
az 


<mml:math><mml:mi>A</mml:mi></mml:math>
feletti, 


<mml:math><mml:mi>k</mml:mi></mml:math>
hosszúságú, 


<mml:math><mml:msup><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mo>*</mml:mo></mml:mrow></mml:msup></mml:math>
pedig az 


<mml:math><mml:mi>A</mml:mi></mml:math>
feletti véges szavak halmaza. </h:p>
<h:p>Legyen 


<mml:math><mml:mi>m</mml:mi></mml:math>
egy 
<h:i>kis</h:i>
, 


<mml:math><mml:mi>M</mml:mi></mml:math>
pedig egy 
<h:i>nagy</h:i>
 számítógép fizikai memóriájában lévő lapkeretek száma, 


<mml:math><mml:mi>n</mml:mi></mml:math>
a háttérmemóriában lévő lapok száma (mindkét számítógépben), 


<mml:math><mml:mi>A</mml:mi></mml:math>
a lapok halmaza. </h:p>
<h:p>A lapcserélési algoritmusokat automatákként kezeljük, melyekre 


<mml:math><mml:mi>m</mml:mi></mml:math>
és 


<mml:math><mml:mi>M</mml:mi></mml:math>
a memória mérete, 


<mml:math><mml:mi>A</mml:mi></mml:math>
a bemenő jelek halmaza, 


<mml:math><mml:mi>Y</mml:mi><mml:mo>=</mml:mo><mml:mi>A</mml:mi><mml:mo>∪</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mi>ε</mml:mi></mml:mrow><mml:mo>}</mml:mo></mml:mrow></mml:math>
a kimenő jelek halmaza. Ezek az automaták a bemenő jelek 


<mml:math><mml:mi>R</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
vagy 


<mml:math><mml:mi>R</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
sorozatát dolgozzák fel. Az 


<mml:math><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>t</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
memóriaállapot a 


<mml:math><mml:mi>t</mml:mi></mml:math>
időpontban (azaz az 


<mml:math><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi>t</mml:mi></mml:mrow></mml:msub></mml:math>
bemenő jel feldolgozása után) a memóriában tárolt bemenő jelek halmaza. A lapcserélési algoritmusok 


<mml:math><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:mrow/><mml:mo>}</mml:mo></mml:mrow></mml:math>
üres memóriával kezdik a feldolgozást. Egy konkrét 


<mml:math><mml:mi>P</mml:mi></mml:math>
lapcserélési algoritmust a 


<mml:math><mml:mi>P</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>Q</mml:mi></mml:mrow><mml:mrow><mml:mi>P</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>g</mml:mi></mml:mrow><mml:mrow><mml:mi>P</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
hármassal definiálunk, ahol 


<mml:math><mml:msub><mml:mrow><mml:mi>Q</mml:mi></mml:mrow><mml:mrow><mml:mi>P</mml:mi></mml:mrow></mml:msub></mml:math>
a vezérlő jelek halmaza, 


<mml:math><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>∈</mml:mo><mml:msub><mml:mrow><mml:mi>Q</mml:mi></mml:mrow><mml:mrow><mml:mi>P</mml:mi></mml:mrow></mml:msub></mml:math>
a kezdeti vezérlő jel, 


<mml:math><mml:msub><mml:mrow><mml:mi>g</mml:mi></mml:mrow><mml:mrow><mml:mi>P</mml:mi></mml:mrow></mml:msub></mml:math>
az állapot-átmenet függvény, 


<mml:math><mml:mi>S</mml:mi><mml:mo>′</mml:mo></mml:math>
az új memóriaállapot, 


<mml:math><mml:mi>q</mml:mi><mml:mo>′</mml:mo></mml:math>
az új állapot és 


<mml:math><mml:mi>y</mml:mi></mml:math>
a kimenő jel, 


<mml:math><mml:mi>S</mml:mi></mml:math>
a régi memóriaállapot, 


<mml:math><mml:mi>q</mml:mi></mml:math>
a régi vezérlőállapot és 


<mml:math><mml:mi>x</mml:mi></mml:math>
a bemenő jel. </h:p>
<h:p>Az F = FIFO (First In First Out) algoritmus definíciója: 


<mml:math><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow/><mml:mo>)</mml:mo></mml:mrow></mml:math>
és 
<h:p><h:br/><h:center><h:img src="pics/p1-k60.gif"/></h:center></h:p>
 ahol 


<mml:math><mml:mi>q</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>y</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>y</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>y</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mi>q</mml:mi><mml:mo>′</mml:mo><mml:mo>=</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>y</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>y</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>y</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mi>x</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
és 


<mml:math><mml:mi>q</mml:mi><mml:mo>′</mml:mo><mml:mo>′</mml:mo><mml:mo>=</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>y</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>y</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>y</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mi>x</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
A laphibáknak (a memóriaállapot változásainak) a számát 


<mml:math><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>P</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>R</mml:mi><mml:mo>,</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
-vel jelöljük. 
<h:i>Anomáliának</h:i><h:a name="id4506281"/><h:a name="id4506286"/>
 nevezzük azt a jelenséget, amikor 


<mml:math><mml:mi>M</mml:mi><mml:mo>&gt;</mml:mo><mml:mi>m</mml:mi></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>P</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>R</mml:mi><mml:mo>,</mml:mo><mml:mi>M</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>&gt;</mml:mo><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>P</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>R</mml:mi><mml:mo>,</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Ekkor az 


<mml:math><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>P</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>R</mml:mi><mml:mo>,</mml:mo><mml:mi>M</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>/</mml:mo><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>P</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>R</mml:mi><mml:mo>,</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
hányados az 
<h:font color="#3300FF" size=""><h:b><h:i>anomália mértéke.</h:i></h:b></h:font><h:a name="id4506407"/>
 A 


<mml:math><mml:mi>P</mml:mi></mml:math>
algoritmus hatékonyságát az 


<mml:math><mml:msub><mml:mrow><mml:mi>E</mml:mi></mml:mrow><mml:mrow><mml:mi>P</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>R</mml:mi><mml:mo>,</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
<h:font color="#3300FF" size=""><h:b><h:i>lapozási sebességgel</h:i></h:b></h:font><h:a name="id4506452"/>
 jellemezzük, amit 


<mml:math><mml:mi>R</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
véges hivatkozási sorozatra az 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>E</mml:mi></mml:mrow><mml:mrow><mml:mi>P</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>R</mml:mi><mml:mo>,</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:apply><mml:divide/><mml:ci><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>P</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>R</mml:mi><mml:mo>,</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci><mml:ci><mml:mi>p</mml:mi></mml:ci></mml:apply><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4506515">(1.73)</h:a></h:td></h:tr></h:table><mml:math><mml:mi>R</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
végtelen hivatkozási sorozatra pedig a 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>E</mml:mi></mml:mrow><mml:mrow><mml:mi>P</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>R</mml:mi><mml:mo>,</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mo>liminf</mml:mo></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>→</mml:mo><mml:mo>∞</mml:mo></mml:mrow></mml:msub><mml:apply><mml:divide/><mml:ci><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>P</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>R</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci><mml:ci><mml:mi>k</mml:mi></mml:ci></mml:apply></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4506617">(1.74)</h:a></h:td></h:tr></h:table>
módon definiálunk, ahol 


<mml:math><mml:msub><mml:mrow><mml:mi>R</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Legyen 


<mml:math><mml:mn>1</mml:mn><mml:mo>≤</mml:mo><mml:mi>m</mml:mi><mml:mo>&lt;</mml:mo><mml:mi>n</mml:mi></mml:math>
és 


<mml:math><mml:mi>C</mml:mi><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mo>*</mml:mo></mml:mrow></mml:msup></mml:math>
egy végtelen ciklikus hivatkozási sorozat. Ekkor 


<mml:math><mml:msub><mml:mrow><mml:mi>E</mml:mi></mml:mrow><mml:mrow><mml:mtext> FIFO </mml:mtext></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>C</mml:mi><mml:mo>,</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>.</mml:mo></mml:math>
Ha végrehajtjuk a 


<mml:math><mml:mi>R</mml:mi></mml:math>
= (1,2,3,4,1,2,5,1,2,3,4,5) hivatkozási sorozatot, akkor 


<mml:math><mml:mi>m</mml:mi><mml:mo>=</mml:mo><mml:mn>3</mml:mn></mml:math>
esetében 9, 


<mml:math><mml:mi>m</mml:mi><mml:mo>=</mml:mo><mml:mn>4</mml:mn></mml:math>
esetében pedig 10 laphibát kapunk, így 


<mml:math><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mtext> FIFO </mml:mtext></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>R</mml:mi><mml:mo>,</mml:mo><mml:mi>M</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>/</mml:mo><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mtext> FIFO </mml:mtext></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>R</mml:mi><mml:mo>,</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>10</mml:mn><mml:mo>/</mml:mo><mml:mn>9</mml:mn><mml:mo>.</mml:mo></mml:math>
Bélády, Nelson és Shedler a következő szükséges és elégséges feltételt adták az anomália létezésére. <h:a name="id4506924"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>1.13. 
<h:font color="#FF33FF" size="">tétel</h:font>. </h:b>
</h:font>
<h:i>Akkor és csak akkor létezik olyan hivatkozási sorozat, amelyre a 


<mml:math><mml:mtext> FIFO </mml:mtext></mml:math>
lapcserélési algoritmus anomáliát okoz, ha 


<mml:math><mml:mi>m</mml:mi><mml:mo>&lt;</mml:mo><mml:mi>M</mml:mi><mml:mo>&lt;</mml:mo><mml:mn>2</mml:mn><mml:mi>m</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn><mml:mo>.</mml:mo></mml:math></h:i>
</h:p>
<h:p>Az anomália mértékével kapcsolatban pedig a következőt bizonyították. <h:a name="id4506986"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>1.14. 
<h:font color="#FF33FF" size="">tétel</h:font>. </h:b>
</h:font>
<h:i>Ha 


<mml:math><mml:mi>m</mml:mi><mml:mo>&lt;</mml:mo><mml:mi>M</mml:mi><mml:mo>&lt;</mml:mo><mml:mn>2</mml:mn><mml:mi>m</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:math>
, akkor tetszőleges 


<mml:math><mml:mi>ε</mml:mi><mml:mo>&gt;</mml:mo><mml:mn>0</mml:mn></mml:math>
számhoz létezik olyan 


<mml:math><mml:mi>R</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
hivatkozási sorozat, amelyre 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:apply><mml:divide/><mml:ci><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mtext> FIFO </mml:mtext></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>R</mml:mi><mml:mo>,</mml:mo><mml:mi>M</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci><mml:ci><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mtext> FIFO </mml:mtext></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>R</mml:mi><mml:mo>,</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci></mml:apply><mml:mo>&gt;</mml:mo><mml:mn>2</mml:mn><mml:mo>−</mml:mo><mml:mi>ε</mml:mi><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4507103">(1.75)</h:a></h:td></h:tr></h:table></h:i>
</h:p>
<h:p>Bélády, Nelson és Shedler a következőt sejtették. <h:a name="id4507169"/><h:a name="id4507175"/><h:a name="id4507180"/><h:a name="id4507185"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>1.15. 
<h:font color="#FF33FF" size="">sejtés</h:font>. </h:b>
</h:font>
<h:i>Tetszőleges 


<mml:math><mml:mi>R</mml:mi></mml:math>
hivatkozási sorozatra és 


<mml:math><mml:mi>M</mml:mi><mml:mo>&gt;</mml:mo><mml:mi>m</mml:mi><mml:mo>≥</mml:mo><mml:mn>1</mml:mn></mml:math>
memóriaméretekre 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:apply><mml:divide/><mml:ci><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mtext> FIFO </mml:mtext></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>R</mml:mi><mml:mo>,</mml:mo><mml:mi>M</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci><mml:ci><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mtext> FIFO </mml:mtext></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>R</mml:mi><mml:mo>,</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci></mml:apply><mml:mo>≤</mml:mo><mml:mn>2</mml:mn><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4507240">(1.76)</h:a></h:td></h:tr></h:table></h:i>
</h:p>
<h:p>Ezt a sejtést cáfolja Fornai Péter <h:a name="id4507301"/>
 és Iványi Antal <h:a name="id4507308"/>
 következő tétele, amely szerint az anomália mértéke tetszőlegesen nagy lehet. <h:a name="id4507318"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>1.16. 
<h:font color="#FF33FF" size="">tétel</h:font>. </h:b>
</h:font>
<h:i>Tetszőlegesen nagy 


<mml:math><mml:mi>L</mml:mi></mml:math>
számhoz megadhatók olyan 


<mml:math><mml:mi>m</mml:mi><mml:mo>,</mml:mo><mml:mi>M</mml:mi></mml:math>
és 


<mml:math><mml:mi>R</mml:mi></mml:math>
paraméterek, melyekre 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:apply><mml:divide/><mml:ci><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mtext> FIFO </mml:mtext></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>R</mml:mi><mml:mo>,</mml:mo><mml:mi>M</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci><mml:ci><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mtext> FIFO </mml:mtext></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>R</mml:mi><mml:mo>,</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci></mml:apply><mml:mo>&gt;</mml:mo><mml:mi>L</mml:mi><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4507374">(1.77)</h:a></h:td></h:tr></h:table></h:i>
</h:p>
  

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4507433">1.8.2. Ütemezés </h:a></h:font></h:strong>

<h:p>Tegyük fel, hogy 


<mml:math><mml:mi>n</mml:mi></mml:math>
programot akarunk végrehajtani egy 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzoros láncon. </h:p>
<h:p>A végrehajtásnak figyelembe kell vennie a programok közötti megelőzési relációt. </h:p>
<h:p>A processzorok mohók, és a végrehajtás egy adott 


<mml:math><mml:mi>L</mml:mi></mml:math>
lista szerint történik. </h:p>
<h:p>E. G. Coffman jr. <h:a name="id4507480"/>
 1976-ban leírta, hogy a 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzorszám csökkenése, az egyes programok végrehajtásához szükséges lépések 


<mml:math><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
számának csökkenése, a megelőzési korlátozások enyhítése és a lista változtatása külön is anomáliát okozhat. </h:p>
<h:p>Legyen a programok végrehajtásának futási ideje 


<mml:math><mml:mi>τ</mml:mi></mml:math>
, a megelőzési reláció 


<mml:math><mml:mo>&lt;</mml:mo></mml:math>
, a lista 


<mml:math><mml:mi>L</mml:mi></mml:math>
és a programok közös listás végrehajtásához szükséges lépések száma 


<mml:math><mml:mi>p</mml:mi></mml:math>
azonos processzorból álló láncon 


<mml:math><mml:mi>ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi>L</mml:mi><mml:mo>,</mml:mo><mml:mo>&lt;</mml:mo><mml:mo>,</mml:mo><mml:mi>τ</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Az 


<mml:math><mml:msup><mml:mrow><mml:mi>L</mml:mi></mml:mrow><mml:mrow><mml:mo>′</mml:mo></mml:mrow></mml:msup></mml:math>
lista, 


<mml:math><mml:msup><mml:mrow><mml:mo>&lt;</mml:mo></mml:mrow><mml:mrow><mml:mo>′</mml:mo></mml:mrow></mml:msup><mml:mo>⊆</mml:mo><mml:mo>&lt;</mml:mo></mml:math>
megelőzési reláció, 


<mml:math><mml:msup><mml:mrow><mml:mi>τ</mml:mi></mml:mrow><mml:mrow><mml:mo>′</mml:mo></mml:mrow></mml:msup><mml:mo>≤</mml:mo><mml:mi>τ</mml:mi></mml:math>
futási idő vektor és 


<mml:math><mml:msup><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mrow><mml:mo>′</mml:mo></mml:mrow></mml:msup><mml:mo>≥</mml:mo><mml:mi>p</mml:mi></mml:math>
processzorszám esetén a futási idő legyen 


<mml:math><mml:msup><mml:mrow><mml:mi>ω</mml:mi></mml:mrow><mml:mrow><mml:mo>′</mml:mo></mml:mrow></mml:msup><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>′</mml:mo><mml:mo>,</mml:mo><mml:mi>L</mml:mi><mml:mo>′</mml:mo><mml:mo>,</mml:mo><mml:mo>&lt;</mml:mo><mml:mo>′</mml:mo><mml:mo>,</mml:mo><mml:mi>τ</mml:mi><mml:mo>′</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Az anomália mértékét ezúttal a gyorsítással jellemezzük. <h:a name="id4507682"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>1.17. 
<h:font color="#FF33FF" size="">tétel</h:font>
(ütemezési korlát). </h:b>
</h:font>
<h:i>Az előbbi feltételek esetében 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mn>0</mml:mn><mml:mo>≤</mml:mo><mml:apply><mml:divide/><mml:ci><mml:msup><mml:mrow><mml:mi>ω</mml:mi></mml:mrow><mml:mrow><mml:mo>′</mml:mo></mml:mrow></mml:msup></mml:ci><mml:ci><mml:mi>ω</mml:mi></mml:ci></mml:apply><mml:mo>≤</mml:mo><mml:mn>1</mml:mn><mml:mo>+</mml:mo><mml:apply><mml:divide/><mml:ci><mml:mi>m</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:ci><mml:ci><mml:msup><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mo>′</mml:mo></mml:mrow></mml:msup></mml:ci></mml:apply><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4507716">(1.78)</h:a></h:td></h:tr></h:table></h:i>
</h:p>
<h:p>A korlát pontosságát jellemzi a következő állítás. <h:a name="id4507774"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>1.18. 
<h:font color="#FF33FF" size="">tétel</h:font>
(ütemezési korlát élessége). </h:b>
</h:font>
<h:i>A relatív sebességre adott korlát az 


<mml:math><mml:mi>m</mml:mi><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo>,</mml:mo><mml:mo>&lt;</mml:mo></mml:math>
és 


<mml:math><mml:mi>L</mml:mi></mml:math>
paraméterek mindegyikének változására nézve (külön-külön is) aszimptotikusan éles. </h:i>
</h:p>
  

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4507828">1.8.3. Párhuzamos feldolgozás átfedéses memóriával </h:a></h:font></h:strong>

<h:p>Népszerű formában fogalmazzuk meg az átfedéses memóriájú számítógépek működését modellező párhuzamos algoritmust. A 


<mml:math><mml:msub><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>r</mml:mi></mml:mrow></mml:msub></mml:math>
törpék 


<mml:math><mml:mi>n</mml:mi></mml:math>
különböző fajtájú gombócot főznek. Ezeket az egyszerűség kedvéért az 1, 2, 


<mml:math><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mi>n</mml:mi></mml:math>
számokkal jelöljük. Mindegyik törpe végtelen gombócsorozatot állít elő. </h:p>
<h:p>Ezeket a gombócokat 


<mml:math><mml:msub><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub></mml:math>
óriások eszik meg – ahol az 


<mml:math><mml:mi>f</mml:mi></mml:math>
paraméter azt mutatja, hogy az adott óriás az egyes gombócfajtákból legfeljebb hányat ehet meg egy falatban. </h:p>
<h:p>Az 


<mml:math><mml:msub><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub></mml:math>
óriás a következőképpen eszik. Első falatához a 


<mml:math><mml:msub><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:math>
törpe sorozatának elejéről a lehető legtöbb gombócot kiválasztja (de egy-egy fajtából legfeljebb 


<mml:math><mml:mi>f</mml:mi></mml:math>
darabot). Ezt a falatot még a 


<mml:math><mml:msub><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>r</mml:mi></mml:mrow></mml:msub></mml:math>
törpék sorozatának elejéről kiegészíti – az 


<mml:math><mml:mi>f</mml:mi></mml:math>
korlátot betartva. </h:p>
<h:p>A további falatokat hasonlóan állítja össze. </h:p>
<h:p>Legyen 


<mml:math><mml:msub><mml:mrow><mml:mi>h</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>h</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo></mml:math>
valószínűségi változók sorozata, melyben a 


<mml:math><mml:msub><mml:mrow><mml:mi>h</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
elem az óriás 


<mml:math><mml:mi>i</mml:mi></mml:math>
-edik harapásában lévő gombócok száma. Ekkor az 


<mml:math><mml:msub><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub></mml:math>
óriás 


<mml:math><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub></mml:math>
<h:font color="#3300FF" size=""><h:b><h:i>gombócevési sebességét</h:i></h:b></h:font><h:a name="id4508123"/>
 az 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mo>liminf</mml:mo></mml:mrow><mml:mrow><mml:mi>t</mml:mi><mml:mo>→</mml:mo><mml:mo>∞</mml:mo></mml:mrow></mml:msub><mml:mi>M</mml:mi><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:msubsup><mml:mrow><mml:mo>∑</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>t</mml:mi></mml:mrow></mml:msubsup><mml:msub><mml:mrow><mml:mi>h</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci><mml:ci><mml:mi>t</mml:mi></mml:ci></mml:apply></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4508136">(1.79)</h:a></h:td></h:tr></h:table>
határértékkel definiáljuk. </h:p>
<h:p>Könnyen belátható, hogy ha 


<mml:math><mml:mn>1</mml:mn><mml:mo>≤</mml:mo><mml:mi>f</mml:mi><mml:mo>≤</mml:mo><mml:mi>g</mml:mi></mml:math>
, akkor a gombócevési sebességekre fennáll 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>f</mml:mi><mml:mo>≤</mml:mo><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub><mml:mo>≤</mml:mo><mml:mi>f</mml:mi><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>g</mml:mi><mml:mo>≤</mml:mo><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>g</mml:mi></mml:mrow></mml:msub><mml:mo>≤</mml:mo><mml:mi>g</mml:mi><mml:mi>n</mml:mi><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4508240">(1.80)</h:a></h:td></h:tr></h:table>
a két óriás relatív gombócevési sebességére pedig 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:apply><mml:divide/><mml:ci><mml:mi>f</mml:mi></mml:ci><mml:ci><mml:mi>g</mml:mi><mml:mi>n</mml:mi></mml:ci></mml:apply><mml:mo>≤</mml:mo><mml:apply><mml:divide/><mml:ci><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub></mml:ci><mml:ci><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>g</mml:mi></mml:mrow></mml:msub></mml:ci></mml:apply><mml:mo>≤</mml:mo><mml:apply><mml:divide/><mml:ci><mml:mi>f</mml:mi><mml:mi>n</mml:mi></mml:ci><mml:ci><mml:mi>g</mml:mi></mml:ci></mml:apply><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4508295">(1.81)</h:a></h:td></h:tr></h:table>
Most megmutatjuk, hogy a 
<h:i>kis óriás</h:i>
 gombócevési sebessége akárhányszor nagyobb lehet, mint a 
<h:i>nagy óriásé</h:i>
. <h:a name="id4508357"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>1.19. 
<h:font color="#FF33FF" size="">tétel</h:font>. </h:b>
</h:font>
<h:i>Ha 


<mml:math><mml:mi>r</mml:mi><mml:mo>≥</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>n</mml:mi><mml:mo>≥</mml:mo><mml:mn>3</mml:mn><mml:mo>,</mml:mo><mml:mi>g</mml:mi><mml:mo>&gt;</mml:mo><mml:mi>f</mml:mi><mml:mo>≥</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo></mml:math>
akkor léteznek olyan gombócsorozatok, amelyekre egyrészt 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:apply><mml:divide/><mml:ci><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>g</mml:mi></mml:mrow></mml:msub></mml:ci><mml:ci><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub></mml:ci></mml:apply><mml:mo>=</mml:mo><mml:apply><mml:divide/><mml:ci><mml:mi>g</mml:mi></mml:ci><mml:ci><mml:mi>f</mml:mi><mml:mi>n</mml:mi></mml:ci></mml:apply><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4508426">(1.82)</h:a></h:td></h:tr></h:table>
másrészt 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:apply><mml:divide/><mml:ci><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>g</mml:mi></mml:mrow></mml:msub></mml:ci><mml:ci><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub></mml:ci></mml:apply><mml:mo>=</mml:mo><mml:apply><mml:divide/><mml:ci><mml:mi>g</mml:mi><mml:mi>n</mml:mi></mml:ci><mml:ci><mml:mi>f</mml:mi></mml:ci></mml:apply><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4508472">(1.83)</h:a></h:td></h:tr></h:table></h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 A természetes korlátokat megadó (<h:a href="#id4508295">1.81</h:a>) egyenlőtlenségben szereplő alsó korlát élességének belátásához tekintsük az 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msup><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msup><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn><mml:mi>f</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup><mml:msup><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo>*</mml:mo></mml:mrow></mml:msup></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4508544">(1.84)</h:a></h:td></h:tr></h:table>
és 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msup><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>f</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup><mml:msup><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>23</mml:mn><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mo>*</mml:mo></mml:mrow></mml:msup></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4508584">(1.85)</h:a></h:td></h:tr></h:table>
sorozatokat. </h:p>
<h:p>A felső korlát élességét a 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msup><mml:mrow><mml:mn>12</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn><mml:mi>f</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup><mml:msup><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo>*</mml:mo></mml:mrow></mml:msup></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4508636">(1.86)</h:a></h:td></h:tr></h:table>
és 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msup><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>f</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup><mml:msup><mml:mrow><mml:mn>3</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn><mml:mi>f</mml:mi></mml:mrow></mml:msup><mml:msup><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msup><mml:msup><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>23</mml:mn><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mo>*</mml:mo></mml:mrow></mml:msup></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4508669">(1.87)</h:a></h:td></h:tr></h:table>
sorozatok,,megevésével” láthatjuk be.  <h:img src="pics/fkocka.gif"/><h:br/><h:br/>Az alsó korlát élessége azt fejezi ki, hogy a kis óriás ehet sokkal kevesebbet – ami természetes. Az 


<mml:math><mml:mi>n</mml:mi></mml:math>
növelésével tetszőlegesen naggyá tehető felső korlát élessége azonban 
<h:i>erős anomália.</h:i></h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4508750">1.8.4. Párhuzamos korlátozás és szétválasztás </h:a></h:font></h:strong>

<h:p>A 
<h:i>korlátozás és szétválasztás</h:i><h:a name="id4508765"/>
 gyakran alkalmazott optimalizációs módszer. </h:p>
<h:p>A módszer alkalmazása során olyan 


<mml:math><mml:mi>x</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
vektort keresünk, amely minimalizál egy 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
függvényt – figyelembe véve korlátozások 


<mml:math><mml:mi>K</mml:mi></mml:math>
halmazát. A korlátozások lehetnek explicitek vagy implicitek. Az implicit korlátozások az 


<mml:math><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
értékek kapcsolatát jellemzik, például 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msubsup><mml:mrow><mml:mo>∑</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msubsup><mml:msub><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>≤</mml:mo><mml:mi>b</mml:mi><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4508874">(1.88)</h:a></h:td></h:tr></h:table><h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:msubsup><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msubsup><mml:mo>−</mml:mo><mml:msub><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msub><mml:msubsup><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:mn>6</mml:mn><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4508915">(1.89)</h:a></h:td></h:tr></h:table>
Az explicit korlátozások az 


<mml:math><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
értékekre adnak korlátokat, például 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>∈</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>}</mml:mo></mml:mrow><mml:mtext/><mml:mtext/><mml:mtext/><mml:mtext/><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>≥</mml:mo><mml:mn>0</mml:mn><mml:mtext/><mml:mtext/><mml:mtext/><mml:mtext/><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4509010">(1.90)</h:a></h:td></h:tr></h:table>
Az explicit korlátozásokat kielégítő vektorok alkotják a 
<h:i>megoldási teret</h:i>
. </h:p>
<h:p>Ezek a vektorok rendszerint egy fát alkotnak, melyeket 
<h:font color="#3300FF" size=""><h:b><h:i>megoldási fának</h:i></h:b></h:font><h:a name="id4509080"/>
 nevezünk. A fa gyökerétől bizonyos levelekhez vezető utak a megoldási tér egy elemét határozzák meg. Az ilyen csúcsokat 
<h:font color="#3300FF" size=""><h:b><h:i>megengedett megoldás csúcsnak</h:i></h:b></h:font><h:a name="id4509099"/>
 nevezzük. Egy ilyen csúcs 
<h:font color="#3300FF" size=""><h:b><h:i>költsége</h:i></h:b></h:font><h:a name="id4509114"/>
 az 


<mml:math><mml:mi>f</mml:mi></mml:math>
függvény értéke az adott csúcsban. Az optimalizálás célja a 
<h:font color="#3300FF" size=""><h:b><h:i>minimális költségű</h:i></h:b></h:font><h:a name="id4509137"/>
 csúcs meghatározása. </h:p>
<h:p>Az állapotfa minden 


<mml:math><mml:mi>N</mml:mi></mml:math>
csúcsához hozzárendeljük az 


<mml:math display="block"><mml:mo>min</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>Q</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>|</mml:mo><mml:mi>Q</mml:mi><mml:mtext> megengedett megoldás az </mml:mtext><mml:mi>N</mml:mi><mml:mtext> csúcshoz tartozó részfában </mml:mtext></mml:mrow><mml:mo>}</mml:mo></mml:mrow></mml:math>
értéket, melyet 


<mml:math><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
-nel jelölünk 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mtext>ha nincs ilyen </mml:mtext><mml:mi>Q</mml:mi><mml:mo>,</mml:mo><mml:mtext> akkor </mml:mtext><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mo>∞</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
A továbbiakban az LCBB (
<h:b>L</h:b>east-
<h:b>C</h:b>ost 
<h:b>B</h:b>ranch-and-
<h:b>B</h:b>ound) korlátozó-szétválasztó módszerrel foglalkozunk, melyben a következő tulajdonságokkal rendelkező 


<mml:math><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow/><mml:mo>)</mml:mo></mml:mrow></mml:math>
heurisztikus függvényt alkalmazzuk: 1. 


<mml:math><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≤</mml:mo><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
az állapottér minden 


<mml:math><mml:mi>N</mml:mi></mml:math>
csúcsára. 2. 


<mml:math><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
a válaszcsúcsokra. </h:p>
<h:p>3. 


<mml:math><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mo>∞</mml:mo></mml:math>
a megengedett megoldásokra. </h:p>
<h:p>4. 


<mml:math><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≥</mml:mo><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math>
ha 


<mml:math><mml:mi>N</mml:mi></mml:math>
a 


<mml:math><mml:mi>P</mml:mi></mml:math>
csúcs gyereke. 


<mml:math><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow/><mml:mo>)</mml:mo></mml:mrow></mml:math>
-t 
<h:font color="#3300FF" size=""><h:b><h:i>korlátozó függvénynek</h:i></h:b></h:font><h:a name="id4509456"/>
 nevezzük. </h:p>
<h:p>LCBB az állapottérhez tartozó csúcsokat állít elő – 


<mml:math><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow/><mml:mo>)</mml:mo></mml:mrow></mml:math>
felhasználásával. Az olyan előállított csúcsot, amelynek gyerekeit még nem állítottuk elő, és megengedett megoldásokhoz vezethet, 
<h:font color="#3300FF" size=""><h:b><h:i>élő csúcsnak</h:i></h:b></h:font><h:a name="id4509492"/><h:a name="id4509496"/>
 nevezzük. Az élő csúcsok listáját karbantartjuk – rendszerint kupacként. <h:a name="id4509504"/>
 LCBB minden iterációs lépésben kiválaszt egy 


<mml:math><mml:mi>N</mml:mi></mml:math>
élő csúcsot, amelynek 


<mml:math><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow/><mml:mo>)</mml:mo></mml:mrow></mml:math>
értéke minimális. Ezt a csúcsot aktuális 
<h:font color="#3300FF" size=""><h:b><h:i>E-csúcsnak</h:i></h:b></h:font><h:a name="id4509540"/>
 nevezzük. Ha 


<mml:math><mml:mi>N</mml:mi></mml:math>
válasz csúcs, akkor minimális költségű válasz csúcs. Ha 


<mml:math><mml:mi>N</mml:mi></mml:math>
nem válasz csúcs, akkor előállítjuk a gyerekeit. Azokat a gyerekeket, amelyek nem vezethetnek minimális költségű válaszhoz, eldobjuk (ezeket a csúcsokat bizonyos heurisztikával választjuk ki). A megmaradó gyerekeket hozzáadjuk az élő csúcsokhoz. </h:p>
<h:p>Az LCBB módszer többféleképpen párhuzamosítható. Az egyik lehetőség, hogy minden iterációs lépésben több 


<mml:math><mml:mi>E</mml:mi></mml:math>-csúcs is kiterjeszthető. </h:p>
<h:p>Ha a processzorok száma 


<mml:math><mml:mi>p</mml:mi></mml:math>
, 


<mml:math><mml:mi>q</mml:mi><mml:mo>=</mml:mo><mml:mo>min</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mtext> élő csúcsok száma </mml:mtext></mml:mrow><mml:mo>}</mml:mo></mml:mrow></mml:math>
csúcsot választunk, mint 


<mml:math><mml:mi>E</mml:mi></mml:math>
-csúcsot (azt a 


<mml:math><mml:mi>q</mml:mi></mml:math>
élő csúcsot, melyekre a legkisebb a 


<mml:math><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow/><mml:mo>)</mml:mo></mml:mrow></mml:math>
függvény értéke). Legyen 


<mml:math><mml:msub><mml:mrow><mml:mi>g</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:math>
ezen csúcsok 


<mml:math><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow/><mml:mo>)</mml:mo></mml:mrow></mml:math>
értékeinek minimuma. Ha ezen 


<mml:math><mml:mi>E</mml:mi></mml:math>
csúcsok bármelyike válaszcsúcs, és a 


<mml:math><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow/><mml:mo>)</mml:mo></mml:mrow></mml:math>
-értéke 


<mml:math><mml:msub><mml:mrow><mml:mi>g</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:math>
, akkor az a csúcs minimális költségű válaszcsúcs. Egyébként mind a 


<mml:math><mml:mi>q</mml:mi></mml:math>
csúcsot kiterjesztjük (minden processzor egy csúcsot terjeszt ki), és gyerekeit hozzáadjuk az élő csúcsok listájához. </h:p>
<h:p><mml:math><mml:mi>q</mml:mi></mml:math>
darab 


<mml:math><mml:mi>E</mml:mi></mml:math>
-csúcs minden ilyen kiterjesztése a párhuzamos LCBB egy iterációja. </h:p>
<h:p>Adott 


<mml:math><mml:mi>I</mml:mi></mml:math>
-re és 


<mml:math><mml:mi>g</mml:mi></mml:math>
-re jelöljük 


<mml:math><mml:mi>I</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
-vel a 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzor esetében szükséges iterációk számát. Ekkor természetesnek látszanak 


<mml:math><mml:mi>I</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
következő tulajdonságai: 1. ha 


<mml:math><mml:msub><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>&lt;</mml:mo><mml:msub><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math>
, akkor 


<mml:math><mml:mi>I</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≥</mml:mo><mml:mi>I</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>;</mml:mo></mml:math>
2. 


<mml:math><mml:apply><mml:divide/><mml:ci><mml:mi>I</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci><mml:ci><mml:mi>I</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:ci></mml:apply><mml:mo>≤</mml:mo><mml:apply><mml:divide/><mml:ci><mml:msub><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:ci><mml:ci><mml:msub><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:ci></mml:apply><mml:mo>.</mml:mo></mml:math>
Az első tulajdonság szerint a processzorok számának növelésekor nem nőhet az iterációk száma. </h:p>
<h:p>A második tulajdonság szerint a teljesítmény nem lehet nagyobb, mint a felhasznált erőforrások mennyisége. Lai és Sahni 1984-ben megmutatták, hogy <h:a name="id4509924"/><h:a name="id4509928"/>
 egyik tulajdonság sincs biztosítva – még akkor sem, ha 


<mml:math><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow/><mml:mo>)</mml:mo></mml:mrow></mml:math>
eleget tesz a (1)–(4) korlátozásoknak. </h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4509953">1.8.5. Az anomália elkerülése </h:a></h:font></h:strong>

<h:p>Az anomáliát általában igyekeznek elkerülni. </h:p>
<h:p>A lapcserélésnél például az elkerülés elégséges feltétele az, ha a cserélési algoritmus rendelkezik a 
<h:font color="#3300FF" size=""><h:b><h:i>verem tulajdonsággal:</h:i></h:b></h:font><h:a name="id4509980"/>
 ha ugyanazt a hivatkozási sorozatot 


<mml:math><mml:mi>m</mml:mi></mml:math>
és 


<mml:math><mml:mi>m</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:math>
méretű memóriájú gépen futtatjuk, akkor minden hivatkozás után igaz az, hogy a nagyobb memória mindazokat a lapokat tartalmazza, amelyeket a kisebb tartalmaz. </h:p>
<h:p>A vizsgált ütemezési feladatnál elegendő az, ha nem követeljük meg az ütemező algoritmustól a lista alkalmazását. </h:p>
<h:br/><h:strong><h:font face="Arial" size="+1.2" color="#3300FF"><h:a name="id4510018">Gyakorlatok </h:a></h:font></h:strong>

<h:p>
<h:a name="id4510026"/>
</h:p>
  
<h:p>
<h:font color="#FF33FF" size=""><h:b>1.8–1.  </h:b></h:font>
 Az A és B párhuzamos algoritmusok megoldják a kiválasztási feladatot. Az A algoritmus 


<mml:math><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>0.5</mml:mn></mml:mrow></mml:msup></mml:math>
processzort használ és a futási ideje 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>0.5</mml:mn></mml:mrow></mml:msup></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
A B algoritmus 


<mml:math><mml:mi>n</mml:mi></mml:math>
processzort használ és a futási ideje 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Határozzuk meg az elvégzett munkát, a gyorsítást és a hatékonyságot mindkét algoritmusra. Munkahatékonyake ezek az algoritmusok? <h:a name="id4510108"/></h:p>
  
<h:p>
<h:font color="#FF33FF" size=""><h:b>1.8–2.  </h:b></h:font>
 Elemezzük a következő két állítást.
<h:i>a.</h:i>
 Az 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
algoritmus futási ideje legalább 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
. 
<h:i>b.</h:i>
 Mivel az 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
algoritmus futási ideje 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
, a 


<mml:math mathvariant="script"><mml:mi mathvariant="script">B</mml:mi></mml:math>
algoritmus futási ideje pedig 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
, ezért a 


<mml:math mathvariant="script"><mml:mi mathvariant="script">B</mml:mi></mml:math>
algoritmus a hatékonyabb. <h:a name="id4510224"/></h:p>
  
<h:p>
<h:font color="#FF33FF" size=""><h:b>1.8–3.  </h:b></h:font>
 Terjesszük ki a váltási hely definícióját nem egész 


<mml:math><mml:mi>v</mml:mi></mml:math>
értékekre és párhuzamos algoritmusokra. <h:a name="id4510246"/></h:p>
  
<h:p>
<h:font color="#FF33FF" size=""><h:b>1.8–4.  </h:b></h:font>
 Becsüljük meg annak valószínűségét, hogy egy szabályos pénzérmét ezerszer feldobva legalább hatszázszor dobunk fejet. 
<h:i>Útmutatás.</h:i>
 A 


<mml:math><mml:mi>P</mml:mi><mml:mi>r</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>X</mml:mi><mml:mo>=</mml:mo><mml:mn>600</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
valószínűséget a Stirling-képlettel, a <h:a name="id4510291"/><mml:math><mml:mtext> Pr </mml:mtext><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>X</mml:mi><mml:mo>=</mml:mo><mml:mn>601</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mtext> Pr </mml:mtext><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>X</mml:mi><mml:mo>=</mml:mo><mml:mn>1000</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
valószínűségeket pedig geometriai sorral becsüljük. <h:a name="id4510343"/></h:p>
  
<h:p>
<h:font color="#FF33FF" size=""><h:b>1.8–5.  </h:b></h:font>
 Egészítsük ki a hálózatok adatait tartalmazó 1.2. táblázatot további adatokkal és hálózatokkal. </h:p>



<h:br/><h:center><h:strong><h:font face="Arial" size="+2" color="#3300FF"><h:a name="id4510364"> 
 Feladatok </h:a></h:font></h:strong></h:center>

<h:p><h:a name="id4510371"/><h:b><h:i>1-1. Variációk O-ra és 


<mml:math><mml:mi>Ω</mml:mi></mml:math>
-ra <h:br/></h:i></h:b>
 Az 


<mml:math><mml:mi>Ω</mml:mi></mml:math>
és 


<mml:math><mml:mi>O</mml:mi></mml:math>
különböző definíciói ismertek. Az egyikre a 


<mml:math><mml:mi>Ω</mml:mi><mml:mo>∞</mml:mo></mml:math>
(olvasd: omega végtelen) jelölést használjuk. Azt mondjuk, hogy 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>Ω</mml:mi><mml:mo>∞</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math>
ha létezik 


<mml:math><mml:mi>c</mml:mi></mml:math>
pozitív valós állandó úgy, hogy 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≥</mml:mo><mml:mi>c</mml:mi><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≥</mml:mo><mml:mn>0</mml:mn></mml:math>
teljesül végtelen sok egész 


<mml:math><mml:mi>n</mml:mi></mml:math>
-re. <h:br/><h:b>a.</h:b>
 Egy függvényt 
<h:font color="#3300FF" size=""><h:b><h:i>aszimptotikusan nemnegatívnak</h:i></h:b></h:font><h:a name="id4510511"/>
 nevezünk, ha minden elég nagy 


<mml:math><mml:mi>n</mml:mi></mml:math>
-re nemnegatív. Mutassuk meg, hogy bármely két aszimptotikusan nemnegatív 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
és 


<mml:math><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
függvény esetében vagy 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math>
vagy 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>Ω</mml:mi><mml:mo>∞</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math>
vagy mindkettő teljesül, ha azonban 


<mml:math><mml:mi>Ω</mml:mi><mml:mo>∞</mml:mo></mml:math>
helyett 


<mml:math><mml:mi>Ω</mml:mi></mml:math>
-t használunk, akkor nem igaz az állítás. <h:br/><h:b>b.</h:b>
 Mik a lehetséges előnyei és hátrányai annak, ha a programok futási idejének jellemzésére 


<mml:math><mml:mi>Ω</mml:mi><mml:mo>∞</mml:mo></mml:math>-t használunk 


<mml:math><mml:mi>Ω</mml:mi></mml:math>
helyett? </h:p>
<h:p>Néhány szerző a 


<mml:math><mml:mi>O</mml:mi></mml:math>
-t is kissé másképp definiálja; használjuk az 


<mml:math><mml:mi>O</mml:mi><mml:mo>′</mml:mo></mml:math>
jelölést erre az alternatív definícióra. Azt mondjuk, hogy 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>O</mml:mi><mml:mo>′</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
akkor és csak akkor, ha 


<mml:math><mml:mo>|</mml:mo><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>|</mml:mo><mml:mo>=</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math><h:br/><h:b>c.</h:b>
 Ismert, hogy 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
akkor és csak akkor teljesül, ha 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>Ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
és 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Mit mondhatunk, ha 


<mml:math><mml:mi>Ω</mml:mi></mml:math>
helyett 


<mml:math><mml:mi>Ω</mml:mi><mml:mo>∞</mml:mo></mml:math>
szerepel? </h:p>
<h:p>Szokásos a 


<mml:math><mml:mi>O</mml:mi><mml:mo>∼</mml:mo></mml:math>
-n (olvasd: gyenge ordó) szimbólumot a logaritmikus tényezők elhanyagolásával kapott 


<mml:math><mml:mi>O</mml:mi></mml:math>
-jelölésre használni. Azt mondjuk, hogy 


<mml:math><mml:mi>O</mml:mi><mml:mo>∼</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math>
ha léteznek olyan 


<mml:math><mml:mi>c</mml:mi></mml:math>
pozitív valós, 


<mml:math><mml:mi>k</mml:mi></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:math>
pozitív egész állandók úgy, hogy, ha 


<mml:math><mml:mi>n</mml:mi><mml:mo>≥</mml:mo><mml:msub><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:math>
akkor 


<mml:math><mml:mn>0</mml:mn><mml:mo>≤</mml:mo><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≤</mml:mo><mml:mi>c</mml:mi><mml:mi>g</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:msup><mml:mrow><mml:mo>log</mml:mo></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msup><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math><h:b>d.</h:b>
 Definiáljuk hasonló módon 


<mml:math><mml:mi>Ω</mml:mi><mml:mo>∼</mml:mo></mml:math>
-t és 


<mml:math><mml:mi>Θ</mml:mi><mml:mo>∼</mml:mo></mml:math>
-t. Bizonyítsuk be a 
<h:i>c.</h:i>
 részben kimondott állítás ennek megfelelő változatát. <h:br/><h:br/><h:a name="id4511090"/><h:b><h:i>1-2. A gyorsítás korlátai <h:br/></h:i></h:b>
 Ebben a feladatban a gyorsítás elméleti és gyakorlati korlátait vizsgáljuk. <h:br/><h:b>a.</h:b>
 Bizonyítsuk be Amdahl és Gustafson <h:a name="id4511108"/><h:a name="id4511113"/>
 törvényét. </h:p>
<h:p><h:b>b.</h:b>
 Magyarázzuk meg, hogy a két törvény közötti ellentmondás látszólagos. </h:p>
<h:p><h:b>c.</h:b>
 A gyakorlatban milyen korlátai vannak a gyorsításnak? <h:br/><h:br/><h:a name="id4511138"/><h:b><h:i>1-3. Hanoi tornyai általánosan <h:br/></h:i></h:b>
Általánosítsuk a Hanoi tornyaira vonatkozóan <h:a name="id4511148"/>
 kapott eredményt. <h:br/><h:b>a.</h:b>
 Mit mondhatunk a lépésszámról akkor, ha négy rudat használhatunk? </h:p>
<h:p><h:b>b.</h:b>
 Mit mondhatunk a lépésszámról akkor, ha 


<mml:math><mml:mn>2</mml:mn><mml:mo>+</mml:mo><mml:mi>k</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mo>≥</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
rudat használhatunk? 
<h:b>c.</h:b>
 Mit mondhatunk a lépésszámról akkor, ha korlátozzuk a rudak közötti mozgatás lehetőségeit, például az 


<mml:math><mml:mi>A</mml:mi></mml:math>
rúdról a 


<mml:math><mml:mi>B</mml:mi></mml:math>
rúdra és a 


<mml:math><mml:mi>B</mml:mi></mml:math>
rúdról az 


<mml:math><mml:mi>A</mml:mi></mml:math>
rúdra nem szabad korongot áthelyezni? </h:p>
<h:p><h:b>d.</h:b>
 Mennyire csökkenthető a lépésszám konstans számú rúd esetén? </h:p>
<h:p><h:b>e.</h:b>
 Mennyi rúd elegendő a lépésszám 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
-re csökkentéséhez? 
<h:b>f.</h:b>
 Mit mondhatunk a lépésszámról akkor, ha 


<mml:math><mml:mi>s</mml:mi></mml:math>
szerzetes párhuzamosan dolgozhat? Feltételezzük, hogy minden lépésben minden rúdról legfeljebb egy korongot szabad elvenni és minden rúdra legfeljebb egy korongot szabad ráhelyezni, továbbá minden szerzetes legfeljebb egy korongot mozgathat? </h:p>
<h:p><h:b>g.</h:b>
 Mit mondhatunk a lépésszámról akkor, ha az 


<mml:math><mml:mi>s</mml:mi></mml:math>
szerzetes párhuzamos munkáját paraméteresen értelmezzük: az 


<mml:math><mml:mi>m</mml:mi></mml:math>
-párhuzamos olvasás jelentse azt, hogy a szerzetesek egy lépésben rudanként legfeljebb az 


<mml:math><mml:mi>m</mml:mi></mml:math>
legfelső koronghoz férnek hozzá; az 


<mml:math><mml:mi>m</mml:mi></mml:math>
-párhuzamos írás pedig jelentse azt, hogy minden korongra külön legfeljebb 


<mml:math><mml:mi>m</mml:mi></mml:math>
korongot helyezhetnek egyidejűleg. <h:br/><h:br/><h:a name="id4511325"/><h:b><h:i>1-4. Anomália <h:br/></h:i></h:b>
 Tervezzünk egy algoritmust (és valósítsuk is meg), amely azt bizonyítja, hogy egy adott feladatot 


<mml:math><mml:mi>q</mml:mi><mml:mo>&gt;</mml:mo><mml:mi>p</mml:mi></mml:math>
processzoron megoldani tovább tart, <h:a name="id4511348"/>
 mint 


<mml:math><mml:mi>p</mml:mi><mml:mo>&gt;</mml:mo><mml:mn>1</mml:mn></mml:math>
processzoron. <h:br/><h:br/><h:a name="id4511367"/><h:b><h:i>1-5. Párhuzamossággal a hírnévért és dicsőségért</h:i></h:b>
 1997-ben Andrew Beale dallasi bankár 50 ezer dollár díjat tűzött ki annak, aki bizonyítja vagy cáfolja sejtését. Eszerint ha 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msup><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mi>q</mml:mi></mml:mrow></mml:msup><mml:mo>+</mml:mo><mml:msup><mml:mrow><mml:mi>b</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>r</mml:mi></mml:mrow></mml:msup><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4511386">(1.91)</h:a></h:td></h:tr></h:table>
akkor az 


<mml:math><mml:mi>a</mml:mi><mml:mo>,</mml:mo><mml:mi>b</mml:mi></mml:math>
és 


<mml:math><mml:mi>c</mml:mi></mml:math>
számoknak van egynél nagyobb közös osztója (az egyenletben mind a hat betű egész számot jelent és a kitevők értéke legalább három). Hogyan használhatók fel a párhuzamos algoritmusok a díj megszerzésére? <h:br/><h:br/><h:a name="id4511445"/><h:b><h:i>1-6. Rangsorolás</h:i></h:b>
 Tekintsük az összehasonlítás alapú rendezés következő általánosítását. 


<mml:math><mml:mi>n</mml:mi></mml:math>
elemet – például 


<mml:math><mml:mi>n</mml:mi></mml:math>
sportolót – páronként összehasonlítunk, és a 
<h:i>győztesnek</h:i>
 1 pontot, a vesztesnek pedig 0 pontot adunk. Legyen 


<mml:math><mml:msub><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
az 


<mml:math><mml:mi>i</mml:mi></mml:math>
-edik játékos 
<h:i>pontszáma</h:i>
 (győzelmeinek száma). <h:br/><h:b>a.</h:b>
 Tervezzünk párhuzamos algoritmust, amely adott 
<h:b>q</h:b><mml:math><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:math><mml:math><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:math>
sorozatról eldönti, hogy lehet-e az előbb leírt 
<h:i>verseny</h:i>
 pontsorozata. 
<h:i>Útmutatás.</h:i>
 Használjuk fel Landau tételét, amely szerint 
<h:b>q</h:b>
 akkor és csak akkor lehet pontsorozat, ha a következő két feltétel mindegyike teljesül: 
<h:p><h:br/><h:center><h:img src="pics/p1-k71.gif"/></h:center></h:p><h:b>b.</h:b>
 Oldjuk meg a feladatot akkor, ha minden összehasonlításnál 


<mml:math><mml:mi>k</mml:mi><mml:mo>≥</mml:mo><mml:mn>1</mml:mn></mml:math>
pontot osztunk ki az összehasonlított sportolók között, és a 


<mml:math><mml:mi>k</mml:mi></mml:math>
pont minden lehetséges módon felosztható (azzal a megszorítással, hogy mindkét játékosra a kapott pontok száma nemnegatív egész). </h:p>
<h:p><h:b>c.</h:b>
 Oldjuk meg a feladatot akkor, ha minden összehasonlításnál 


<mml:math><mml:mi>k</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>≤</mml:mo><mml:mi>a</mml:mi><mml:mo>≤</mml:mo><mml:mi>k</mml:mi><mml:mo>≤</mml:mo><mml:mi>b</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
pontot osztunk ki az összehasonlított sportolók között, a 


<mml:math><mml:mi>k</mml:mi></mml:math>
pont minden lehetséges módon felosztható (azzal a megszorítással, hogy mindkét játékosra a kapott pontok száma nemnegatív egész), az 


<mml:math><mml:mi>a</mml:mi></mml:math>
és 


<mml:math><mml:mi>b</mml:mi></mml:math>
számok pozitív egészek. </h:p>
<h:p><h:b>d.</h:b>
 Elemezzük a feladatnak azt az általánosítását, amelyben az összehasonlításoknak csak egy részét végeztük el. Lényeges-e annak ismerete, hogy mely összehasonlításokat végeztük el? <h:br/></h:p>


<h:br/><h:br/><h:center><h:strong><h:font face="Arial" size="+2.5" color="#3300FF"><h:a name="id4511674">2. Párhuzamos gépek</h:a></h:font></h:strong></h:center>

<h:p>Ebben a fejezetben először két alapvető módszert (a prefixszámítást és a tömbelemek rangsorolását), (<h:a href="#id4511712">2.1</h:a>. alfejezet), azután a kiválasztást (<h:a href="#id4515718">2.2</h:a>. alfejezet), összefésülést (<h:a href="#id4519094">2.3</h:a>. alfejezet), rendezést (<h:a href="#id4523036">2.4</h:a>. alfejezet), végül pedig néhány gráfalgoritmust (<h:a href="#"></h:a>. alfejezet) mutatunk be. </h:p>
<h:br/><h:center><h:strong><h:font face="Arial" size="+2" color="#3300FF"><h:a name="id4511712">2.1. Alapvető módszerek </h:a></h:font></h:strong></h:center>

<h:p>Ebben az alfejezetben két, a feladatok párhuzamos megoldásában gyakran használt módszert mutatunk be. Az asszociatív műveletek <h:a name="id4511727"/>
 gyors elvégzését a prefixek számítására, <h:a name="id4511735"/>
 a mutatóugrást <h:a name="id4511743"/>
 pedig a listarangsorolási feladat megoldására használjuk fel. </h:p>
<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4511752">2.1.1. Prefixszámítás </h:a></h:font></h:strong>

<h:p>Legyen 


<mml:math><mml:mi>Σ</mml:mi></mml:math>
egy alaphalmaz, melyen definiáltuk a 


<mml:math><mml:mo>⊕</mml:mo></mml:math>
<h:font color="#3300FF" size=""><h:b><h:i>bináris asszociatív operátort.</h:i></h:b></h:font><h:a name="id4511785"/>
 Feltesszük, hogy a művelet egy lépéssel elvégezhető és a 


<mml:math><mml:mi>Σ</mml:mi></mml:math>
halmaz zárt erre a műveletre nézve. </h:p>
<h:p>Egy 


<mml:math><mml:mo>⊕</mml:mo></mml:math>
bináris operátor 
<h:font color="#3300FF" size=""><h:b><h:i>asszociatív</h:i></h:b></h:font><h:a name="id4511820"/>
 a 


<mml:math><mml:mi>Σ</mml:mi></mml:math>
alaphalmazon, ha minden 


<mml:math><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mo>,</mml:mo><mml:mi>z</mml:mi><mml:mo>∈</mml:mo><mml:mi>Σ</mml:mi></mml:math>
esetében teljesül 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>x</mml:mi><mml:mo>⊕</mml:mo><mml:mi>y</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>⊕</mml:mo><mml:mi>z</mml:mi><mml:mo>=</mml:mo><mml:mi>x</mml:mi><mml:mo>⊕</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>y</mml:mi><mml:mo>⊕</mml:mo><mml:mi>z</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4511859">(2.1)</h:a></h:td></h:tr></h:table>
Legyenek az 


<mml:math><mml:mi>X</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>〈</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>〉</mml:mo></mml:mrow></mml:math>
sorozat elemei a 


<mml:math><mml:mi>Σ</mml:mi></mml:math>
alaphalmaz elemei. </h:p>
<h:p>Ekkor a prefixszámítás bemenő adatai az 


<mml:math><mml:mi>X</mml:mi></mml:math>
sorozat elemei, a 
<h:font color="#3300FF" size=""><h:b><h:i>prefixszámítási feladat</h:i></h:b></h:font><h:a name="id4511979"/>
 pedig az 


<mml:math><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>⊕</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>⊕</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>⊕</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msub><mml:mo>⊕</mml:mo><mml:mo>⋯</mml:mo><mml:mo>⊕</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msub></mml:math>
elemek meghatározása. Ezeket a meghatározandó elemeket 
<h:font color="#3300FF" size=""><h:b><h:i>prefixeknek</h:i></h:b></h:font><h:a name="id4512077"/>
 hívjuk. </h:p>
<h:p>Érdemes megjegyezni, hogy más területeken inkább az 


<mml:math><mml:mi>X</mml:mi></mml:math>
sorozat 


<mml:math><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:math>
kezdősorozatait hívják prefixeknek. </h:p>
  
<h:p>
<h:font color="#" size="-1&#10;">

<h:p><h:a name="id4512144"/>
<h:font color="#FF33FF" size=""><h:b>2.1. példa.</h:b></h:font><h:i>Asszociatív műveletek.</h:i>
 Ha 


<mml:math><mml:mi>Σ</mml:mi></mml:math>
az egészek halmaza, 


<mml:math><mml:mo>⊕</mml:mo></mml:math>
az összeadás és a bemenő adatok sorozata a 3, -5, 8, 2, 5, 4, akkor a prefixek 3, -2, 6, 8, 13, 17. Ha az ábécé és a bemenő adatok ugyanazok, de a művelet a szorzás, akkor a kimenő adatok (prefixek) 3, -15, -120, -240, -1200, -4800. Ha a művelet a minimum (ez is asszociatív), akkor a prefixek 3, -5, -5, -5, -5, -5. Az utolsó prefix megegyezik a bemenő számok legkisebbikével. </h:p>
</h:font>
</h:p>
<h:p>A prefixszámítás sorosan megoldható 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel. Bármely A soros algoritmusnak 


<mml:math><mml:mi>N</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mtext> A </mml:mtext></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>Ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésre szüksége van. Vannak olyan párhuzamos algoritmusok, amelyek különböző párhuzamos modelleken megoldják a munkahatékony prefixszámítást. </h:p>
<h:p>Először a CREW-PREFIX <h:a name="id4512243"/>
 CREW PRAM algoritmust mutatjuk be, amely 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzoron 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel számítja ki a prefixeket. </h:p>
<h:p>Azután az EREW-PREFIX <h:a name="id4512278"/>
 algoritmus következik, amelynek mennyiségi jellemzői hasonlóak az előző algoritmuséhoz, azonban EREW PRAM számítási modellen is végrehajtható. </h:p>
<h:p>Ezekkel az algoritmusokkal a prefixszámítást a soros megoldás 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésszámánál lényegesen gyorsabban meg tudjuk oldani, de sok az elvégzett munka. </h:p>
<h:p>Ezért is érdekes az OPTIMÁLIS-PREFIX CREW PRAM algoritmus, amely 


<mml:math><mml:mrow><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow></mml:mrow></mml:math>
processzort <h:a name="id4512338"/>
 használ és 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépést tesz. Ennek elvégzett munkája csak 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math>
ezért a hatékonysága 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
és az algoritmus munkaoptimális. Ennek az algoritmusnak a gyorsítása 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
A továbbiakban – a jelölések egyszerűsítése érdekében – a 


<mml:math><mml:mrow><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow></mml:mrow></mml:math>
típusú kifejezések helyett általában csak 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
-t írunk. </h:p>
<h:p>Az algoritmusok tervezéséhez az 
<h:i>oszd-meg-és-uralkodj</h:i>
 elvet alkalmazzuk. A bemenő adatok legyenek 


<mml:math><mml:mi>X</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msub><mml:mo>.</mml:mo></mml:math>
Az általánosság megszorítása nélkül feltehető, hogy 


<mml:math><mml:mi>p</mml:mi></mml:math>
a 2 egész kitevőjű hatványa. </h:p>
<h:br/><h:strong><h:font face="Arial" size="+1.2" color="#3300FF"><h:a name="id4512529">Prefixszámítás CREW PRAM modellen </h:a></h:font></h:strong>

<h:p>Először egy 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzoros algoritmust mutatunk be, melynek lépésszáma 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
. 
<h:p><h:br/><h:center><h:img src="pics/p2-p75.gif"/></h:center></h:p><h:a name="id4512569"/><h:a name="id4512573"/></h:p>
<h:p>
<h:font color="#" size="-1&#10;">

<h:p><h:a name="id4512588"/>
<h:font color="#FF33FF" size=""><h:b>2.2. példa.</h:b></h:font><h:i>8 elem prefixeinek számítása 8 processzoron.</h:i>
 Legyen 


<mml:math><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mn>8</mml:mn></mml:math>
és 


<mml:math><mml:mi>p</mml:mi><mml:mo>=</mml:mo><mml:mn>8</mml:mn><mml:mo>.</mml:mo></mml:math>
A prefixszámítás bemenő adatai 12, 3, 6, 8, 11, 4, 5 és 7, az asszociatív művelet az összeadás. Az első szakaszban az első 4 processzor 12, 3, 6, 8 bemenethez a 12, 15, 21, 29 prefixeket számolja ki. A másik 4 processzor pedig a 11, 4, 5, 7 bemenethez számolja ki a 11, 15, 20, 27 prefixeket. </h:p>
<h:p>A második szakaszban az első 4 processzor nem dolgozik, a második 4 pedig 29-et ad minden prefixhez és a 40, 44, 49, 56 eredményt kapja. </h:p>
</h:font>
</h:p>
<h:p>Mi ennek az algoritmusnak a 


<mml:math><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésigénye? Az első lépés 


<mml:math><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
ideig, a második pedig 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
ideig tart. Ezért a következő rekurziót kapjuk: 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>T</mml:mi><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mi>p</mml:mi></mml:ci><mml:ci><mml:mn>2</mml:mn></mml:ci></mml:apply></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>+</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mtext/><mml:mtext/><mml:mtext/><mml:mtext/><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4512708">(2.2)</h:a></h:td></h:tr></h:table><h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4512768">(2.3)</h:a></h:td></h:tr></h:table>Ennek a rekurzív egyenletnek a megoldása 


<mml:math><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math><h:a name="id4512823"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.1. 
<h:font color="#FF33FF" size="">tétel</h:font>. </h:b>
</h:font>
<h:i>A 


<mml:math><mml:mtext> CREW-PREFIX </mml:mtext></mml:math>
algoritmus p 


<mml:math><mml:mtext> CREW PRAM </mml:mtext></mml:math>
processzoron 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben számítja ki p elem prefixeit. </h:i>
</h:p>
<h:p>Ez az algoritmus nem munkaoptimális, mivel 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
munkát végez, és ismert olyan soros algoritmus, amely 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépést tesz. Munkaoptimális algoritmust kaphatunk például úgy, ha a felhasznált processzorok számát lecsökkentjük 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
-re, miközben a lépésszám nagyságrendje ugyanaz marad. A processzorszámot úgy csökkentjük, hogy a bemenet méretét csökkentjük 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
-re, alkalmazzuk az előző algoritmust, majd végül minden prefixet kiszámolunk. </h:p>
  

<h:br/><h:strong><h:font face="Arial" size="+1.2" color="#3300FF"><h:a name="id4512968">Prefixszámítás EREW PRAM modellen </h:a></h:font></h:strong>

<h:p><h:a name="id4512978"/>
 A következő algoritmusban a párhuzamos olvasás helyett elég a soros olvasás lehetősége. 
<h:p><h:br/><h:center><h:img src="pics/p2-p77a.gif"/></h:center></h:p><h:a name="id4512991"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.2. 
<h:font color="#FF33FF" size="">tétel</h:font>. </h:b>
</h:font>
<h:i>Az 


<mml:math><mml:mtext> EREW-prefix </mml:mtext></mml:math>
algoritmus p 


<mml:math><mml:mtext> EREW PRAM </mml:mtext></mml:math>
processzoron 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben számítja ki p elem prefixeit. </h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 A lépésszám nagyságrendjét az határozza meg, hányszor hajtódik végre az utolsó sorban lévő utasítás. Az 1–4. lépések 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
idő alatt, az 5–8. lépések 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
idő alatt hajtódnak végre.  <h:img src="pics/fkocka.gif"/><h:br/><h:br/></h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.2" color="#3300FF"><h:a name="id4513110">Prefixszámítás munkaoptimálisan </h:a></h:font></h:strong>

<h:p><h:p><h:br/><h:center><h:img src="pics/p2-p77b.gif"/></h:center></h:p><h:a name="id4513126"/>
 Az algoritmus lépésszáma logaritmikus. Ennek belátását megkönnyíti a következő két képlet: 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>z</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi><mml:mo>+</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msubsup><mml:mrow><mml:mo>∑</mml:mo></mml:mrow><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow></mml:msubsup><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4513142">(2.4)</h:a></h:td></h:tr></h:table>
és 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msubsup><mml:mrow><mml:mo>∑</mml:mo></mml:mrow><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msubsup><mml:msub><mml:mrow><mml:mi>z</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4513261">(2.5)</h:a></h:td></h:tr></h:table>
ahol az összegzés a megfelelő asszociatív művelet segítségével történik. <h:a name="id4513338"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.3. 
<h:font color="#FF33FF" size="">tétel</h:font>
(párhuzamos prefixszámítás 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel). </h:b>
</h:font>
<h:i>Az 


<mml:math><mml:mtext>OPTIMÁLIS-PREFIX </mml:mtext></mml:math>
algoritmus 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math><mml:math><mml:mtext> CREW PRAM </mml:mtext></mml:math>
processzoron 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel számítja ki 


<mml:math><mml:mi>p</mml:mi></mml:math>
elem prefixeit. </h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 Az algoritmus az első szakasza 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
ideig, a második szakasza 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésig tart. Végül a harmadik szakasz ugyancsak 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépést igényel.  <h:img src="pics/fkocka.gif"/><h:br/><h:br/>A tételből következik, hogy az OPTIMÁLIS-PREFIX algoritmus munkaoptimális. </h:p>
  
<h:p>
<h:font color="#" size="-1&#10;">

<h:p><h:a name="id4513548"/>
<h:font color="#FF33FF" size=""><h:b>2.3. példa.</h:b></h:font><h:i>16 elem összeadása.</h:i>
 Legyen 16 elemünk: 5, 12, 8, 6, 3, 9, 11, 12, 1, 5, 6, 7, 10, 4, 3, 5. Az asszociatív művelet az összeadás. Ekkor 


<mml:math><mml:mo>log</mml:mo><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mn>4</mml:mn><mml:mo>.</mml:mo></mml:math>
Ekkor az első párhuzamos lépésben a processzorok 4-4 elem prefixeit számolják. A második lépésben a helyi összegekből globális összegeket számolunk, majd azokkal a harmadik lépésben frissítjük a helyi eredményeket. A számítás menetét mutatja a <h:a href="#id4513608">2.1</h:a>. ábra. </h:p>
</h:font>
</h:p>
<h:p>
<h:p><h:br/><h:center>
<h:img src="pics/p2-a1.gif">

</h:img>
<h:center><h:a name="id4513608"/>
<h:font color="#FF33FF" size=""><h:b>2.1. ábra.</h:b></h:font>
 16 elem prefixeinek számítása az OPTIMÁLIS-PREFIX algoritmussal.</h:center><h:br/>
</h:center></h:p>
</h:p>


<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4513627">2.1.2. Tömb elemeinek rangsorolása </h:a></h:font></h:strong>

<h:p>A 
<h:font color="#3300FF" size=""><h:b><h:i>tömbrangsorolási feladat</h:i></h:b></h:font><h:a name="id4513646"/>
 bemenő adata egy 


<mml:math><mml:mi>p</mml:mi></mml:math>
elemű tömbben ábrázolt lista: minden elem tartalmazza jobb oldali szomszédjának az indexét (és esetleges további adatokat). A feladat az elemek 
<h:font color="#3300FF" size=""><h:b><h:i>rangjának</h:i></h:b></h:font><h:a name="id4513671"/>
 (jobb oldali szomszédai számának) meghatározása. </h:p>
<h:p>Mivel az adatokra nincs szükség a megoldáshoz, feltesszük, hogy az elemek csak a szomszéd indexét tartalmazzák. A jobb szélső elem index mezője nulla. </h:p>
<h:p>Az indexet a továbbiakban mutatónak hívjuk. </h:p>
  
<h:p>
<h:font color="#" size="-1&#10;">

<h:p><h:a name="id4513703"/>
<h:font color="#FF33FF" size=""><h:b>2.4. példa.</h:b></h:font><h:i>Tömbrangsorolás bemenő adatai.</h:i>
 Legyen 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>:</mml:mo><mml:mn>6</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
a <h:a href="#id4513914">2.2</h:a>. ábra felső sorában bemutatott tömb. Ekkor az 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
elem jobboldali szomszédja 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>5</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
, 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
jobboldali szomszédja 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>4</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
. 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>4</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
az utolsó elem, ezért rangja 0. 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
rangja 1, mivel csak 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>4</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
van tőle jobbra. 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>5</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
rangja 3, mivel az 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>3</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
és 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>4</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
elemek vannak tőle jobbra. Az elemek sorrendjét (balról jobbra haladva) mutatja az ábra alsó része. </h:p>
</h:font>
</h:p>
<h:p><h:p><h:br/><h:center><h:img src="pics/p2-a2.gif"/><h:center><h:a name="id4513914"/>
<h:font color="#FF33FF" size=""><h:b>2.2. ábra.</h:b></h:font>
 Tömbrangsorolási probléma bemenő adatai és a megfelelő tömb.</h:center><h:br/></h:center></h:p>
 A tömbrangsorolás sorosan elvégezhető lineáris lépésszámmal. Először meghatározzuk a 
<h:font color="#3300FF" size=""><h:b><h:i>tömb fejét</h:i></h:b></h:font><h:a name="id4513938"/>
 – az egyetlen olyan 


<mml:math><mml:mi>i</mml:mi></mml:math>
értéket 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>≤</mml:mo><mml:mi>i</mml:mi><mml:mo>≤</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
, melyre 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>≠</mml:mo><mml:mi>i</mml:mi></mml:math>
teljesül minden 


<mml:math><mml:mn>1</mml:mn><mml:mo>≤</mml:mo><mml:mi>j</mml:mi><mml:mo>≤</mml:mo><mml:mi>n</mml:mi></mml:math>
értékre. Legyen 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
a tömb feje. A fejtől kiindulva pásztázzuk a tömböt és az elemekhez rendre hozzárendeljük a 


<mml:math><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:math>
rangokat. </h:p>
<h:p>Ebben a részben két párhuzamos algoritmust ismertetünk. Az egyik a DETRANGSOROL, <h:a name="id4514062"/>
 amely egy 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzoros EREW PRAM 


<mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésszámmal, a másik a VÉL-RANGSOROL, <h:a name="id4514099"/>
 amely egy 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
processzoros véletlenített EREW PRAM algoritmus 


<mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésszámmal. Mindkettő gyorsítása 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
. Az első algoritmus hatékonysága 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>/</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
, míg a másodiké 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
. Ezért az első algoritmus csak munkahatékony, a második algoritmus viszont munkaoptimális is. </h:p>
<h:br/><h:strong><h:font face="Arial" size="+1.2" color="#3300FF"><h:a name="id4514250">Determinisztikus tömbrangsorolás </h:a></h:font></h:strong>

<h:p>Ezekben az algoritmusokban az egyik alapvető ötlet a 
<h:i>mutatóugrás.</h:i><h:a name="id4514266"/>
 DET-RANGSOROL <h:a name="id4514272"/>
 szerint először mindegyik elem a jobb oldali szomszédjának indexét tartalmazza, és ennek megfelelően a rangja – a jobb oldali szomszédjához viszonyítva – 1 (kivétel a lista utolsó eleme, melynek rangja 0. Ezt a kezdeti állapotot mutatja a <h:a href="#id4514298">2.3</h:a>. ábra első sora. 
<h:p><h:br/><h:center><h:img src="pics/p2-a3.gif"/><h:center><h:a name="id4514298"/>
<h:font color="#FF33FF" size=""><h:b>2.3. ábra.</h:b></h:font>
 A DET-RANGSOROL algoritmus működése a <h:a href="#id4513703">2.4</h:a>. . példa adataival.</h:center><h:br/></h:center></h:p>
 Ezután módosítjuk a csúcsokat úgy, hogy mindegyik a jobb oldali szomszédjának a jobb oldali szomszédjára mutasson (ha nincs, akkor a lista végére). Ezt tükrözi a <h:a href="#id4514298">2.3</h:a>. ábra második sora. </h:p>
<h:p>Ha 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzorunk van, akkor ez 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel elvégezhető. </h:p>
<h:p>Most minden csúcs (kivéve az utolsót) olyan csúcsra mutat, amelyik eredetileg 2 távolságra volt. A mutatóugrás következő lépésében a csúcsok olyan csúcsra mutatnak, amelyek eredetileg 4 távolságra voltak tőlük (ha ilyen csúcs nincs, akkor a lista végére) – amint azt az ábra harmadik sora mutatja. </h:p>
<h:p>A következő lépésben a csúcsok (pontosabban a mutató részük) a 8 távolságú szomszédra mutatnak (ha van ilyen – ha nincs, akkor a lista végére), az <h:a href="#id4514298">2.3</h:a>. ábra utolsó sora szerint. </h:p>
<h:p>Minden csúcs minden lépésben információt gyűjt arról, hány csúcs van közte és azon csúcs között, amelyre most mutat. Ehhez kezdetben legyen a csúcsok rang mezőjében 1 – kivéve a jobboldali csúcsot, melyre ez az érték legyen 0. </h:p>
<h:p>Legyen 
<h:i>rang</h:i><mml:math><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
és 
<h:i>szomsz</h:i><mml:math><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
az 


<mml:math><mml:mi>i</mml:mi></mml:math>
csúcs rang, illetve szomszéd mezője. A mutatóugrás során 
<h:i>rang</h:i><mml:math><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
-t általában 
<h:i>rang</h:i><mml:math><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
+ 
<h:i>rang</h:i>
[
<h:i>szomsz</h:i><mml:math><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
]-re módosítjuk – kivéve azokat a csúcsokat, melyekre 
<h:i>szomsz</h:i><mml:math><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:math>
. Ezután 
<h:i>szomsz</h:i><mml:math><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
-t úgy módosítjuk, hogy 
<h:i>szomsz</h:i>
[
<h:i>szomsz</h:i><mml:math><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
]-re mutasson. A teljes 


<mml:math><mml:mtext> DET-RANGSOROL </mml:mtext></mml:math>
algoritmus a következő. 
<h:p><h:br/><h:center><h:img src="pics/p2-p82.gif"/></h:center></h:p><h:a name="id4514539"/>
 A <h:a href="#id4514298">2.3</h:a>. ábra mutatja, hogyan működik 


<mml:math><mml:mtext> DET-RANGSOROL </mml:mtext></mml:math>
a 2.6. példa adataival. </h:p>
<h:p>Kezdetben minden csúcs rangja 1, kivéve a 4. csúcsot. Amikor 


<mml:math><mml:mi>q</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:math>
, akkor például az 1. csúcs 
<h:i>rang</h:i>
 mezőjét kettőre változtatjuk, mert jobboldali szomszédjának (ez az 5. csúcs) rangja 1. Az 1. csúcs 
<h:i>szomsz</h:i>
 mezőjét az 5. </h:p>
<h:p>csúcs szomszédjának indexére, azaz 3-ra változtatjuk. <h:a name="id4514590"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.4. 
<h:font color="#FF33FF" size="">tétel</h:font>. </h:b>
</h:font>
<h:i>A 


<mml:math><mml:mtext> DET-RANGSOROL </mml:mtext></mml:math>
algoritmus egy 


<mml:math><mml:mtext>EREW PRAM </mml:mtext></mml:math>
modellen p processzoron 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben határozza meg egy p elemű tömb elemeinek rangját. </h:i>
</h:p>
<h:p>Mivel a DET-RANGSOROL algoritmus 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
munkát végez, ezért nem munkaoptimális. </h:p>
<h:p>A listarangsorolási probléma megfelel a lista prefix összege számításának, ahol minden csúcs súlya 1, kivéve a jobboldalit, melynek súlya 0. A DETRANGSOROL algoritmus könnyen módosítható úgy, hogy kiszámítsa egy lista prefixeit – a processzorszámra és a lépésszámra vonatkozó hasonló korlátokkal. </h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.2" color="#3300FF"><h:a name="id4514685">Véletlenített listarangsorolás (*) </h:a></h:font></h:strong>

<h:p>Most egy munkahatékony véletlen listarendező algoritmus következik. Minden processzor 


<mml:math><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:math>
csúcs rangját számolja. A 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
processzort az 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi><mml:mo>+</mml:mo><mml:mn>2</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
csúcsokhoz rendeljük. Az algoritmus meneteket hajt végre. Minden menetben kiválasztja és 
<h:font color="#3300FF" size=""><h:b><h:i>kiemeli</h:i></h:b></h:font><h:a name="id4514820"/>
 a csúcsok egy részét. Amikor egy csúcsot kiemelünk, akkor a rá vonatkozó információt tároljuk úgy, hogy később a rangját meg tudjuk határozni. Ha már csak 2 csúcs marad, a listarendezési probléma egyszerűen megoldható. A következő menetben a kiemelt csúcsokat 
<h:font color="#3300FF" size=""><h:b><h:i>beemeljük.</h:i></h:b></h:font><h:a name="id4514843"/>
 Amikor egy csúcsot beemelünk, akkor a helyes rangját is meghatározzuk. A beemelés sorrendje a kiemelési sorrend fordítottja. A KIEMEL <h:a name="id4514854"/>
 algoritmus a következő. 
<h:p><h:br/><h:center><h:img src="pics/p2-p84.gif"/></h:center></h:p>
 A kettős láncolás 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzorral 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel elvégezhető. A 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
processzorhoz az 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>≤</mml:mo><mml:mi>i</mml:mi><mml:mo>≤</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
csúcsot rendeljük. Egy lépésben 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
a 
<h:i>szomsz</h:i><mml:math><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
memóriarekeszbe ír úgy, hogy a következő lépésben az 


<mml:math><mml:mi>A</mml:mi></mml:math>
[
<h:i>szomsz</h:i><mml:math><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
] csúccsal összekapcsolt processzor ismerni fogja bal oldali szomszédját. A lassulási lemma segítségével belátható, hogy 


<mml:math><mml:mi>n</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math>
processzoron 


<mml:math><mml:mi>p</mml:mi></mml:math>
elem kettős láncolása 


<mml:math><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:math>
lépésben elvégezhető. </h:p>
<h:p>A csúcsok beemelése (lásd <h:a href="#"></h:a>. ábra) ugyancsak menetekben történik. Amikor az 


<mml:math><mml:mi>x</mml:mi></mml:math>
csúcsot beemeljük, helyes rangját így határozzuk meg: ha kiemelésekor a 
<h:i>bal-szomsz</h:i><mml:math><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
mutatót tároltuk, akkor 


<mml:math><mml:mi>x</mml:mi></mml:math>
rangját úgy kapjuk, hogy 
<h:i>bal-szomsz</h:i><mml:math><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
aktuális rangjából levonjuk azt a rangot, amit 


<mml:math><mml:mi>x</mml:mi></mml:math>
kiemelésekor tároltunk. A mutatókat ugyancsak aktualizáljuk, figyelembe véve azt a tényt, hogy 


<mml:math><mml:mi>x</mml:mi></mml:math>
-et már beemeltük. Ezt mutatja a <h:a href="#id4515094">2.4</h:a>. ábra, amelyen a csúcsoknak csak a jobb oldali mutatója szerepel. 
<h:p><h:br/><h:center><h:img src="pics/p2-a4.gif"/><h:center><h:a name="id4515094"/>
<h:font color="#FF33FF" size=""><h:b>2.4. ábra.</h:b></h:font>
 A DET-RANGSOROL algoritmus működése a <h:a href="#id4513703">2.4</h:a>. példa adataival.</h:center><h:br/></h:center></h:p>
 Most megmutatjuk, hogy a kiemelések 


<mml:math><mml:mi>s</mml:mi></mml:math>
összes száma 


<mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Ha egy csúcsot a 


<mml:math><mml:mi>i</mml:mi></mml:math>
-edik menetben kiemelünk, akkor a 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>2</mml:mn><mml:mi>s</mml:mi><mml:mo>−</mml:mo><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
. menetben fogjuk beemelni. Így az algoritmus szerkezete a következő. </h:p>
<h:p>Az 


<mml:math><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mi>s</mml:mi></mml:math>
menetekben egymás után kiemeljük a csúcsokat. Az 


<mml:math><mml:mi>s</mml:mi></mml:math>
menetekben az addigra megmaradt 2 csúcs egyikét kiemeljük. Az 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>s</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
-edik menetekben beemeljük az 


<mml:math><mml:mi>s</mml:mi></mml:math>
-edik menetben kiemelt csúcsot. Az 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>s</mml:mi><mml:mo>+</mml:mo><mml:mn>2</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
-edik menetben az 


<mml:math><mml:mi>s</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:math>
menetben kiemelt csúcsot emeljük be és így tovább. Az utolsó menet után az eredeti lista minden csúcsának rangját tudjuk. </h:p>
<h:p>Mivel 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
minden menetben csak egy csúcsot vizsgál, ezért a hozzá tartozó csúcsok közül legfeljebb egyet emelünk ki. Az is minden esetben fennáll, hogy a lista szomszédos csúcsait egyszerre nem emeljük ki: ugyanis a 


<mml:math><mml:mtext> fej </mml:mtext></mml:math>
után egy processzor csak akkor próbálja kiemelni a választott csúcsot, ha a jobb oldali szomszéd processzor nem 


<mml:math><mml:mi>f</mml:mi><mml:mi>e</mml:mi><mml:mi>j</mml:mi></mml:math>
-et dobott. Ezért a processzorok menetenként csak 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépést igényelnek. </h:p>
<h:p>Az algoritmus lépésszámához csak 


<mml:math><mml:mi>s</mml:mi></mml:math>
-et kell meghatározni. Ehhez megbecsüljük a menetenként kiemelt csúcsok számát. Minden 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
processzorra igaz, hogy a kiválasztott 


<mml:math><mml:mi>x</mml:mi></mml:math>
csúcsot legalább 1/4 valószínűséggel kiemeli: ugyanis 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
1/2 valószínűséggel dob 


<mml:math><mml:mi>f</mml:mi><mml:mi>e</mml:mi><mml:mi>j</mml:mi></mml:math>
-et, és legalább 


<mml:math><mml:mn>1</mml:mn><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:math>
annak a valószínűsége, hogy 


<mml:math><mml:mi>x</mml:mi></mml:math>
jobb oldali szomszédját (legyen ez a csúcs 


<mml:math><mml:mi>y</mml:mi></mml:math>
) nem választjuk ki, vagy kiválasztjuk ugyan, de 


<mml:math><mml:mi>y</mml:mi></mml:math>
processzora írást dob. </h:p>
<h:p>Minden processzor 


<mml:math><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:math>
csúccsal kezdi az algoritmust és minden menetben legalább 


<mml:math><mml:mn>1</mml:mn><mml:mo>/</mml:mo><mml:mn>4</mml:mn></mml:math>
annak valószínűsége, hogy kiemelünk egy csúcsot. Ezért 


<mml:math><mml:mi>s</mml:mi></mml:math>
várható értéke legfeljebb 


<mml:math><mml:mn>4</mml:mn><mml:mo>log</mml:mo><mml:mi>p</mml:mi><mml:mo>.</mml:mo></mml:math>
Most alkalmazzuk az (1.51) Csernov-egyenlőtlenséget, amely 


<mml:math><mml:mi>p</mml:mi></mml:math>
darab 


<mml:math><mml:mi>q</mml:mi></mml:math>
-paraméterű <h:a name="id4515474"/><h:a name="id4515479"/>
 Bernoulli-kísérlet <h:a name="id4515486"/>
 esetében minden 


<mml:math><mml:mn>0</mml:mn><mml:mo>&lt;</mml:mo><mml:mi>ε</mml:mi><mml:mo>&lt;</mml:mo><mml:mn>1</mml:mn></mml:math>
számra igaz. A 


<mml:math><mml:mn>12</mml:mn><mml:mi>α</mml:mi><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:math>
és 


<mml:math><mml:mn>1</mml:mn><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:math>
paraméterekkel az 


<mml:math><mml:mi>ε</mml:mi><mml:mo>=</mml:mo><mml:mn>2</mml:mn><mml:mo>/</mml:mo><mml:mn>3</mml:mn></mml:math>
esetben azt kapjuk, hogy 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>P</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>s</mml:mi><mml:mo>≤</mml:mo><mml:mn>12</mml:mn><mml:mi>α</mml:mi><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>&gt;</mml:mo><mml:mn>1</mml:mn><mml:mo>−</mml:mo><mml:msup><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mrow><mml:mo>−</mml:mo><mml:mi>α</mml:mi></mml:mrow></mml:msup></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4515552">(2.6)</h:a></h:td></h:tr></h:table>
minden 


<mml:math><mml:mi>α</mml:mi><mml:mo>≥</mml:mo><mml:mn>1</mml:mn></mml:math>
értékre. Tehát beláttuk a következő tételt. <h:a name="id4515608"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.5. 
<h:font color="#FF33FF" size="">tétel</h:font>
(lista rendezése 


<mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel). </h:b>
</h:font>
<h:i>A KIEMEL algoritmus egy 


<mml:math><mml:mi>p</mml:mi></mml:math>
hosszúságú lista rangsorolását 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math><mml:math><mml:mtext> EREW PRAM </mml:mtext></mml:math>
processzoron 


<mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel elvégezi. </h:i>
</h:p>
  



<h:br/><h:center><h:strong><h:font face="Arial" size="+2" color="#3300FF"><h:a name="id4515718">2.2. Kiválasztás </h:a></h:font></h:strong></h:center>

<h:p>Adott 


<mml:math><mml:mi>n</mml:mi><mml:mo>≥</mml:mo><mml:mn>2</mml:mn></mml:math>
kulcs és egy 


<mml:math><mml:mi>i</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>≤</mml:mo><mml:mi>i</mml:mi><mml:mo>≤</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
egész szám. A feladat az 


<mml:math><mml:mi>i</mml:mi></mml:math>
-edik legkisebb kulcs 
<h:font color="#3300FF" size=""><h:b><h:i>kiválasztása.</h:i></h:b></h:font><h:a name="id4515777"/>
 Mivel a kiválasztáshoz minden elemet meg kell vizsgálni, ezért 


<mml:math><mml:mi>N</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>Ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
. Erre a feladatra ismert olyan 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
soros algoritmus, amelyikre 


<mml:math><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
, tehát 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
aszimptotikusan optimális. </h:p>
<h:p>Ehhez hasonló a 
<h:font color="#3300FF" size=""><h:b><h:i>keresési feladat,</h:i></h:b></h:font><h:a name="id4515876"/>
 amelyben azt kell eldönteni, hogy adott elem előfordul-e a vizsgált sorozatban – és ha igen, milyen indexszel. Ennél a feladatnál tagadó válasz is lehetséges és egy elemről tulajdonságai alapján eldönthető, megfelel-e a keresési feladatnak. </h:p>
<h:p><h:a name="id4515896"/>
 Először 3 speciális esetet vizsgálunk, majd egy munkahatékony véletlenített algoritmust ismertetünk. </h:p>
<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4515907">2.2.1. Kiválasztás négyzetes számú processzoron </h:a></h:font></h:strong>

<h:p>Legyen 


<mml:math><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mi>n</mml:mi><mml:mo>,</mml:mo></mml:math>
azaz a legnagyobb kulcsot keressük. Ez a feladat a következő NÉGYZETES-KIVÁLASZT algoritmussal 


<mml:math><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:math>
CRCW processzoron 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel elvégezhető. <h:a name="id4515961"/><h:p><h:br/><h:center><h:img src="pics/p2-p88.gif"/></h:center></h:p><h:a name="id4515971"/>
 Legyenek a bemenő adatok 


<mml:math><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mo>.</mml:mo></mml:math>
Az összehasonlításokat párhuzamosan végezzük a 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>≤</mml:mo><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi><mml:mo>≤</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
processzorokon úgy, hogy 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math>
az 


<mml:math><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&lt;</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
logikai értéket számítja ki. Feltehetjük, hogy a kulcsok különbözőek. Ha mégse, 


<mml:math><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
helyett a 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mi>i</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
párt alkalmazva különbözővé tehetők: ehhez minden kulcshoz egy 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
-bites számot kell hozzáadni. Ekkor egyetlen olyan kulcs van, amelyikre minden összehasonlítás eredménye HAMIS. Ez a kulcs egy logikai VAGY művelettel azonosítható.<h:a name="id4516158"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.6. 
<h:font color="#FF33FF" size="">tétel</h:font>
(kiválasztás 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel). </h:b>
</h:font>
<h:i><mml:math><mml:mi>n</mml:mi></mml:math>
kulcs közül a maximális 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel meghatározható 


<mml:math><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:math>
közös CRCW PRAM processzoron. </h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 Az első és a harmadik szakasz egységnyi ideig tart. </h:p>
<h:p>A második szakasz 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel elvégezhető.  <h:img src="pics/fkocka.gif"/><h:br/><h:br/>Ennek az algoritmusnak a relatív sebessége 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Az elvégzett munka 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Ezért a hatékonyság 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>/</mml:mo><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>/</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Tehát az algoritmus nem munkahatékony. </h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4516364">2.2.2. Kiválasztás 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzoron </h:a></h:font></h:strong>

<h:p>Most megmutatjuk, hogy a maximális elem 


<mml:math><mml:mi>p</mml:mi></mml:math>
közös CRCW processzoron 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel meghatározható. A technika az 
<h:i>oszd-meg-és-uralkodj.</h:i>
 Az egyszerűség kedvéért feltesszük, hogy 


<mml:math><mml:mi>p</mml:mi></mml:math>
négyzetszám. Legyenek a bemenő adatok 


<mml:math><mml:mi>X</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>〈</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>〉</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Legyen az algoritmusunk lépésszáma 


<mml:math><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
A bemenő adatokat 


<mml:math><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mi>p</mml:mi></mml:ci></mml:apply><mml:mo>=</mml:mo><mml:mi>a</mml:mi></mml:math>
csoportra osztjuk úgy, hogy minden csoportban 


<mml:math><mml:mi>a</mml:mi></mml:math>
elem legyen. Minden csoporthoz rendeljünk 


<mml:math><mml:mi>a</mml:mi></mml:math>
processzort – ekkor a csoportok maximális eleme párhuzamosan számítható. Mivel csoportonként 


<mml:math><mml:mi>a</mml:mi></mml:math>
elem és ugyanannyi processzor van, a csoport maximális eleme 


<mml:math><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel meghatározható. Legyenek 


<mml:math><mml:msub><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mi>a</mml:mi></mml:mrow></mml:msub></mml:math>
a csoportok maximális elemei. Ezek maximuma lesz az algoritmus kimenete. Mivel most csak 


<mml:math><mml:mi>a</mml:mi></mml:math>
elemünk van, az összes processzort alkalmazhatjuk. 
<h:p><h:br/><h:center><h:img src="pics/p2-p90.gif"/></h:center></h:p><h:a name="id4516600"/><h:a name="id4516605"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.7. 
<h:font color="#FF33FF" size="">tétel</h:font>
(kiválasztás 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel). </h:b>
</h:font>
<h:i>A 


<mml:math><mml:mtext> GYÖKÖS-KIVÁLASZT </mml:mtext></mml:math>
algoritmus 


<mml:math><mml:mi>p</mml:mi></mml:math>
közös 


<mml:math><mml:mtext> CRCW PRAM </mml:mtext></mml:math>
processzoron 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel meghatározza 


<mml:math><mml:mi>p</mml:mi></mml:math>
kulcs közül a legnagyobbat. </h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 Ennek az algoritmusnak az első lépése 


<mml:math><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mi>p</mml:mi></mml:ci></mml:apply></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
, második lépése 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
ideig tart. Ezért 


<mml:math><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
kielégíti a 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mi>p</mml:mi></mml:ci></mml:apply></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4516771">(2.7)</h:a></h:td></h:tr></h:table>
rekurzív egyenletet, melynek megoldása 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math> <h:img src="pics/fkocka.gif"/><h:br/><h:br/>A GYÖKÖS-KERES algoritmus összes munkája 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math>
ezért hatékonysága 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>/</mml:mo><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math>
így ez az algoritmus sem munkahatékony. </h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4516934">2.2.3. Kiválasztás egész számok között </h:a></h:font></h:strong>

<h:p>Legyen a feladat ismét 


<mml:math><mml:mi>n</mml:mi></mml:math>
kulcs maximumának meghatározása. Ha a kulcsok egyetlen bitből állnak, akkor a maximum keresése visszavezethető a logikai VAGY műveletre és ezért 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel meghatározható. Ebből adódik a kérdés: mekkora intervallumban lehetnek a kulcsok ahhoz, hogy 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzoron konstans lépéssel meg tudjuk határozni a maximális elemet? </h:p>
<h:p>Legyen 


<mml:math><mml:mi>c</mml:mi></mml:math>
adott konstans, a kulcsok pedig legyenek a 


<mml:math><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
intervallumban. </h:p>
<h:p>Ekkor a kulcsok legfeljebb 


<mml:math><mml:mi>c</mml:mi><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math>
bites bináris számok. Az egyszerűség kedvéért feltesszük, hogy pontosan ennyi bitesek (a számok elejére szükség esetén nullákat írunk). </h:p>
<h:p>A következő CRCW <h:a name="id4517037"/>
 algoritmus 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépést tesz. <h:a name="id4517059"/>
 Az alapötlet az, hogy a számok 


<mml:math><mml:msub><mml:mrow><mml:mi>b</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>b</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>b</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn><mml:mi>c</mml:mi></mml:mrow></mml:msub></mml:math>
bitjeit 


<mml:math><mml:apply><mml:divide/><mml:ci><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:ci><mml:ci><mml:mn>2</mml:mn></mml:ci></mml:apply></mml:math>
hosszúságú 
<h:i>részekre</h:i>
 bontjuk. Az 


<mml:math><mml:mi>i</mml:mi></mml:math>
-edik rész a 


<mml:math><mml:msub><mml:mrow><mml:mi>b</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>b</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>b</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi>b</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:msub></mml:math>
biteket tartalmazza, a részek száma 


<mml:math><mml:mn>2</mml:mn><mml:mi>c</mml:mi><mml:mo>.</mml:mo></mml:math>
Ezt a helyzetet mutatja a <h:a href="#id4517274">2.5</h:a>. ábra: először az ábra első oszlopában lévő bitek alapján keressük a maximális kulcsot. 
<h:p><h:br/><h:center><h:img src="pics/p2-a5.gif"/><h:center><h:a name="id4517274"/>
<h:font color="#FF33FF" size=""><h:b>2.5. ábra.</h:b></h:font>
 Maximális egész szám kiválasztása.</h:center><h:br/></h:center></h:p><h:p><h:br/><h:center><h:img src="pics/p2-p91.gif"/></h:center></h:p><h:a name="id4517290"/><h:a name="id4517295"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.8. 
<h:font color="#FF33FF" size="">tétel</h:font>
(kiválasztás egész számok közül). </h:b>
</h:font>
<h:i>Ha a kulcsok a 


<mml:math><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
intervallumból vett egész számok, akkor 


<mml:math><mml:mi>p</mml:mi></mml:math>
kulcs közül a maximális 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel meghatározható 


<mml:math><mml:mi>p</mml:mi></mml:math><mml:math><mml:mtext> CRCW PRAM </mml:mtext></mml:math>
processzoron tetszőleges c konstans esetében. </h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 Tegyük fel, hogy a kulcsok maximumát a 


<mml:math><mml:apply><mml:divide/><mml:ci><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:ci><mml:ci><mml:mn>2</mml:mn></mml:ci></mml:apply></mml:math>
legfontosabb bit alapján határozzuk meg. </h:p>
<h:p>Legyen az első részben a maximum 


<mml:math><mml:mi>M</mml:mi></mml:math>
. Ekkor azok a kulcsok, melyek legfontosabb bitjei nem 


<mml:math><mml:mi>M</mml:mi></mml:math>
-et adnak, biztosan nem maximálisak. Ezt az alaplépést megismételjük 


<mml:math><mml:mn>2</mml:mn><mml:mi>c</mml:mi></mml:math>
-szer, azaz minden 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:math>
bitre pontosan egyszer. Legalább egy kulcs megmarad az utolsó lépés után is – az lesz az eredmény. Az utolsó rész lehet rövidebb, mint 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:math>
bit. </h:p>
<h:p>Ha egy kulcs legfeljebb 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:math>
bites, akkor az értéke legfeljebb 


<mml:math><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mi>n</mml:mi></mml:ci></mml:apply><mml:mo>−</mml:mo><mml:mn>1</mml:mn><mml:mo>.</mml:mo></mml:math>
Ezért az 


<mml:math><mml:mtext> Egészet-kiválaszt </mml:mtext></mml:math>
első lépésében a 


<mml:math><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mi>n</mml:mi></mml:ci></mml:apply><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
intervallumba eső egész kulcsok maximumát kell meghatározni. Rendeljünk minden kulcshoz egy processzort és használjunk 


<mml:math><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mi>n</mml:mi></mml:ci></mml:apply></mml:math>
közös memóriarekeszt 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mi>n</mml:mi></mml:ci></mml:apply><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
, melyek tartalma kezdetben 


<mml:math><mml:mo>−</mml:mo><mml:mo>∞</mml:mo><mml:mo>.</mml:mo></mml:math>
Egy párhuzamos lépésben a 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
processzor 


<mml:math><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
-t ír az 


<mml:math><mml:msub><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub></mml:math>
memóriarekeszbe. Ezután az 


<mml:math><mml:mi>n</mml:mi></mml:math>
kulcs maximuma a 


<mml:math><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mi>n</mml:mi></mml:ci></mml:apply></mml:math>
memóriarekesz tartalmából 


<mml:math><mml:mi>n</mml:mi></mml:math>
processzorral a 2.9. tétel alapján konstans idő alatt meghatározható. </h:p>
<h:p>
 
<h:img src="pics/fkocka.gif">

</h:img>
<h:br/>
<h:br/>
</h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4517726">2.2.4. Az általános kiválasztási feladat megoldása 


<mml:math><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math>
processzoron </h:a></h:font></h:strong>

<h:p>Tegyük fel, hogy az 


<mml:math><mml:mi>X</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>〈</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>〉</mml:mo></mml:mrow></mml:math>
sorozat különböző kulcsokat tartalmaz és az 


<mml:math><mml:mi>i</mml:mi></mml:math>
-edik legkisebb kulcsot akarjuk kiválasztani. Legyen most az 


<mml:math><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
<h:font color="#3300FF" size=""><h:b><h:i>kulcs rangja</h:i></h:b></h:font><h:a name="id4517833"/>
 eggyel nagyobb, mint a nála kisebb kulcsok száma (ez a definíció eggyel nagyobb értéket ad, mint a korábban használt). </h:p>
<h:p>Ezt a rangot a 2-5. gyakorlat szerint 


<mml:math><mml:apply><mml:divide/><mml:ci><mml:mi>n</mml:mi></mml:ci><mml:ci><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:ci></mml:apply></mml:math>
CREW PRAM processzoron bármely kulcsra 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben meg tudjuk határozni. </h:p>
<h:p>Ha 


<mml:math><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math>
processzorunk van, akkor azokat 


<mml:math><mml:msub><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:math>
csoportokba oszthatjuk úgy, hogy minden csoportban 


<mml:math><mml:mi>n</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math>
processzor legyen. A 


<mml:math><mml:msub><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>≤</mml:mo><mml:mi>j</mml:mi><mml:mo>≤</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
csoport 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben meghatározza a 


<mml:math><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math>
kulcs rangját 


<mml:math><mml:mi>X</mml:mi></mml:math>
-ben. Annak a csoportnak egyik processzora, amelyik az 


<mml:math><mml:mi>i</mml:mi></mml:math>
rangot határozta meg, adja a kimenetet. Az így kapott algoritmus neve legyen ÁLT-KIVÁLASZT. <h:a name="id4518027"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.9. 
<h:font color="#FF33FF" size="">tétel</h:font>
(általános kiválasztás). </h:b>
</h:font>
<h:i>Az ÁLT-KIVÁLASZT algoritmus 


<mml:math><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math>
processzoron 


<mml:math><mml:mi>n</mml:mi></mml:math>
különböző kulcs közül 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben meghatározza az 


<mml:math><mml:mi>i</mml:mi></mml:math>
-edik legkisebbet. </h:i>
</h:p>
<h:p>Nem nehéz belátni, hogy az ÁLT-KIVÁLASZT algoritmus munkája 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math>
tehát ez az algoritmus sem munkahatékony. </h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4518132">2.2.5. Munkaoptimális véletlenített algoritmus (*) </h:a></h:font></h:strong>

<h:p>Ebben a pontban 


<mml:math><mml:mi>n</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math>
közös CRCW processzort alkalmazunk arra, hogy 


<mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben megoldjuk az 


<mml:math><mml:mi>i</mml:mi></mml:math>
-edik legkisebb elem kiválasztását. </h:p>
<h:p>A VÉL-KIVÁLASZT algoritmus a bemenő kulcsok 


<mml:math><mml:mi>X</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:math>
sorozatából kiválaszt egy 


<mml:math><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>−</mml:mo><mml:mi>ε</mml:mi></mml:mrow></mml:msup></mml:math>
méretű 


<mml:math><mml:mi>S</mml:mi></mml:math>
mintát és 


<mml:math><mml:mi>S</mml:mi></mml:math>
két elemét elválasztó elemként. Például 


<mml:math><mml:mi>ε</mml:mi><mml:mo>=</mml:mo><mml:mn>0.6</mml:mn></mml:math>
megfelelő érték. </h:p>
<h:p>Legyen 


<mml:math><mml:msub><mml:mrow><mml:mi>e</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>e</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math>
a két elválasztó elem. Az elválasztó elemek olyanok lesznek, hogy a kiválasztandó elem nagy valószínűséggel a két elválasztó elem közé fog esni. Továbbá 


<mml:math><mml:mi>X</mml:mi></mml:math>
-nek az elválasztó elemek közé kevés eleme esik: 


<mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>+</mml:mo><mml:mi>ε</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mi>n</mml:mi></mml:ci></mml:apply></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Ha már kiválasztottuk a két elválasztó elemet, 


<mml:math><mml:mi>X</mml:mi></mml:math>
-et az 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mi>x</mml:mi><mml:mo>∈</mml:mo><mml:mi>X</mml:mi><mml:mo>|</mml:mo><mml:mi>x</mml:mi><mml:mo>&lt;</mml:mo><mml:msub><mml:mrow><mml:mi>e</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>}</mml:mo></mml:mrow></mml:math>
, 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mi>x</mml:mi><mml:mo>∈</mml:mo><mml:mi>X</mml:mi><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>e</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>≤</mml:mo><mml:mi>x</mml:mi><mml:mo>≤</mml:mo><mml:msub><mml:mrow><mml:mi>e</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>}</mml:mo></mml:mrow></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mi>x</mml:mi><mml:mo>∈</mml:mo><mml:mi>X</mml:mi><mml:mo>|</mml:mo><mml:mi>x</mml:mi><mml:mo>&gt;</mml:mo><mml:msub><mml:mrow><mml:mi>e</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>}</mml:mo></mml:mrow></mml:math>
diszjunkt részekre bontjuk. A felbontás során meghatározzuk az egyes részek elemszámát. Ha 


<mml:math><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>|</mml:mo><mml:mo>&lt;</mml:mo><mml:mi>i</mml:mi><mml:mo>≤</mml:mo><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>|</mml:mo><mml:mo>+</mml:mo><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>|</mml:mo></mml:math>
, akkor a kiválasztandó elem 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math>
eleme. Ebben az esetben tovább megyünk, míg ellenkező esetben újra kezdjük. </h:p>
<h:p>A mintavételezési és kiküszöbölési műveleteket addig ismételjük, amíg el nem érjük, hogy a megmaradó kulcsok száma legfeljebb 


<mml:math><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>0.4</mml:mn></mml:mrow></mml:msup></mml:math>
legyen. Ezután a megmaradó kulcsok közül az 


<mml:math><mml:mtext> Ált-kiválaszt </mml:mtext></mml:math>
algoritmus segítségével végezzük el a kiválasztást. </h:p>
<h:p>Az algoritmus pszeudokódja a következő. A pszeudokódban a 


<mml:math><mml:mi>N</mml:mi></mml:math>
munkaváltozó az élő kulcsok számát adja meg. Kezdetben legyen 


<mml:math><mml:mi>N</mml:mi><mml:mo>=</mml:mo><mml:mi>n</mml:mi></mml:math>
és minden kulcs legyen 
<h:font color="#3300FF" size=""><h:b><h:i>élő.</h:i></h:b></h:font><h:a name="id4518632"/>
 Minden processzorra 


<mml:math><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math>
kulcs jut. A 3. és 6. </h:p>
<h:p>lépésekben a koncentráció azt jelenti, hogy a megfelelő kulcsokat összegyűjtjük és a közös memória egymást követő rekeszeiben helyezzük el őket. 
<h:p><h:br/><h:center><h:img src="pics/p2-p95.gif"/></h:center></h:p><h:a name="id4518662"/>
 Nevezzük 
<h:i>menetnek</h:i>
 a 
<h:b>while</h:b>
 ciklus egyszeri lefutását. A minták száma minden menetben 


<mml:math><mml:mi>N</mml:mi></mml:math>
és 


<mml:math><mml:msup><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mrow><mml:mo>−</mml:mo><mml:mi>ε</mml:mi></mml:mrow></mml:msup></mml:math>
paraméterekkel rendelkező binomiális eloszlású. Ezért a mintákban lévő kulcsok számának várható értéke 


<mml:math><mml:msup><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mrow><mml:mo>−</mml:mo><mml:mi>ε</mml:mi></mml:mrow></mml:msup></mml:math>
. A Csernov-egyenlőtlenség segítségével belátható, hogy 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mo>|</mml:mo><mml:mi>M</mml:mi><mml:mo>|</mml:mo><mml:mo>=</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>−</mml:mo><mml:mi>ε</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4518724">(2.8)</h:a></h:td></h:tr></h:table>
Legyen 


<mml:math><mml:mi>M</mml:mi></mml:math>
egy 


<mml:math><mml:mi>m</mml:mi></mml:math>
elemű minta, amelyet egy 


<mml:math><mml:mi>n</mml:mi></mml:math>
elemű 


<mml:math><mml:mi>X</mml:mi></mml:math>
halmazból állítottunk elő. Legyen 
<h:i>kiválaszt</h:i><mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mi>M</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
az 


<mml:math><mml:mi>M</mml:mi></mml:math>
minta 


<mml:math><mml:mi>j</mml:mi></mml:math>
-edik legkisebb eleme és 


<mml:math><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo></mml:math><h:i>rang</h:i>
[
<h:i>kiválaszt</h:i><mml:math><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>,</mml:mo><mml:mi>M</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
,X]. </h:p>
<h:p>Bizonyítás nélkül említjük a következő lemmát. </h:p>
<h:p>
<h:a name="id4518866"/>
</h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.10. lemma. </h:b>
</h:font>
<h:i>Minden 


<mml:math><mml:mi>α</mml:mi></mml:math>
számra 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>P</mml:mi><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>−</mml:mo><mml:mi>j</mml:mi><mml:apply><mml:divide/><mml:ci><mml:mi>n</mml:mi></mml:ci><mml:ci><mml:mi>m</mml:mi></mml:ci></mml:apply><mml:mo>|</mml:mo><mml:mo>&gt;</mml:mo><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mn>3</mml:mn><mml:mi>α</mml:mi></mml:ci></mml:apply><mml:apply><mml:divide/><mml:ci><mml:mi>n</mml:mi></mml:ci><mml:ci><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mi>m</mml:mi></mml:ci></mml:apply><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:ci></mml:apply></mml:ci></mml:apply></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>&lt;</mml:mo><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>−</mml:mo><mml:mi>α</mml:mi></mml:mrow></mml:msup><mml:mtext/><mml:mtext/><mml:mtext/><mml:mtext/><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4518899">(2.9)</h:a></h:td></h:tr></h:table></h:i>
</h:p>
<h:p>Ennek a lemmának a segítségével bizonyítható a következő állítás. </h:p>
<h:p>
<h:a name="id4519005"/>
</h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.11. 
<h:font color="#FF33FF" size="">tétel</h:font>. </h:b>
</h:font>
<h:i>A VÉL-KIVÁLASZT algoritmus 


<mml:math><mml:mi>n</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math>
processzoron 


<mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben kiválasztja 


<mml:math><mml:mi>n</mml:mi></mml:math>
különböző kulcs közül az 


<mml:math><mml:mi>i</mml:mi></mml:math>
-edik legkisebbet. </h:i>
</h:p>
<h:p>Ebből a tételből és a kiválasztás lineáris lépésigényéből következik, hogy a VÉL-KIVÁLASZT algoritmus nagy valószínűséggel munkahatékony. </h:p>


<h:br/><h:center><h:strong><h:font face="Arial" size="+2" color="#3300FF"><h:a name="id4519094">2.3. Összefésülés </h:a></h:font></h:strong></h:center>

<h:p>Adott 2 csökkenőleg (vagy növekvőleg) rendezett sorozat, melyek együtt 


<mml:math><mml:mi>p</mml:mi></mml:math>
elemet tartalmaznak. A feladat ennek a sorozatnak egy csökkenő (vagy növekvő) sorozattá való rendezése. </h:p>
<h:p>Ez a feladat egy soros processzoron 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel megoldható. Mivel legrosszabb esetben minden elemet meg kell vizsgálni és a helyére kell tenni, ezért a feladat megoldásának lépésszámigénye 


<mml:math><mml:mi>Ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math></h:p>
<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4519156">2.3.1. Logaritmikus idejű algoritmus </h:a></h:font></h:strong>

<h:p>Legyen 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>〈</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>〉</mml:mo></mml:mrow></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>〈</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mo>+</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn><mml:mi>m</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>〉</mml:mo></mml:mrow></mml:math>
a két bemenő sorozat. Az egyszerűség kedvéért legyen 


<mml:math><mml:mi>m</mml:mi></mml:math>
2 hatványa és a kulcsok különbözzenek. </h:p>
<h:p>Az összefésüléshez elég az összes kulcs rangjának kiszámítása. Ha a rangokat ismerjük, akkor 


<mml:math><mml:mi>p</mml:mi><mml:mo>=</mml:mo><mml:mn>2</mml:mn><mml:mi>m</mml:mi></mml:math>
processzoron egy lépésben beírhatjuk az 


<mml:math><mml:mi>i</mml:mi></mml:math>
rangú kulcsot az 


<mml:math><mml:mi>i</mml:mi></mml:math>
-edik memóriarekeszbe.<h:a name="id4519331"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.12. 
<h:font color="#FF33FF" size="">tétel</h:font>. </h:b>
</h:font>
<h:i>A 


<mml:math><mml:mtext> LOG-ÖSSZEFÉSÜL </mml:mtext></mml:math>
algoritmus két m hosszúságú kulcssorozatot 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
idő alatt fésül össze 


<mml:math><mml:mn>2</mml:mn><mml:mi>m</mml:mi></mml:math><mml:math><mml:mtext> CREW PRAM </mml:mtext></mml:math>
processzoron. </h:i>
</h:p>
<h:p><h:a name="id4519395"/>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 A 


<mml:math><mml:mi>k</mml:mi></mml:math>
kulcs rangja legyen 


<mml:math><mml:msubsup><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msubsup><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msubsup><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msubsup></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
-ben ( 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math>
-ben). </h:p>
<h:p>Ha 


<mml:math><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>∈</mml:mo><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
, akkor legyen 


<mml:math><mml:msubsup><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:mi>j</mml:mi></mml:math>
. Ha egy külön 


<mml:math><mml:mi>π</mml:mi></mml:math>
processzort rendelünk 


<mml:math><mml:mi>k</mml:mi></mml:math>
hoz, akkor az bináris kiválasztással 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel meghatározza azon 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math>
-beli elemek 


<mml:math><mml:mi>q</mml:mi></mml:math>
számát, amelyek kisebbek, mint 


<mml:math><mml:mi>k</mml:mi><mml:mo>.</mml:mo></mml:math>
Ha 


<mml:math><mml:mi>q</mml:mi></mml:math>
ismert, akkor 


<mml:math><mml:mi>π</mml:mi></mml:math>
kiszámíthatja <mml:math><mml:mi>k</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>∪</mml:mo><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
-beli rangját: ez 


<mml:math><mml:mi>j</mml:mi><mml:mo>+</mml:mo><mml:mi>q</mml:mi></mml:math>
lesz. Ha 


<mml:math><mml:mi>k</mml:mi><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math>
-höz tartozik, hasonlóképpen járhatunk el. </h:p>
<h:p>Összegezve: ha elemenként egy, azaz összesen 


<mml:math><mml:mn>2</mml:mn><mml:mi>m</mml:mi></mml:math>
processzorunk van, akkor két 


<mml:math><mml:mi>m</mml:mi></mml:math>
hosszúságú rendezett sorozat 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel összefésülhető. Az ezt megoldó algoritmus neve LOGÖSSZEFÉSÜL. <h:a name="id4519680"/> <h:img src="pics/fkocka.gif"/><h:br/><h:br/>Ez az algoritmus nem munkaoptimális, de munkahatékony. </h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4519696">2.3.2. Páratlan-páros összefésülő algoritmus </h:a></h:font></h:strong>

<h:p>Ez az algoritmus a klasszikus 
<h:i>oszd meg és uralkodj</h:i>
 elvet alkalmazza. </h:p>
<h:p>Legyen 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:msub></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mo>+</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn><mml:mi>m</mml:mi></mml:mrow></mml:msub></mml:math>
a két bemenő sorozat. Az egyszerűség kedvéért legyen 


<mml:math><mml:mi>m</mml:mi></mml:math>
kettő hatványa és a kulcsok legyenek különbözőek. </h:p>
<h:p>
<h:p><h:br/><h:center>
<h:img src="pics/p2-p98.gif">

</h:img>
</h:center></h:p>
<h:a name="id4519847"/>
<h:a name="id4519854"/>
</h:p>
<h:p>
<h:font color="#" size="-1&#10;">

<h:p><h:a name="id4519870"/>
<h:font color="#FF33FF" size=""><h:b>2.5. példa.</h:b></h:font><h:i>Kétszer nyolc szám összefésülése.</h:i>
 Legyen 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo></mml:math>
5, 8, 11, 13, 16, 21, 25 és 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math>
= 4, 9, 12, 18, 23, 27, 31, 34. A 16 szám rendezését mutatja a következő <h:a href="#id4519936">2.6</h:a>. ábra. </h:p>
</h:font>
</h:p>
<h:p>
<h:p><h:br/><h:center>
<h:img src="pics/p2-a6.gif">

</h:img>
<h:center><h:a name="id4519936"/>
<h:font color="#FF33FF" size=""><h:b>2.6. ábra.</h:b></h:font>
 16 szám rendezése a PÁRATLANPÁROSÖSSZEFÉSÜL algoritmussal. </h:center><h:br/>
</h:center></h:p>
<h:a name="id4519950"/>
</h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.13. 
<h:font color="#FF33FF" size="">tétel</h:font>
(összefésülés 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel). </h:b>
</h:font>
<h:i>A 


<mml:math><mml:mtext> PÁRATLAN-PÁROS-ÖSSZEFÉSÜL </mml:mtext></mml:math>
algoritmus két 


<mml:math><mml:mi>m</mml:mi></mml:math>
hosszúságú kulcssorozatot 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel összefésül 


<mml:math><mml:mn>2</mml:mn><mml:mi>m</mml:mi></mml:math><mml:math><mml:mtext> EREW PRAM </mml:mtext></mml:math>
processzoron. </h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 Legyen az algoritmus lépésszáma 


<mml:math><mml:mi>M</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Az 1. lépés 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
ideig tart. A 2. lépés 


<mml:math><mml:apply><mml:divide/><mml:ci><mml:mi>m</mml:mi></mml:ci><mml:ci><mml:mn>2</mml:mn></mml:ci></mml:apply></mml:math>
ideig tart. Innen az 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>M</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>M</mml:mi><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mi>m</mml:mi></mml:ci><mml:ci><mml:mn>2</mml:mn></mml:ci></mml:apply></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>+</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4520108">(2.10)</h:a></h:td></h:tr></h:table>
rekurzív egyenlőséget kapjuk, melynek megoldása 


<mml:math><mml:mi>M</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math> <h:img src="pics/fkocka.gif"/><h:br/><h:br/>Az összefésülő algoritmusok helyessége a 
<h:font color="#3300FF" size=""><h:b><h:i>nulla-egy elv</h:i></h:b></h:font><h:a name="id4520206"/>
 segítségével bizonyítható. </h:p>
<h:p>Egy összehasonlítás alapú rendező algoritmus 
<h:font color="#3300FF" size=""><h:b><h:i>egyszerű,</h:i></h:b></h:font><h:a name="id4520224"/>
 ha az összehasonlítandó elemek sorozata előre meg van határozva (ekkor a következő összehasonlítás elemei nem függnek a mostani eredménytől). </h:p>
<h:p>Formálisan ez azt jelenti, hogy adott az összehasonlítandó elempárok indexeinek 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math><mml:math><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
sorozata. </h:p>
<h:p>
<h:a name="id4520335"/>
</h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.14. 
<h:font color="#FF33FF" size="">tétel</h:font>
(nulla-egy elv). </h:b>
</h:font>
<h:i>Ha egy egyszerű összehasonlításos rendező algoritmus helyesen rendez egy n hosszúságú nulla-egy sorozatot, akkor tetszőleges kulcsokból álló n hosszúságú sorozatot is helyesen rendez. <h:a name="id4520366"/></h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 Legyen 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
egy egyszerű összehasonlításos (növekvőleg) rendező algoritmus és legyen 


<mml:math><mml:mi>S</mml:mi></mml:math>
egy olyan kulcssorozat, melyet az adott algoritmus rosszul rendez. Ekkor a rosszul rendezett 


<mml:math><mml:mi>S</mml:mi></mml:math>
sorozatban van olyan kulcs, amely az 


<mml:math><mml:mi>i</mml:mi></mml:math>
-edik 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>≤</mml:mo><mml:mi>i</mml:mi><mml:mo>≤</mml:mo><mml:mi>n</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
helyen van annak ellenére, hogy 


<mml:math><mml:mi>S</mml:mi></mml:math>
-ben legalább 


<mml:math><mml:mi>i</mml:mi></mml:math>
nála kisebb elem van. </h:p>
<h:p>Legyen 


<mml:math><mml:mi>k</mml:mi><mml:mi>S</mml:mi></mml:math>
legelső (legkisebb indexű) ilyen kulcsa. A bemenő sorozatban írjunk a 


<mml:math><mml:mi>k</mml:mi></mml:math>
-nál kisebb elemek helyére nullát, a többi elem helyére egyest. Ezt a módosított 0-1 sorozatot 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
helyesen rendezi, ezért a 


<mml:math><mml:mi>k</mml:mi></mml:math>
helyére írt egyest a rendezett sorozatban legalább 


<mml:math><mml:mi>i</mml:mi></mml:math>
darab nulla megelőzi. </h:p>
<h:p>Most kihasználjuk, hogy 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
egyszerű. A bemenő sorozatban színezzük pirosra a 


<mml:math><mml:mi>k</mml:mi></mml:math>
-nál kisebb (nulla) elemeket, és kékre a többit (egyeseket). Indukcióval megmutatjuk, hogy az eredeti és a 0-1 sorozatnak megfelelő színes sorozatok minden összehasonlítás után azonosak. A színek szerint háromféle összehasonlítás van: kék, piros vagy különböző színű elemek összehasonlítása. Ha azonos színű elemeket hasonlítunk össze, akkor a színek sorozata egyik esetben sem változik. </h:p>
<h:p>Ha viszont különböző színű elemeket hasonlítunk össze, akkor mindkét esetben a piros elem kerül a kisebb, és a kék elem a nagyobb indexű helyre. Eszerint 


<mml:math><mml:mi>k</mml:mi></mml:math>
-t legalább 


<mml:math><mml:mi>i</mml:mi></mml:math>
nála kisebb elem megelőzi a rendezett sorozatban. Az ellentmondás az állítás helyességét mutatja.  <h:img src="pics/fkocka.gif"/><h:br/><h:br/></h:p>
<h:p>
<h:font color="#" size="-1&#10;">

<h:p><h:a name="id4520573"/>
<h:font color="#FF33FF" size=""><h:b>2.6. példa.</h:b></h:font><h:i>Egy nem összehasonlításos rendező algoritmus.</h:i>
 Legyen 


<mml:math><mml:mrow><mml:mo>〈</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>〉</mml:mo></mml:mrow></mml:math>
egy bitsorozat. Rendezhetjük úgy, hogy megszámoljuk a nullák 


<mml:math><mml:mi>z</mml:mi></mml:math>
számát, majd leírunk előbb 


<mml:math><mml:mi>z</mml:mi></mml:math>
nullát, majd 


<mml:math><mml:mi>n</mml:mi><mml:mo>−</mml:mo><mml:mi>z</mml:mi></mml:math>
egyest. Erre az elv nem alkalmazható, mert ez nem összehasonlításos rendezés. </h:p>
</h:font>
</h:p>
<h:p>Az összefésülés viszont rendezés, és a páros-páratlan összefésülés egyszerű. <h:a name="id4520671"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.15. 
<h:font color="#FF33FF" size="">tétel</h:font>. </h:b>
</h:font>
<h:i>A 


<mml:math><mml:mtext> Páratlan-páros-összefésül </mml:mtext></mml:math>
algoritmus helyesen rendez tetszőleges számokból álló sorozatokat. </h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 Legyenek 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math>
rendezett 0-1 sorozatok, melyek közös hossza 


<mml:math><mml:mi>m</mml:mi></mml:math>
. Legyen 


<mml:math><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
az 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
elején álló nullák száma. Az 


<mml:math><mml:msubsup><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>p</mml:mi><mml:mi>t</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msubsup></mml:math>
ban lévő nullák száma 


<mml:math><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math>
és az 


<mml:math><mml:msubsup><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>p</mml:mi><mml:mi>r</mml:mi><mml:mi>s</mml:mi></mml:mrow></mml:msubsup></mml:math>
-ban lévő nullák száma 


<mml:math><mml:mrow><mml:mo>⌊</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:mrow><mml:mo>⌋</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Így az 


<mml:math><mml:msub><mml:mrow><mml:mi>L</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
-beli nullák száma 


<mml:math><mml:msub><mml:mrow><mml:mi>z</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow></mml:math>
és az 


<mml:math><mml:msub><mml:mrow><mml:mi>L</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math>
-beli nullák száma 


<mml:math><mml:msub><mml:mrow><mml:mi>z</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>⌊</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:mrow><mml:mo>⌋</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mrow><mml:mo>⌊</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:mrow><mml:mo>⌋</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math><mml:math><mml:msub><mml:mrow><mml:mi>z</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>z</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math>
különbsége legfeljebb 2. Ez a különbség pontosan akkor kettő, ha 


<mml:math><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math>
is páratlan. Egyébként a különbség legfeljebb 1. Tegyük fel, hogy <mml:math><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>z</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>−</mml:mo><mml:msub><mml:mrow><mml:mi>z</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>|</mml:mo><mml:mo>=</mml:mo><mml:mn>2</mml:mn></mml:math>
(a többi eset hasonló). Most 


<mml:math><mml:msub><mml:mrow><mml:mi>L</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
-ben kettővel több nulla van. </h:p>
<h:p>Amikor ezeket a harmadik lépésben összekeverjük, akkor 


<mml:math><mml:mi>L</mml:mi></mml:math>
elején nullák vannak, azután 1,0, majd egyesek. A rendezetlen (
<h:i>piszkos</h:i>
) rész csak az 1,0. Amikor a harmadik lépésben az utolsó összehasonlítás és csere megtörténik, az egész sorozat rendezetté válik.  <h:img src="pics/fkocka.gif"/><h:br/><h:br/></h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4521140">2.3.3. Munkaoptimális algoritmus </h:a></h:font></h:strong>

<h:p>Most 


<mml:math><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:mn>2</mml:mn><mml:mi>m</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow></mml:math>
processzoron 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel végezzük az összefésülést. Ez az OPTIMÁLISANÖSSZEFÉSÜL algoritmus az eredeti problémát 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>m</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
részre osztja úgy, hogy mindegyikben 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
hosszúságú OPTIMÁLISANÖSSZEFÉSÜL rendezett sorozatokat kell összefésülni. Ezek a részproblémák soros algoritmussal 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel megoldhatók. </h:p>
<h:p>Legyen 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>〈</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>〉</mml:mo></mml:mrow></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>〈</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mo>+</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mo>+</mml:mo><mml:mi>m</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>〉</mml:mo></mml:mrow></mml:math>
a két bemenő sorozat. Osszuk 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
-et 


<mml:math><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mi>m</mml:mi></mml:ci><mml:ci><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:ci></mml:apply></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow></mml:math>
részre: ekkor mindegyikben legfeljebb 


<mml:math><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow></mml:math>
kulcs lesz. A részek legyenek 


<mml:math><mml:msub><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mi>M</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:math>
ahol 


<mml:math><mml:mi>M</mml:mi><mml:mo>=</mml:mo><mml:apply><mml:divide/><mml:ci><mml:mi>m</mml:mi></mml:ci><mml:ci><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:ci></mml:apply><mml:mo>.</mml:mo></mml:math>
Az 


<mml:math><mml:msub><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
-beli legnagyobb kulcs legyen 


<mml:math><mml:msub><mml:mrow><mml:mi>l</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mi>M</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
. Rendeljünk egy-egy processzort ezekhez az 


<mml:math><mml:msub><mml:mrow><mml:mi>l</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
elemekhez. Ezek a processzorok bináris kiválasztással meghatározzák 


<mml:math><mml:msub><mml:mrow><mml:mi>l</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math>
-beli (rendezés szerinti) helyét. Ezek a helyek felbontják 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math>
-t 


<mml:math><mml:mi>M</mml:mi></mml:math>
részre (ezek között üres részek is lehetnek – lásd a következő <h:a href="#id4522159">2.7</h:a>. ábrát). Jelöljük ezeket a részeket 


<mml:math><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>M</mml:mi></mml:mrow></mml:msub></mml:math>
-mel. 


<mml:math><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
-t az 


<mml:math><mml:msub><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
-nek 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math>
-ben megfelelő részhalmaznak nevezzük. </h:p>
<h:p>Ekkor 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math>
összefésülését megkaphatjuk úgy, hogy rendre összefésüljük 


<mml:math><mml:msub><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
-et 


<mml:math><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
-gyel, 


<mml:math><mml:msub><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math>
-t 


<mml:math><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math>
-vel és így tovább, majd ezeket a sorozatokat egyesítjük. <h:a name="id4521748"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.16. 
<h:font color="#FF33FF" size="">tétel</h:font>. </h:b>
</h:font>
<h:i>Az 


<mml:math><mml:mtext> OPTIMÁLISAN-ÖSSZEFÉSÜL </mml:mtext></mml:math>
két m hosszúságú rendezett kulcssorozatot 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben összefésül 


<mml:math><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mn>2</mml:mn><mml:mi>m</mml:mi></mml:ci><mml:ci><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:ci></mml:apply></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow></mml:math><mml:math><mml:mtext>CREW PRAM </mml:mtext></mml:math>
processzoron. </h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 Az előző algoritmust alkalmazzuk. </h:p>
<h:p>Az 


<mml:math><mml:msub><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
részek hossza 


<mml:math><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:math>
, a 


<mml:math><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
részek hossza azonban nagy is lehet. Ezért még egyszer alkalmazzuk a felbontást. Legyen 


<mml:math><mml:msub><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
tetszőleges pár. Ha 


<mml:math><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo><mml:mo>=</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math>
akkor 


<mml:math><mml:msub><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
egy processzoron 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben alatt összefésülhető. </h:p>
<h:p>Ha viszont 


<mml:math><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo><mml:mo>=</mml:mo><mml:mi>ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
, akkor osszuk 


<mml:math><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
-t 


<mml:math><mml:apply><mml:divide/><mml:ci><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo></mml:ci><mml:ci><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:ci></mml:apply></mml:math>
részre – ekkor minden rész legfeljebb 


<mml:math><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:math>
egymást követő kulcsot tartalmaz. Mindegyik részhez rendeljünk egy processzort, és az keresse meg az ennek a sorozatnak megfelelő részhalmazt 


<mml:math><mml:msub><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
-ben: ehhez 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépés elegendő. Így 


<mml:math><mml:msub><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
összefésülése 


<mml:math><mml:apply><mml:divide/><mml:ci><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo></mml:ci><mml:ci><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:ci></mml:apply></mml:math>
részproblémára redukálható, ahol minden részprobléma két 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
hosszúságú sorozat összefésülése.
<h:p><h:br/><h:center><h:img src="pics/p2-a7.gif"/><h:center><h:a name="id4522159"/>
<h:font color="#FF33FF" size=""><h:b>2.7. ábra.</h:b></h:font>
 Munkahatékony összefésülő algoritmus. </h:center><h:br/></h:center></h:p>
 A felhasznált processzorok száma 


<mml:math><mml:msubsup><mml:mrow><mml:mo>∑</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>M</mml:mi></mml:mrow></mml:msubsup><mml:mrow><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow></mml:mrow><mml:mo>,</mml:mo></mml:math>
ami legfeljebb 


<mml:math><mml:mi>m</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>m</mml:mi><mml:mo>+</mml:mo><mml:mi>M</mml:mi></mml:math>
, és ez legfeljebb 


<mml:math><mml:mn>2</mml:mn><mml:mi>M</mml:mi><mml:mo>.</mml:mo></mml:math> <h:img src="pics/fkocka.gif"/><h:br/><h:br/></h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4522255">2.3.4. Egy még gyorsabb algoritmus </h:a></h:font></h:strong>

<h:p>Ha az előző algoritmust kiegészítjük az 
<h:i>oszd-meg-és-uralkodj</h:i>
 elvvel, akkor még gyorsabb algoritmust kapunk. 
<h:p><h:br/><h:center><h:img src="pics/p2-p103.gif"/></h:center></h:p><h:a name="id4522277"/>
 Legyen 


<mml:math><mml:msub><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
tetszőleges pár. Ha 


<mml:math><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo><mml:mo>=</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>b</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
, akkor a két sorozat 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben összefésülhető 


<mml:math><mml:msup><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mi>ε</mml:mi></mml:mrow></mml:msup></mml:math>
-áris kereséssel 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mtext>ahol </mml:mtext><mml:mi>ε</mml:mi><mml:mtext>tetszőleges pozitív szám </mml:mtext></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
. Ha viszont 


<mml:math><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo><mml:mo>=</mml:mo><mml:mi>ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>b</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
, akkor 


<mml:math><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
-t 


<mml:math><mml:mrow><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo></mml:ci><mml:ci><mml:mi>b</mml:mi></mml:ci></mml:apply></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow></mml:mrow></mml:math>
részre osztjuk, ahol 


<mml:math><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
-nek minden részben legfeljebb 


<mml:math><mml:mi>b</mml:mi></mml:math>
egymást követő eleme van. Rendeljünk minden részhez 


<mml:math><mml:mi>b</mml:mi></mml:math>
processzort, hogy megtalálják az ehhez a halmazhoz tartozó részhalmazt 


<mml:math><mml:msub><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
ben: ehhez 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépés elég. Így 


<mml:math><mml:msub><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
összefésülésének problémája 


<mml:math><mml:mrow><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo></mml:ci><mml:ci><mml:mi>b</mml:mi></mml:ci></mml:apply></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow></mml:mrow></mml:math>
részproblémára redukálható, ahol minden részprobléma két 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>b</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
hosszúságú sorozat összefésülése. </h:p>
<h:p>A felhasznált processzorok száma 


<mml:math><mml:msubsup><mml:mrow><mml:mo>∑</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msubsup><mml:mi>b</mml:mi><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo><mml:mo>/</mml:mo><mml:mi>b</mml:mi></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math>
ami legfeljebb 


<mml:math><mml:mn>2</mml:mn><mml:mi>m</mml:mi><mml:mo>.</mml:mo></mml:math><h:a name="id4522635"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.17. 
<h:font color="#FF33FF" size="">tétel</h:font>
(összefésülés 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben). </h:b>
</h:font>
<h:i>Két m hosszúságú rendezett kulcssorozat 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben összefésülhető 


<mml:math><mml:mn>2</mml:mn><mml:mi>m</mml:mi></mml:math><mml:math><mml:mtext>CREW PRAM </mml:mtext></mml:math>
processzoron. </h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 Legyen 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math>
a két adott sorozat. Legyenek a kulcsok különbözők és legyen 


<mml:math><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mi>m</mml:mi></mml:ci></mml:apply><mml:mo>=</mml:mo><mml:mi>b</mml:mi></mml:math>
. Az algoritmus a feladatot 


<mml:math><mml:mi>N</mml:mi><mml:mo>≤</mml:mo><mml:mn>2</mml:mn><mml:mi>b</mml:mi></mml:math>
részfeladatra redukálja, melyek mindegyike két 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>b</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
hosszúságú rendezett sorozat összefésülése. A redukció 


<mml:math><mml:mi>m</mml:mi></mml:math>
processzoron 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben elvégezhető. </h:p>
<h:p>Ha az algoritmus lépésszáma 


<mml:math><mml:mn>2</mml:mn><mml:mi>m</mml:mi></mml:math>
processzoron 


<mml:math><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math>
akkor 


<mml:math><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
kielégíti a 


<mml:math display="block"><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>b</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
rekurzív egyenletet, melynek megoldása 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math> <h:img src="pics/fkocka.gif"/><h:br/><h:br/>Ez az algoritmus nem munkaoptimális, bár 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>/</mml:mo><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>m</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
gyorsítása nagyon közel van 


<mml:math><mml:mi>m</mml:mi></mml:math>
-hez. Hatékonysága csak 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math></h:p>


<h:br/><h:center><h:strong><h:font face="Arial" size="+2" color="#3300FF"><h:a name="id4523036">2.4. Rendezés </h:a></h:font></h:strong></h:center>

<h:p>Adott 


<mml:math><mml:mi>n</mml:mi><mml:mo>≥</mml:mo><mml:mn>2</mml:mn></mml:math>
kulcs. A feladat ezek csökkenő vagy növekvő sorrendbe való rendezése. </h:p>
<h:p>Ismert, hogy ha a megengedett művelet a szokásos összehasonlítás, akkor minden 


<mml:math mathvariant="script"><mml:mi mathvariant="script">A</mml:mi></mml:math>
soros algoritmusnak 


<mml:math><mml:mi>N</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow mathvariant="script"><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>Ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésre van szüksége, másrészt vannak 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésszámú összehasonlítás alapú algoritmusok, amelyek tehát aszimptotikusan optimálisak. </h:p>
<h:p>Más műveletek vagy a rendezendő kulcsok speciális tulajdonságai esetében a rendezés 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel is megoldható. Ha legrosszabb esetben minden kulcsot meg kell vizsgálni, akkor természetesen a lépésszám 


<mml:math><mml:mi>N</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>Ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Tehát mind az összehasonlítás alapú, mind pedig a speciális esetben ismert aszimptotikusan optimális soros algoritmus. </h:p>
<h:p>Vizsgáljuk meg a következő kérdéseket. Hány rendező algoritmus van? Ezek közül hány egyszerű, hány optimális (aszimptotikusan, szigorúan)? </h:p>
<h:p>Ezekre a kérdésekre nem könnyű válaszolni – például először pontosan definiálnunk kell, mi is az a rendező algoritmus. </h:p>
<h:p>Szűkítsük a kérdést: hány összehasonlításra van szükség 


<mml:math><mml:mi>n</mml:mi></mml:math>
elem rendezéséhez? </h:p>
<h:p>jelöljük ezt a számot 


<mml:math><mml:mi>c</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
-nel. Ismert, hogy 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:msubsup><mml:mrow><mml:mo>∑</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msubsup><mml:mo>log</mml:mo><mml:mi>i</mml:mi></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow></mml:mrow><mml:mo>≤</mml:mo><mml:mi>c</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≤</mml:mo><mml:msubsup><mml:mrow><mml:mo>∑</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msubsup><mml:mrow><mml:mo>⌈</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>i</mml:mi></mml:mrow><mml:mo>⌉</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4523249">(2.11)</h:a></h:td></h:tr></h:table>
és hogy 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>c</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>≤</mml:mo><mml:mi>n</mml:mi><mml:mo>log</mml:mo><mml:mi>n</mml:mi><mml:mo>−</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4523330">(2.12)</h:a></h:td></h:tr></h:table>
Az alsó becslés döntési fákkal vagy információelméleti eszközökkel igazolható (lásd az alsó korlátokról szóló 1.7. alfejezetet), a felső becslések pedig a bináris beszúró, illetve az összefésüléses rendező jellemző adatai. </h:p>
<h:p>4 elemre az alsó és a felső becslések egyaránt ötöt adnak. 5 elemre 5! = 120 miatt az alsó becslés 7, viszont az előbbi algoritmusoknak 8 összehasonlításra van szüksége. </h:p>
<h:p><mml:math><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:math>
processzoron a kulcsok rangja 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel meghatározható. Ha a rangokat ismerjük, akkor a rendezés egy párhuzamos írással megoldható. </h:p>
<h:p>Tehát igaz a következő tétel. <h:a name="id4523427"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.18. 
<h:font color="#FF33FF" size="">tétel</h:font>
(rendezés 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben). </h:b>
</h:font>
<h:i><mml:math><mml:mi>n</mml:mi></mml:math>
kulcs 


<mml:math><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:math><mml:math><mml:mtext>CRCW PRAM </mml:mtext></mml:math>
processzoron rendezhető 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel. </h:i>
</h:p>
<h:p>Mivel a kulcsok meghatározása 


<mml:math><mml:mi>Ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
ideig tart, ez a módszer 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
munkát igényel, azaz nem munkahatékony. </h:p>
<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4523556">2.4.1. Páratlan-páros algoritmus </h:a></h:font></h:strong>

<h:p>Ez az algoritmus a klasszikus 
<h:i>oszd meg és uralkodj</h:i>
 elvet alkalmazza. Az egyszerűség kedvéért legyen 


<mml:math><mml:mi>n</mml:mi></mml:math>
kettő hatványa és a kulcsok legyenek különbözők. </h:p>
<h:p>A következő EREW PRAM algoritmus 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mo>log</mml:mo></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépést tesz. </h:p>
<h:p><h:p><h:br/><h:center><h:img src="pics/p2-p106.gif"/></h:center></h:p><h:a name="id4523615"/>
 Ez az algoritmus hasonlít a soros összefésüléses algoritmusra. Ott azonban a sorozatok legkisebb elemeit hasonlítjuk össze és a kisebb elem az összehasonlítás eredménye. <h:a name="id4523628"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.19. 
<h:font color="#FF33FF" size="">tétel</h:font>
(rendezés 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mo>log</mml:mo></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel). </h:b>
</h:font>
<h:i><mml:math><mml:mi>n</mml:mi></mml:math>
kulcs 


<mml:math><mml:mi>n</mml:mi></mml:math><mml:math><mml:mtext>EREW PRAM </mml:mtext></mml:math>
processzoron rendezhető 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mo>log</mml:mo></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel. </h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 Legyen 


<mml:math><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
az algoritmus lépésszáma. Az 1. lépés 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
ideig tart, a 2. lépés 


<mml:math><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mi>n</mml:mi></mml:ci><mml:ci><mml:mn>2</mml:mn></mml:ci></mml:apply></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
ideig, a 3. lépés pedig 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
ideig. Ezért 


<mml:math><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
kielégíti a 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mi>T</mml:mi><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mi>n</mml:mi></mml:ci><mml:ci><mml:mn>2</mml:mn></mml:ci></mml:apply></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>+</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4523821">(2.13)</h:a></h:td></h:tr></h:table>
rekurzív egyenlőséget, melynek megoldása 


<mml:math><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mo>log</mml:mo></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math> <h:img src="pics/fkocka.gif"/><h:br/><h:br/></h:p>
<h:p>
<h:font color="#" size="-1&#10;">

<h:p><h:a name="id4523938"/>
<h:font color="#FF33FF" size=""><h:b>2.7. példa.</h:b></h:font><h:i>Rendezés 


<mml:math><mml:mn>16</mml:mn></mml:math>
processzorral.</h:i>
 Rendezzük 16 processzoron a következő számokat: 25, 21, 8, 5, 2, 13, 11, 16, 23, 31, 9, 4, 18, 12, 27, 34. Az első lépésben a páros és páratlan részeket kapjuk meg, majd a másodikban az első 8 processzor a páratlan részből kapja az 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mn>5</mml:mn><mml:mo>,</mml:mo><mml:mn>8</mml:mn><mml:mo>,</mml:mo><mml:mn>11</mml:mn><mml:mo>,</mml:mo><mml:mn>13</mml:mn><mml:mo>,</mml:mo><mml:mn>16</mml:mn><mml:mo>,</mml:mo><mml:mn>21</mml:mn><mml:mo>,</mml:mo><mml:mn>25</mml:mn></mml:math>
-öt, a második 8 processzor pedig az 


<mml:math><mml:msub><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn>4</mml:mn><mml:mo>,</mml:mo><mml:mn>9</mml:mn><mml:mo>,</mml:mo><mml:mn>12</mml:mn><mml:mo>,</mml:mo><mml:mn>18</mml:mn><mml:mo>,</mml:mo><mml:mn>23</mml:mn><mml:mo>,</mml:mo><mml:mn>27</mml:mn><mml:mo>,</mml:mo><mml:mn>31</mml:mn><mml:mo>,</mml:mo><mml:mn>34</mml:mn></mml:math>
-et. A harmadik lépésben kapjuk az eredményt. </h:p>
</h:font>
</h:p>
<h:p>Ez az algoritmus 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:msup><mml:mrow><mml:mo>log</mml:mo></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
munkát végez. Hatékonysága 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mn>1</mml:mn></mml:ci><mml:ci><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:ci></mml:apply></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
, gyorsítása 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mi>n</mml:mi></mml:ci><mml:ci><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:ci></mml:apply></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>.</mml:mo></mml:math></h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4524140">2.4.2. Egy véletlenített algoritmus 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>*</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></h:a></h:font></h:strong>

<h:p>Az 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mo>log</mml:mo></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésszám véletlenített algoritmussal is elérhető. <h:a name="id4524186"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.20. 
<h:font color="#FF33FF" size="">tétel</h:font>
(rendezés 


<mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mo>log</mml:mo></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel). </h:b>
</h:font>
<h:i><mml:math><mml:mi>n</mml:mi></mml:math>
kulcs 


<mml:math><mml:mi>n</mml:mi></mml:math><mml:math><mml:mtext>CREW PRAM </mml:mtext></mml:math>
processzoron rendezhető 


<mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mo>log</mml:mo></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel. </h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 Ismert, hogy 


<mml:math><mml:mi>n</mml:mi></mml:math>
elem közül 


<mml:math><mml:mi>n</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math>
processzoron a kiválasztás 


<mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel megoldható. Legyen 


<mml:math><mml:mi>n</mml:mi></mml:math>
processzorunk. Ekkor 


<mml:math><mml:mi>n</mml:mi></mml:math>
adott kulcs 


<mml:math><mml:mi>k</mml:mi></mml:math>
mediánja 


<mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel megtalálható. Osszuk 


<mml:math><mml:mi>X</mml:mi></mml:math>
-et 2 részre: 


<mml:math><mml:msubsup><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo>′</mml:mo></mml:mrow></mml:msubsup></mml:math>
tartalmazza a 


<mml:math><mml:mi>k</mml:mi></mml:math>
-nál nem nagyobb kulcsokat, 


<mml:math><mml:msubsup><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mo>′</mml:mo></mml:mrow></mml:msubsup></mml:math>
pedig a többi kulcsot. </h:p>
<h:p>Az 


<mml:math><mml:msubsup><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo>′</mml:mo></mml:mrow></mml:msubsup></mml:math>
és 


<mml:math><mml:msubsup><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mo>′</mml:mo></mml:mrow></mml:msubsup></mml:math>
részeket rekurzívan rendezzük 


<mml:math><mml:mi>n</mml:mi><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:math>
processzoron, majd az eredményeket láncoljuk össze. Ha a rendezés ideje 


<mml:math><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math>
akkor 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>T</mml:mi><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mi>n</mml:mi></mml:ci><mml:ci><mml:mn>2</mml:mn></mml:ci></mml:apply></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>+</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mtext/><mml:mtext/><mml:mtext/><mml:mtext/><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4524498">(2.14)</h:a></h:td></h:tr></h:table>
melynek megoldása 


<mml:math accent="true"><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mo>log</mml:mo></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math> <h:img src="pics/fkocka.gif"/><h:br/><h:br/></h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4524613">2.4.3. Preparata algoritmusa </h:a></h:font></h:strong>

<h:p><h:a name="id4524622"/>
 Több processzorral a lépésszám csökkenthető: Preparata algoritmusa 


<mml:math><mml:mi>n</mml:mi><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math>
CREW PRAM processzoron 


<mml:math><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math>
párhuzamos lépést végez. </h:p>
<h:p><h:p><h:br/><h:center><h:img src="pics/p2-p109.gif"/></h:center></h:p><h:a name="id4524657"/>
 Ez az algoritmus 
<h:i>oszd meg és uralkodj</h:i>
 elvű. A kulcssorozatot 


<mml:math><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math>
részre osztjuk, majd a részeket páronként összefésülve minden kulcsnak minden részre nézve meghatározzuk a rangját. Ezután a kulcsok tényleges rangja az előbbi rangok összege. </h:p>
<h:p>Ha a harmadik lépésben minden 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
párhoz 


<mml:math><mml:mi>n</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math>
processzort rendelünk, akkor az összefésülés 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel elvégezhető. </h:p>
<h:p>A negyedik lépésben a rang számítása párhuzamosan végezhető a harmadik lépésben kapott 


<mml:math><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math>
rang összeadásával: ez a prefixet számító algoritmussal 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel megoldható. <h:a name="id4524773"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.21. 
<h:font color="#FF33FF" size="">tétel</h:font>
(rendezés 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel). </h:b>
</h:font>
<h:i>A 


<mml:math><mml:mtext> Preparata </mml:mtext></mml:math>
algoritmus 


<mml:math><mml:mi>n</mml:mi></mml:math>
elemet 


<mml:math><mml:mi>n</mml:mi><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math><mml:math><mml:mtext> CREW PRAM </mml:mtext></mml:math>
processzoron 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel rendez. </h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 Legyen a Preparata-algoritmus futási ideje 


<mml:math><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Az első lépés időigénye 


<mml:math><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:math>
a második és harmadik lépésé együtt 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math>
Ezért 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>T</mml:mi><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:apply><mml:divide/><mml:ci><mml:mi>n</mml:mi></mml:ci><mml:ci><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:ci></mml:apply></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>+</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4524946">(2.15)</h:a></h:td></h:tr></h:table>
melynek megoldása (helyettesítéses módszerrel) 


<mml:math><mml:mi>T</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math> <h:img src="pics/fkocka.gif"/><h:br/><h:br/>A lassulásra vonatkozó tétel segítségével kapjuk a következő állítást. <h:a name="id4525046"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.22. 
<h:font color="#FF33FF" size="">következmény</h:font>
(rendezés 


<mml:math><mml:apply><mml:divide/><mml:ci><mml:mi>n</mml:mi><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:ci><mml:ci><mml:mi>t</mml:mi></mml:ci></mml:apply></mml:math>
processzoron). </h:b>
</h:font>
<h:i>Tetszőleges 


<mml:math><mml:mi>t</mml:mi><mml:mo>≥</mml:mo><mml:mn>1</mml:mn></mml:math>
egész számra n tetszőleges kulcs rendezhető 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>t</mml:mi><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben 


<mml:math><mml:apply><mml:divide/><mml:ci><mml:mi>n</mml:mi><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:ci><mml:ci><mml:mi>t</mml:mi></mml:ci></mml:apply></mml:math><mml:math><mml:mtext> CREW PRAM </mml:mtext></mml:math>
processzoron. </h:i>
</h:p>
<h:p>A Preparata-algoritmus munkája ugyanannyi, mint a páros-páratlan rendező algoritmusé, viszont a gyorsítása jobb: 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
. Mindkét algoritmus hatékonysága 


<mml:math><mml:mi>Θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:math></h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4525187">2.4.4. Reischuk véletlenített algoritmusa (*) </h:a></h:font></h:strong>

<h:p><h:a name="id4525197"/>
 Reischuk algoritmusa 


<mml:math><mml:mi>n</mml:mi></mml:math>
processzoron 


<mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
párhuzamos lépést tesz, azaz nagy valószínűséggel munkahatékony. </h:p>
<h:p>Alapja Preparata algoritmusa és a következő tétel. </h:p>
<h:p>
<h:a name="id4525244"/>
</h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.23. 
<h:font color="#FF33FF" size="">tétel</h:font>
(korlátos egészek rendezése). </h:b>
</h:font>
<h:i>Ha n kulcs mindegyike 


<mml:math><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mi>n</mml:mi><mml:msup><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
intervallumból vett egész szám (ahol c tetszőleges konstans), akkor ezek a kulcsok 


<mml:math><mml:apply><mml:divide/><mml:ci><mml:mi>n</mml:mi></mml:ci><mml:ci><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:ci></mml:apply></mml:math><mml:math><mml:mtext> CREW PRAM </mml:mtext></mml:math>
processzoron rendezhetők 


<mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben. </h:i>
</h:p>
<h:p>Az algoritmus a következő. </h:p>
<h:p>
<h:p><h:br/><h:center>
<h:img src="pics/p2-p111.gif">

</h:img>
</h:center></h:p>
<h:a name="id4525366"/>
<h:a name="id4525372"/>
</h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.24. 
<h:font color="#FF33FF" size="">tétel</h:font>
(tetszőleges kulcsok gyors rendezése). </h:b>
</h:font>
<h:i>A 


<mml:math><mml:mtext> Reischuk </mml:mtext></mml:math>
algoritmus 


<mml:math><mml:mi>n</mml:mi></mml:math>
tetszőleges kulcsot 


<mml:math><mml:mi>n</mml:mi></mml:math><mml:math><mml:mtext> CREW PRAM </mml:mtext></mml:math>
processzoron 


<mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben rendez. </h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 Reischuk algoritmusa szerint véletlenül kiválasztunk 


<mml:math><mml:mi>N</mml:mi><mml:mo>=</mml:mo><mml:mi>n</mml:mi><mml:mo>/</mml:mo><mml:msup><mml:mrow><mml:mo>log</mml:mo></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:msup><mml:mi>n</mml:mi></mml:math>
kulcsot és ezeket Preparata algoritmusával rendezzük. Ez a rendezett minta az eredeti sorozatot 


<mml:math><mml:mi>N</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:math>
– közel azonos hosszúságú – részsorozatra bontja, melyeket Preparata algoritmusával rendezünk: ezek a rendezett részsorozatok a megfelelő sorrendben véve megadják az eredményt. </h:p>
<h:p>A 


<mml:math><mml:mtext> Reischuk </mml:mtext></mml:math>
algoritmus második lépése 


<mml:math><mml:mi>N</mml:mi><mml:mo>log</mml:mo><mml:mi>N</mml:mi><mml:mo>≤</mml:mo><mml:mi>N</mml:mi><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math>
processzoron 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>N</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
idő alatt elvégezhető. </h:p>
<h:p>A harmadik lépésben 


<mml:math><mml:mi>X</mml:mi></mml:math>
felbontását bináris kereséssel és az egészeket rendező algoritmussal végezzük: minden kulcshoz tartozik egy processzor, amely az 


<mml:math><mml:msub><mml:mrow><mml:mi>l</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>l</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>l</mml:mi></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:msub></mml:math>
sorozatban végzett bináris kereséssel megadja, hogy az adott kulcs a 


<mml:math><mml:msub><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
részhalmazok melyikéhez tartozik. </h:p>
<h:p>Mivel a részek sorszámai a 


<mml:math><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mi>N</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
intervallumból vett egészek, az előző tétel alapján legfeljebb 


<mml:math><mml:mi>n</mml:mi></mml:math>
processzoron 


<mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel rendezhetők. A 


<mml:math><mml:msub><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>≤</mml:mo><mml:mi>i</mml:mi><mml:mo>≤</mml:mo><mml:mi>N</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
részekben nagy valószínűséggel nem lesz több elem, mint 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mo>log</mml:mo></mml:mrow><mml:mrow><mml:mn>5</mml:mn></mml:mrow></mml:msup><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
. Ugyanennyi processzoron és lépéssel a 


<mml:math><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo></mml:math>
elemszámokat is meg tudjuk határozni minden részre. </h:p>
<h:p>A negyedik lépésben minden 


<mml:math><mml:msub><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
rész rendezhető 


<mml:math><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo><mml:mo>log</mml:mo><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo></mml:math>
processzoron 


<mml:math><mml:mo>log</mml:mo><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo></mml:math>
lépéssel. Ezért a negyedik lépés 


<mml:math><mml:mi>n</mml:mi></mml:math>
processzoron <h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msup><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mo>max</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>log</mml:mo><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4525842">(2.16)</h:a></h:td></h:tr></h:table>
lépéssel elvégezhető. Ha 


<mml:math><mml:msub><mml:mrow><mml:mo>max</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo><mml:mo>=</mml:mo><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mo>log</mml:mo></mml:mrow><mml:mrow><mml:mn>5</mml:mn></mml:mrow></mml:msup><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
, akkor a negyedik lépés 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel elvégezhető.  <h:img src="pics/fkocka.gif"/><h:br/><h:br/></h:p>


<h:br/><h:center><h:strong><h:font face="Arial" size="+2" color="#3300FF"><h:a name="id4525966">2.5. Gráfalgoritmusok </h:a></h:font></h:strong></h:center>

<h:p>Legyen 


<mml:math><mml:mi>M</mml:mi></mml:math>
egy 


<mml:math><mml:mi>n</mml:mi><mml:mo>×</mml:mo><mml:mi>n</mml:mi></mml:math>
méretű mátrix, amelynek az elemei nemnegatív egész számok. Az 


<mml:math><mml:mi>M</mml:mi><mml:mo>∼</mml:mo></mml:math>
mátrixot 


<mml:math><mml:mi>M</mml:mi></mml:math>
<h:font color="#3300FF" size=""><h:b><h:i>minmátrixának</h:i></h:b></h:font><h:a name="id4526017"/>
 nevezzük és a következőképpen definiáljuk: 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>M</mml:mi><mml:mo>∼</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>i</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>0</mml:mn><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>≤</mml:mo><mml:mi>i</mml:mi><mml:mo>≤</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4526032">(2.17)</h:a></h:td></h:tr></h:table>
és 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:mi>M</mml:mi><mml:mo>∼</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mo>min</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub></mml:mrow><mml:mo>}</mml:mo></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>≠</mml:mo><mml:mi>j</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4526082">(2.18)</h:a></h:td></h:tr></h:table>
ahol a minimumot az olyan – az 


<mml:math><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>}</mml:mo></mml:mrow></mml:math>
halmaz elemeiből képezett – 


<mml:math><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:math>
permutációkra nézve képezzük, amelyekre 


<mml:math><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mi>i</mml:mi></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mi>j</mml:mi></mml:math>
. Legyen 


<mml:math><mml:mi>G</mml:mi></mml:math>
egy irányítatlan gráf, amelynek 


<mml:math><mml:mi>n</mml:mi></mml:math>
csúcsa van. Ennek reflexív tranzitív lezártját 


<mml:math><mml:msup><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mo>*</mml:mo></mml:mrow></mml:msup></mml:math>-gal jelöljük és úgy definiáljuk, hogy ha 


<mml:math><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mi>j</mml:mi></mml:math>
vagy 


<mml:math><mml:msub><mml:mrow><mml:mi>V</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>V</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math><mml:math><mml:mi>G</mml:mi></mml:math>
-nek ugyanahhoz az összefüggő komponenséhez tartoznak, akkor 


<mml:math><mml:msup><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mo>*</mml:mo></mml:mrow></mml:msup><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo></mml:math>
egyébként 


<mml:math><mml:msup><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mo>*</mml:mo></mml:mrow></mml:msup><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:math></h:p>
<h:p>
<h:font color="#" size="-1&#10;">

<h:p><h:a name="id4526444"/>
<h:font color="#FF33FF" size=""><h:b>2.8. példa.</h:b></h:font> <h:i>Irányított gráf és minmátrixa.</h:i>
 Legyen 


<mml:math><mml:mi>G</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>V</mml:mi><mml:mo>,</mml:mo><mml:mi>E</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
egy irányított gráf, melynek csúcsait az 


<mml:math><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mi>n</mml:mi></mml:math>
számokkal címkézzük. Legyen 


<mml:math><mml:mi>M</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:math>
, ha 


<mml:math><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mi>j</mml:mi></mml:math>
vagy a gráf tartalmaz 


<mml:math><mml:mi>i</mml:mi></mml:math>
-ből 


<mml:math><mml:mi>j</mml:mi></mml:math>
-be vezető élet. Egyébként 


<mml:math><mml:mi>M</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
legyen 1. Ekkor 


<mml:math><mml:mi>M</mml:mi><mml:mo>∼</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
pontosan akkor nulla, amikor van az 


<mml:math><mml:mi>i</mml:mi></mml:math>
csúcsból a 


<mml:math><mml:mi>j</mml:mi></mml:math>
csúcsba vezető út. </h:p>
<h:p>A <h:a href="#id4526632">2.8</h:a>. ábra egy 6-csúcsú irányított gráfot, valamint a hozzá tartozó 


<mml:math><mml:mi>M</mml:mi></mml:math>
mátrixot és annak minmátrixát ábrázolja. </h:p>
</h:font>
</h:p>
<h:p>
<h:p><h:br/><h:center>
<h:img src="pics/p2-a8.gif">

</h:img>
<h:center><h:a name="id4526632"/>
<h:font color="#FF33FF" size=""><h:b>2.8. ábra.</h:b></h:font>
 Egy gráf és annak 


<mml:math><mml:mi>M</mml:mi></mml:math>
-je és 


<mml:math><mml:mi>M</mml:mi><mml:mo>∼</mml:mo></mml:math>
-je. </h:center><h:br/>
</h:center></h:p>
</h:p>
<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4526661">2.5.1. Minmátrix </h:a></h:font></h:strong>

<h:p>Több – gráfokkal kapcsolatos – feladat megoldását megkönnyíti a minmátrixok felhasználása. </h:p>
<h:p>A MINMÁTRIX <h:a name="id4526679"/>
 algoritmus meghatározza adott 


<mml:math><mml:mi>M</mml:mi></mml:math>
mátrix minmátrixát.
<h:p><h:br/><h:center><h:img src="pics/p2-p113.gif"/></h:center></h:p>
 Ezzel kapcsolatos a következő állítás. <h:a name="id4526701"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.25. 
<h:font color="#FF33FF" size="">tétel</h:font>
(minmátrix számítása). </h:b>
</h:font>
<h:i>Ha 


<mml:math><mml:mi>ε</mml:mi></mml:math>
tetszőleges pozitív szám, akkor a 


<mml:math><mml:mtext> MIN-MÁTRIX </mml:mtext></mml:math>
algoritmus 


<mml:math><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn><mml:mo>+</mml:mo><mml:mi>ε</mml:mi></mml:mrow></mml:msup></mml:math><mml:math><mml:mtext> CRCW PRAM </mml:mtext></mml:math>
processzoron 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben meghatározza egy 


<mml:math><mml:mi>n</mml:mi><mml:mo>×</mml:mo><mml:mi>n</mml:mi></mml:math>
méretű mátrix minmátrixát. </h:i>
</h:p>
  

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4526791">2.5.2. Tranzitív lezárt </h:a></h:font></h:strong>

<h:p>A <h:a href="#id4526701">2.25</h:a>. tétel segítségével belátható a következő állítás. <h:a name="id4526807"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.26. 
<h:font color="#FF33FF" size="">tétel</h:font>
(tranzitív lezárt számítása). </h:b>
</h:font>
<h:i>Ha 


<mml:math><mml:mi>ε</mml:mi></mml:math>
tetszőleges pozitív szám, akkor 


<mml:math><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn><mml:mo>+</mml:mo><mml:mi>ε</mml:mi></mml:mrow></mml:msup></mml:math><mml:math><mml:mtext> CRCW PRAM </mml:mtext></mml:math>
processzoron 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben meghatározható egy 


<mml:math><mml:mi>n</mml:mi></mml:math>
-csúcsú irányított gráf tranzitív lezártja. </h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 Ha 


<mml:math><mml:mi>M</mml:mi></mml:math>
-et a <h:a href="#id4526444">2.8</h:a>. példa szerint definiáljuk, akkor egy 


<mml:math><mml:mi>G</mml:mi></mml:math>
gráf tranzitív lezártja a minmátrix segítségével könnyen meghatározható.  <h:img src="pics/fkocka.gif"/><h:br/><h:br/></h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4526930">2.5.3. Összefüggő komponensek </h:a></h:font></h:strong>

<h:p>Ugyancsak a <h:a href="#id4526701">2.25</h:a>. tétel segítségével bizonyíthatjuk a következő állítást. <h:a name="id4526946"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.27. 
<h:font color="#FF33FF" size="">tétel</h:font>
(összefüggő komponensek számítása). </h:b>
</h:font>
<h:i>Ha 


<mml:math><mml:mi>ε</mml:mi></mml:math>
tetszőleges pozitív szám, akkor 


<mml:math><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn><mml:mo>+</mml:mo><mml:mi>ε</mml:mi></mml:mrow></mml:msup></mml:math><mml:math><mml:mtext> CRCW PRAM </mml:mtext></mml:math>
processzoron 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben meghatározhatók egy 


<mml:math><mml:mi>n</mml:mi></mml:math>
-csúcsú gráf összefüggő komponensei. </h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 Legyen 


<mml:math><mml:mi>M</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:math>
, ha 


<mml:math><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mi>j</mml:mi></mml:math>
vagy 


<mml:math><mml:mi>i</mml:mi></mml:math>
és 


<mml:math><mml:mi>j</mml:mi></mml:math>
össze vannak kötve egy éllel. Egyébként 


<mml:math><mml:mi>M</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
legyen 1. Az 


<mml:math><mml:mi>i</mml:mi></mml:math>
és 


<mml:math><mml:mi>j</mml:mi></mml:math>
csúcsok pontosan akkor vannak ugyanabban az összefüggő komponensben, ha 


<mml:math><mml:mi>M</mml:mi><mml:mo>∼</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>0</mml:mn><mml:mo>.</mml:mo></mml:math> <h:img src="pics/fkocka.gif"/><h:br/><h:br/></h:p>

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4527154">2.5.4. Minimális feszítőfa </h:a></h:font></h:strong>

<h:p>A soros Kruskal-algoritmus <h:a name="id4527165"/><h:a name="id4527170"/>
 párhuzamosításával belátható a következő állítás. <h:a name="id4527177"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>2.28. 
<h:font color="#FF33FF" size="">tétel</h:font>
(minimális feszítőfa). </h:b>
</h:font>
<h:i>. Ha 


<mml:math><mml:mi>ε</mml:mi></mml:math>
tetszőleges pozitív szám, akkor 


<mml:math><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>5</mml:mn><mml:mo>+</mml:mo><mml:mi>ε</mml:mi></mml:mrow></mml:msup></mml:math><mml:math><mml:mtext>CRCW PRAM </mml:mtext></mml:math>
processzoron 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben meghatározható egy 


<mml:math><mml:mi>n</mml:mi></mml:math>
-csúcsú élsúlyozott gráf minimális feszítőfája. </h:i>
</h:p>
  

<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4527259">2.5.5. Konvex burok </h:a></h:font></h:strong>

  
<h:br/><h:strong><h:font face="Arial" size="+1.2" color="#3300FF"><h:a name="id4527267">Gyakorlatok </h:a></h:font></h:strong>

<h:p>
<h:a name="id4527275"/>
</h:p>
  
<h:p>
<h:font color="#FF33FF" size=""><h:b>2.5–1.  </h:b></h:font>A globális memória 


<mml:math><mml:msub><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
rekeszében van bizonyos adat. Másoljuk át ezt az adatot az 


<mml:math><mml:msub><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:math><mml:math><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo></mml:math><mml:math><mml:msub><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:math>
rekeszekbe. Mutassuk meg, hogyan lehet ezt megvalósítani 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel 


<mml:math><mml:mi>n</mml:mi></mml:math>
EREW PRAM processzor felhasználásával. </h:p>
<h:p>
<h:a name="id4527376"/>
</h:p>
  
<h:p>
<h:font color="#FF33FF" size=""><h:b>2.5–2.  </h:b></h:font>
 Adjunk meg egy olyan algoritmust, amely 


<mml:math><mml:mi>n</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math><h:a name="id4527402"/>
 EREW PRAM processzor felhasználásával 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépéssel megoldja az előző gyakorlatot. <h:a name="id4527427"/></h:p>
  
<h:p>
<h:font color="#FF33FF" size=""><h:b>2.5–3.  </h:b></h:font>
 Legyen 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:msup><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msup><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:msup><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup><mml:mo>+</mml:mo><mml:mo>⋯</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mi>x</mml:mi><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>.</mml:mo></mml:math>
Adjunk 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
idejű CREW PRAM algoritmust a polinom értékének adott 


<mml:math><mml:mi>x</mml:mi></mml:math>
helyen való kiszámítására. </h:p>
<h:p>Mennyi processzort igényel a javasolt algoritmus? <h:a name="id4527555"/></h:p>
  
<h:p>
<h:font color="#FF33FF" size=""><h:b>2.5– 4.  </h:b></h:font>
 Adjunk meg egy 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
idejű algoritmust, amely 


<mml:math><mml:mi>n</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math>
közös CRCW PRAM <h:a name="id4527602"/>
 processzoron 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben megadja 


<mml:math><mml:mi>n</mml:mi></mml:math>
tetszőleges szám maximumát. <h:a name="id4527635"/></h:p>
  
<h:p>
<h:font color="#FF33FF" size=""><h:b>2.5–5.  </h:b></h:font>
 Legyen 


<mml:math><mml:mi>A</mml:mi></mml:math>
egy 


<mml:math><mml:mi>n</mml:mi></mml:math>
kulcsot tartalmazó tömb. Mutassuk meg, hogy 


<mml:math><mml:mi>n</mml:mi><mml:mo>/</mml:mo><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:math>
CREW PRAM processzoron 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>log</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben meghatározható tetszőleges 


<mml:math><mml:mi>k</mml:mi><mml:mo>∈</mml:mo><mml:mi>A</mml:mi></mml:math>
kulcs rangja. <h:a name="id4527702"/></h:p>
  
<h:p>
<h:font color="#FF33FF" size=""><h:b>2.5–6.  </h:b></h:font>
 Tervezzünk egy 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésszámú algoritmust, amely 


<mml:math><mml:mi>n</mml:mi></mml:math>
közös CRCW PRAM processzoron eldönti, hogy adott 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
tömb elemei között előfordul-e az 5, és ha igen, megadja a legnagyobb olyan 


<mml:math><mml:mi>i</mml:mi></mml:math>
indexet, amelyre 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>5</mml:mn><mml:mo>.</mml:mo></mml:math><h:a name="id4527786"/></h:p>
  
<h:p>
<h:font color="#FF33FF" size=""><h:b>2.5–7.  </h:b></h:font>
 Tervezzünk algoritmust, amely 


<mml:math><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:math>
CREW PRAM processzoron 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben összefésül két 


<mml:math><mml:mi>n</mml:mi></mml:math>
hosszúságú rendezett sorozatot. <h:a name="id4527836"/></h:p>
  
<h:p>
<h:font color="#FF33FF" size=""><h:b>2.5–8.  </h:b></h:font>
 Határozzuk meg a fejezetben tárgyalt algoritmusok relatív sebességét, összes lépésszámát és hatékonyságát. <h:a name="id4527853"/><h:a name="id4527858"/><h:a name="id4527863"/></h:p>



<h:br/><h:center><h:strong><h:font face="Arial" size="+2" color="#3300FF"><h:a name="id4527872"> 
 Feladatok </h:a></h:font></h:strong></h:center>

<h:p><h:a name="id4527879"/><h:b><h:i>2-1. Közös elem <h:br/></h:i></h:b>
 Tervezzünk algoritmust annak eldöntésére, hogy adott 


<mml:math><mml:mi>A</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
és 


<mml:math><mml:mi>B</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mi>n</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
tömböknek van-e közös eleme:
<h:b>a.</h:b>
 ha 


<mml:math><mml:msup><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:math>
CRCW PRAM processzorunk van, akkor 


<mml:math><mml:mi>O</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésszámút; <h:a name="id4527962"/><h:b>b.</h:b>
 ha 


<mml:math><mml:mi>n</mml:mi></mml:math>
CRCW PRAM processzorunk van, akkor 


<mml:math accent="true"><mml:mover accent="true"><mml:mrow><mml:mi>O</mml:mi></mml:mrow><mml:mo>¯</mml:mo></mml:mover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésszámút. <h:br/><h:br/><h:a name="id4528000"/><h:b><h:i>2-2. Minimális feszítőfa <h:br/></h:i></h:b><h:a name="id4528007"/><h:a name="id4528012"/><h:a name="id4528018"/><h:a name="id4528024"/>
 Párhuzamosítsuk a minimális feszítőfák meghatározására szolgáló Kruskal-algoritmust és Primalgoritmust. Tervezzünk algoritmust arra a speciális esetre, amikor az élek súlya csak 0 vagy 1 lehet. <h:br/><h:br/><h:a name="id4528039"/><h:b><h:i>2-3. Összes csúcspár távolsága <h:br/></h:i></h:b>
 Párhuzamosítsuk a gráfok összes csúcspárjának távolságát meghatározó Bellman– Ford-algoritmust. <h:a name="id4528051"/><h:a name="id4528056"/><h:a name="id4528061"/><h:br/><h:br/><h:a name="id4528070"/><h:b><h:i>2-4. Körmentesség <h:br/></h:i></h:b>
 Tervezzünk <h:a name="id4528079"/>
 párhuzamos algoritmust annak eldöntésére, hogy adott irányítatlan gráf tartalmaz-e kört. Elemezzük a különböző nagyságrendű processzorszám esetében elérhető 


<mml:math><mml:mi>W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mtext> P </mml:mtext></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
futási időket. <h:br/></h:p>


<h:br/><h:br/><h:center><h:strong><h:font face="Arial" size="+2.5" color="#3300FF"><h:a name="id4528119">3. Rácsok</h:a></h:font></h:strong></h:center>

<h:p><h:a name="id4528128"/>
 Ebben a fejezetben rácsokat (láncot, négyzetet és kockát) alkalmazunk számítási modellként. <h:a name="id4528138"/><h:a name="id4528143"/><h:a name="id4528148"/><h:a name="id4528153"/><h:a name="id4528159"/><h:a name="id4528164"/><h:a name="id4528169"/></h:p>
<h:br/><h:center><h:strong><h:font face="Arial" size="+2" color="#3300FF"><h:a name="id4528176">3.1. Számítási modellek </h:a></h:font></h:strong></h:center>

<h:p>A 


<mml:math><mml:mi>k</mml:mi></mml:math>
dimenziós 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mo>≥</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
dimenziós rács <h:a name="id4528210"/>
 egy <h:a name="id4528217"/>
 olyan 


<mml:math><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>×</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>×</mml:mo><mml:mo>⋯</mml:mo><mml:mo>×</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:math> <mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>≥</mml:mo><mml:mn>2</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
méretű háló, amelynek minden egyes metszéspontjában van egy processzor. Az élek a kommunikációs vonalak, melyek <h:a name="id4528313"/>
 kétirányúak. A rács egy processzorát megcímkézzük egy 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math><mml:math><mml:mi>k</mml:mi></mml:math>-assal, – erre a processzorra a 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub></mml:math>
jelöléssel hivatkozunk. </h:p>
<h:p>Minden processzor egy RAM, <h:a name="id4528412"/>
 amely rendelkezik saját (helyi) memóriával. A 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub></mml:math>
processzor saját memóriája az 


<mml:math><mml:mi>M</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mi>M</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mn>2</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mi>M</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mi>m</mml:mi></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:math>
rekeszekből áll. </h:p>
<h:p>Minden processzor végre tud hajtani egyetlen lépésben olyan alapvető műveleteket, mint az összeadás, kivonás, szorzás, összehasonlítás, saját memória elérése és így tovább. A processzorok működése szinkron módon történik, azaz minden processzor egy globális óra ütemére egyszerre hajtja végre az aktuális feladatát. </h:p>
<h:p>A legegyszerűbb rács a 


<mml:math><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:math>
értékhez tartozó lánc alakú rács (röviden 
<h:font color="#3300FF" size=""><h:b><h:i>lánc</h:i></h:b></h:font>
). <h:a name="id4528626"/>
 Egy 6 processzoros lánc <h:a name="id4528633"/>
 látható a <h:a href="#id4528649">3.1</h:a>. ábrán. 
<h:p><h:br/><h:center><h:img src="pics/p3-a1.gif"/><h:center><h:a name="id4528649"/>
<h:font color="#FF33FF" size=""><h:b>3.1. ábra.</h:b></h:font>
 6 processzoros lánc. </h:center><h:br/></h:center></h:p>
 Egy lánc processzorai 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msub></mml:math>
. Ezek a következőképpen vannak összekötve. </h:p>
<h:p><mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
és 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msub></mml:math>
kivételével mindegyik processzor össze van kötve a nála eggyel nagyobb (jobb szomszéd), illetve eggyel kisebb (bal szomszéd) indexűvel, míg a két szélső processzornak csak egy szomszédja van, 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math>
, illetve 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
. Az összeköttetés kétirányú. </h:p>
<h:p>Ha 


<mml:math><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo></mml:math>
akkor téglalap alakú rácsot kapunk. <h:a name="id4528779"/><h:a name="id4528784"/>
 Ha most 


<mml:math><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mi>p</mml:mi></mml:ci></mml:apply><mml:mo>=</mml:mo><mml:mi>a</mml:mi><mml:mo>,</mml:mo></mml:math>
akkor 


<mml:math><mml:mi>a</mml:mi><mml:mo>×</mml:mo><mml:mi>a</mml:mi></mml:math>
méretű 
<h:font color="#3300FF" size=""><h:b><h:i>négyzetet</h:i></h:b></h:font><h:a name="id4528845"/>
 kapunk. </h:p>
<h:p><h:a name="id4528853"/>
 Egy 


<mml:math><mml:mn>4</mml:mn><mml:mo>×</mml:mo><mml:mn>4</mml:mn></mml:math>
méretű négyzet látható a <h:a href="#id4528880">3.2</h:a>. ábrán. 
<h:p><h:br/><h:center><h:img src="pics/p3-a2.gif"/><h:center><h:a name="id4528880"/>
<h:font color="#FF33FF" size=""><h:b>3.2. ábra.</h:b></h:font><mml:math><mml:mn>4</mml:mn><mml:mo>×</mml:mo><mml:mn>4</mml:mn></mml:math>
méretű négyzet. </h:center><h:br/></h:center></h:p>
 Egy 


<mml:math><mml:mi>a</mml:mi><mml:mo>×</mml:mo><mml:mi>a</mml:mi></mml:math>
méretű négyzet tartalmaz részgráfként számos 


<mml:math><mml:mi>a</mml:mi></mml:math>
processzoros láncot. A rács algoritmus egyes lépései gyakran tekinthetők láncokon végzett műveleteknek. A processzorok közötti kommunikáció bármely rögzített összekötöttségű gépben kommunikációs láncok segítségével történik. Ha két olyan processzor akar kommunikálni egymással, amik egy éllel össze vannak kötve, akkor azt egyetlen lépésben elvégezhetik. Ha nincs közöttük él, akkor az őket összekötő utak valamelyikén történhet meg a kommunikáció, tehát a szükséges lépésszám (legalábbis rövid üzenetek esetén) függ az út hosszától. Feltesszük, hogy egy processzor egyetlen lépésben képes végrehajtani egy számítást és/vagy kommunikálni akár mind a négy szomszédjával. </h:p>
<h:p>Egy rácsban azok a processzorok, amelyeknek első (második) koordinátája megegyezik, egy sort (oszlopot) alkotnak. Például egy 


<mml:math><mml:mi>a</mml:mi><mml:mo>×</mml:mo><mml:mi>a</mml:mi></mml:math>
méretű négyzetben az 


<mml:math><mml:mi>i</mml:mi></mml:math>
-edik sor a 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>a</mml:mi></mml:mrow></mml:msub></mml:math>
processzorokból áll. Mindegyik sor vagy oszlop egy 


<mml:math><mml:mi>a</mml:mi></mml:math>
processzoros lánc. Egy rács algoritmus gyakran áll olyan lépésekből, melyeket csak bizonyos sorokban vagy oszlopokban lévő processzorok végeznek el. </h:p>
<h:p>Ha 


<mml:math><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>3</mml:mn></mml:math>
, akkor tégla alakú <h:a name="id4529048"/>
 rácsot kapunk. Az 


<mml:math><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo></mml:math><mml:math><mml:msup><mml:mrow><mml:mi/></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:apply><mml:root/><mml:degree><mml:cn>2</mml:cn></mml:degree><mml:ci><mml:mi>p</mml:mi></mml:ci></mml:apply></mml:math>
speciális esetben 
<h:font color="#3300FF" size=""><h:b><h:i>kockáról</h:i></h:b></h:font><h:a name="id4529112"/><h:a name="id4529116"/>
 és a kocka méretére az 


<mml:math><mml:mi>n</mml:mi><mml:mo>×</mml:mo><mml:mi>n</mml:mi><mml:mo>×</mml:mo><mml:mi>n</mml:mi></mml:math>
jelölést alkalmazzuk. </h:p>
<h:p>A <h:a href="#id4529168">3.3</h:a>. ábra egy 


<mml:math><mml:mn>2</mml:mn><mml:mo>×</mml:mo><mml:mn>2</mml:mn><mml:mo>×</mml:mo><mml:mn>2</mml:mn></mml:math>
méretű kockát ábrázol. 
<h:p><h:br/><h:center><h:img src="pics/p3-a3.gif"/><h:center><h:a name="id4529168"/>
<h:font color="#FF33FF" size=""><h:b>3.3. ábra.</h:b></h:font><mml:math><mml:mn>2</mml:mn><mml:mo>×</mml:mo><mml:mn>2</mml:mn><mml:mo>×</mml:mo><mml:mn>2</mml:mn></mml:math>
méretű kocka. </h:center><h:br/></h:center></h:p></h:p>

<h:br/><h:center><h:strong><h:font face="Arial" size="+2" color="#3300FF"><h:a name="id4529195">3.2. Csomagirányítás </h:a></h:font></h:strong></h:center>

<h:p>A processzorok közötti kommunikáció egyetlen lépése egy rögzített szerkezetű hálózatban a következő – 
<h:font color="#3300FF" size=""><h:b><h:i>csomagirányítási problémának</h:i></h:b></h:font><h:a name="id4529218"/>
 nevezett – feladatként fogható fel. A hálózatban minden processzornak van egy adatcsomagja, amit egy másik processzornak akar elküldeni. A feladat a csomagok eljuttatása a céljukhoz a lehető leggyorsabban úgy, hogy egy lépésben egy kommunikációs csatornán egy irányban egyszerre csak egy csomag utazhat. Az utóbbi feltételre a csatorna sávszélességének korlátozottsága miatt van szükség. </h:p>
<h:p>Könnyen előfordulhat, hogy egy adott lépésben kettő vagy több csomag érkezik egy processzorhoz, és mindegyik ugyanazon a csatornán szeretne továbbhaladni. </h:p>
<h:p>Ilyen esetben természetesen csak egy csomag utazhat a következő lépésben, a többiek pedig a processzornál egy várakozási sorba kerülnek a későbbi továbbküldés miatt. Egy 
<h:font color="#3300FF" size=""><h:b><h:i>elsőbbségi szabály</h:i></h:b></h:font><h:a name="id4529261"/><h:a name="id4529266"/>
 alapján döntjük el, hogy melyik csomagot küldjük el ilyen esetekben. Ilyen elsőbbségi szabályok például az FDF (
<h:b>F</h:b>arthest 
<h:b>D</h:b>estination 
<h:b>F</h:b>irst) <h:a name="id4529288"/><h:a name="id4529294"/>
 FOF (
<h:b>F</h:b>arthest 
<h:b>O</h:b>rigin), 
<h:b>F</h:b>irst) <h:a name="id4529312"/>
, <h:a name="id4529319"/>
 FIFO <h:a name="id4529327"/><h:a name="id4529332"/>
, <h:a name="id4529338"/>RAN (véletlenül választunk). <h:a name="id4529347"/><h:a name="id4529352"/>
 A csomagirányítási feladat egy speciális esete a 
<h:font color="#3300FF" size=""><h:b><h:i>parciális permutációs csomagirányítás</h:i></h:b></h:font>
 (
<h:b>P</h:b>artial 
<h:b>P</h:b>ermutation 
<h:b>R</h:b>outing). <h:a name="id4529381"/><h:a name="id4529387"/>
 A PPR-ben minden processzornak legfeljebb egy elküldendő csomagja van, és egy adott processzorhoz legfeljebb egy csomagot kell küldenünk. A PPR-t egy ERCW <h:a name="id4529400"/>
 PRAM <h:a name="id4529407"/>
 gépen egy párhuzamos írással megoldhatjuk. De egy általános rögzített összekötöttségű hálózatban a probléma gyakran igen bonyolult. Tipikusan a bemenet egy bizonyos sorrendben kerül a processzorokhoz, és a kimenetnek úgyszintén egy előre megadott sorrendben kell megjelennie. Csupán egy ilyen sorrend átrendezés néha több PPR-t igényelhet. Ezért bármely nem triviális rögzített összekötöttségű hálózati algoritmus tervezéséhez szükség van PPRekre. Ez az egyik lényeges különbség a hálózati és a PRAM algoritmusok között. </h:p>
<h:p>Egy csomagirányítási algoritmus legfontosabb jellemzői a 
<h:i>futási ideje</h:i><h:a name="id4529431"/><h:a name="id4529436"/>
 amíg az utolsó csomag is eléri a célját, és a 
<h:font color="#3300FF" size=""><h:b><h:i>várakozási sor hossza</h:i></h:b></h:font><h:a name="id4529453"/>
 ami az egy processzornál maximálisan várakozó csomagok száma. A sor lehetséges hosszát alulról korlátozza az egy processzortól induló, valamint az egy processzorhoz érkező csomagok maximális száma. Feltételezzük, hogy a csomag nemcsak a küldendő információt tartalmazza, hanem a küldő és a célprocesszor azonosítóját is. Egy csomagirányítási algoritmus bemenő adatai a csomagok indulási helye és célja, valamint a használni kívánt elsőbbségi szabály. Egy csomag utazásának lépésszáma az indulás és a cél között megtett út és a sorokban eltöltött várakozás hosszától függ. 
</h:p>
<h:p>
<h:font color="#" size="-1&#10;">

<h:p><h:a name="id4529480"/>
<h:font color="#FF33FF" size=""><h:b>3.1. példa.</h:b></h:font><h:i>4 csomag irányítása.</h:i>
 Tekintsük az 


<mml:math><mml:mi>a</mml:mi><mml:mo>,</mml:mo><mml:mi>b</mml:mi><mml:mo>,</mml:mo><mml:mi>c</mml:mi><mml:mo>,</mml:mo><mml:mi>d</mml:mi></mml:math>
csomagokat a <h:a href="#id4529688">3.4</h:a>. ábra (a) részén. A rendeltetési helyüket az ábra (g) része mutatja. </h:p>
<h:p>Használjuk a FIFO <h:a name="id4529524"/>
 elsőbbségi szabályt úgy, hogy holtverseny esetén önkényesen döntsünk valamelyik csomag a javára. A csomagok a lehető legrövidebb úton közlekedjenek. A 


<mml:math><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:math>
sorszámú lépésben minden csomag eggyel közelebb kerül a céljához. Ennek eredményeként az 


<mml:math><mml:mi>a</mml:mi></mml:math>
és a 


<mml:math><mml:mi>b</mml:mi></mml:math>
ugyanazon a ponton vannak, tehát a 


<mml:math><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn>2</mml:mn></mml:math>
sorszámú lépésben valamelyiket várakoztatni kell. Mivel mindketten egyszerre érkeztek, ezért ez egy holtverseny. Önkényesen döntünk, ezért nyerjen mondjuk 


<mml:math><mml:mi>a</mml:mi><mml:mo>.</mml:mo></mml:math>
Ugyanebben a lépésben még 


<mml:math><mml:mi>c</mml:mi></mml:math>
és 


<mml:math><mml:mi>d</mml:mi></mml:math>
is csatlakozik 


<mml:math><mml:mi>b</mml:mi></mml:math>
-hez. A következő lépésben 


<mml:math><mml:mi>b</mml:mi></mml:math>
fog továbbmenni, mivel ő előbb érkezett, és ezért elsőbbsége van a többihez képest. A negyedik lépésben 


<mml:math><mml:mi>c</mml:mi></mml:math>
és 


<mml:math><mml:mi>d</mml:mi></mml:math>
holtversenyben küzd a továbbhaladásért. Legyen 


<mml:math><mml:mi>d</mml:mi></mml:math>
a győztes, aki tovább haladhat. További két lépésben 


<mml:math><mml:mi>c</mml:mi></mml:math>
is eljut a céljába. Ekkorra minden csomag megérkezett. </h:p>
<h:p>Az 


<mml:math><mml:mi>a</mml:mi></mml:math>
csomagnak öt élen kellett áthaladnia, és közben sehol sem várt – ezért öt időegység alatt ért célba. A 


<mml:math><mml:mi>c</mml:mi></mml:math>
csomagnak négy élen kellett átutaznia, és két alkalommal várt, ezért hat időegység alatt ért célba – ez adja az algoritmus futási idejét. Vajon más elsőbbségi szabályt használva csökkenhet a lépésszám? Játsszuk végig az előző példát az FDF szabállyal. Ekkor a futási idő öt időegység lesz. </h:p>
</h:font>
</h:p>
<h:p>
<h:p><h:br/><h:center>
<h:img src="pics/p3-a4.gif">

</h:img>
<h:center><h:a name="id4529688"/>
<h:font color="#FF33FF" size=""><h:b>3.4. ábra.</h:b></h:font>
 Példa csomagirányításra. </h:center><h:br/>
</h:center></h:p>
</h:p>
<h:br/><h:strong><h:font face="Arial" size="+1.5" color="#3300FF"><h:a name="id4529703">3.2.1. Csomagirányítás láncon </h:a></h:font></h:strong>

<h:p>Egy láncon, mivel az összekötöttség kétirányú, a processzor egyszerre küldhet és fogadhat a szomszédjaitól üzeneteket. Ennek következtében két ellentétes irányú csomaglánc nem zavarja egymást. Ebben a részben megmutatjuk, hogy a PPR <h:a name="id4529722"/>
 láncon megoldható legfeljebb 


<mml:math><mml:mi>p</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:math>
lépésben. Vegyük észre, hogy a legrosszabb esetben legalább 


<mml:math><mml:mi>p</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:math>
lépés kell, hiszen ez a lehető legnagyobb távolság két processzor között. Láncon PPR-en kívül vizsgálunk még néhány általánosabb csomagirányítási feladatot is. 
</h:p>
<h:p>
<h:font color="#" size="-1&#10;">

<h:p><h:a name="id4529768"/>
<h:font color="#FF33FF" size=""><h:b>3.2. példa.</h:b></h:font><h:i>Független csomagáramok.</h:i>
 A <h:a href="#id4529884">3.5</h:a>. ábrán a balról jobbra haladó csomagokat körökkel, a jobbról balra haladó csomagokat pedig pipával jelöltük. feltesszük, hogy a balra haladó csomagok célja 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:math>
a jobbra haladó csomagoké pedig 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msub><mml:mo>.</mml:mo></mml:math>
Például az 


<mml:math><mml:mi>a</mml:mi></mml:math>
és 


<mml:math><mml:mi>b</mml:mi></mml:math>
csomagoknak egyidejűleg van szüksége ugyanarra az élre, amikor az első lépést megteszik (ellenkező irányban). Mivel az élek kétirányúak, nincs verseny, a csomagok használhatják egyszerre az élet. Mivel a 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
processzortól induló csomagnak 


<mml:math><mml:mi>p</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:math>
élen kell keresztül haladnia, ezért a célba éréshez legalább 


<mml:math><mml:mi>p</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:math>
lépésre van szüksége. </h:p>
</h:font>
</h:p>
<h:p><h:p><h:br/><h:center><h:img src="pics/p3-a5.gif"/><h:center><h:a name="id4529884"/>
<h:font color="#FF33FF" size=""><h:b>3.5. ábra.</h:b></h:font>
 A jobbra és balra haladó csomagáramok függetlenek. </h:center><h:br/></h:center></h:p>
 Tegyük fel, hogy egy 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzorból álló láncban minden processzor legfeljebb egy üzenetet küld, az üzenetek célja tetszőleges lehet. Továbbítsuk a csomagokat a célprocesszorokhoz. Ezt a feladatot 
<h:font color="#3300FF" size=""><h:b><h:i>egy kezdőcsomagos feladatnak</h:i></h:b></h:font>
 nevezzük. <h:a name="id4529919"/><h:a name="id4529924"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>3.1. lemma(egy kezdőcsomagos feladat). </h:b>
</h:font>
<h:i>Az egy kezdőcsomagos feladat egy p processzoros láncon megoldható legfeljebb 


<mml:math><mml:mi>p</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:math>
lépésben. </h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 Minden 


<mml:math><mml:mi>q</mml:mi></mml:math>
üzenetet küldhetünk a kezdő és a végpont közötti legrövidebb úton. Tekintsük csak azokat az üzeneteket, amelyek balról jobbra utaznak, hiszen a jobbról balra utazókat teljesen hasonlóan függetlenül vizsgálhatjuk. Ha 


<mml:math><mml:mi>q</mml:mi></mml:math>
a 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
processzortól indul és 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math>
felé tart, akkor 


<mml:math><mml:mi>j</mml:mi><mml:mo>−</mml:mo><mml:mi>i</mml:mi></mml:math>
lépésben éri azt el, hiszen sosem kell várakoznia egy másik üzenetre. A leghosszabb ilyen út 1-től 


<mml:math><mml:mi>p</mml:mi></mml:math>-ig vezet, ezért 


<mml:math><mml:mi>p</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:math>
felső korlát a lépésszámra. Az egy csúcsba küldött csomagok maximális száma jellemzi az algoritmus várakozási sorának hosszát. </h:p>
<h:p> <h:img src="pics/fkocka.gif"/><h:br/><h:br/>Adott egy 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzorból álló lánc. A 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>
processzor 


<mml:math><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>0</mml:mn><mml:mo>≤</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>≤</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
üzenetet akar küldeni és 


<h:table width="100%"><h:tr><h:td align="center" width="90%"><mml:math display="block"><mml:mtable><mml:mtr><mml:mtd><mml:msubsup><mml:mrow><mml:mo>∑</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msubsup><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mi>p</mml:mi><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></h:td><h:td align="right" valign="top"><h:a name="id4530123">(3.1)</h:a></h:td></h:tr></h:table>
Nincs két olyan üzenet, amelyeket azonos processzorhoz kellene küldeni. Továbbítsuk a csomagokat a célprocesszorokhoz. Ezt a feladatot 
<h:font color="#3300FF" size=""><h:b><h:i>egy célcsomagos feladatnak</h:i></h:b></h:font>
 nevezzük. <h:a name="id4530171"/><h:a name="id4530177"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>3.2. lemma(egy célcsomagos feladat). </h:b>
</h:font>
<h:i>Ha az FDF <h:a name="id4530195"/>
 elsőbbségi szabályt használjuk, akkor az egy célcsomagos feladat egy p processzoros láncon megoldható legfeljebb 


<mml:math><mml:mi>p</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:math>
lépés alatt. </h:i>
</h:p>
<h:p>
<h:font color="#FF33FF" size=""><h:b>Bizonyítás.</h:b></h:font>
<h:font color="#FF33FF" size=""><h:b/></h:font>
 Tegyük fel, hogy 


<mml:math><mml:mi>q</mml:mi></mml:math>
üzenet 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>-ből 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math>-be megy. Az általánosság megszorítása nélkül feltehetjük, hogy a csomag balról jobbra halad. A jobbról balra haladó csomagoktól eltekinthetünk hasonló okok miatt, mint az előző lemmánál. Minden csomag a lehető legrövidebb úton halad, ami a mi esetünkben 


<mml:math><mml:mi>j</mml:mi><mml:mo>−</mml:mo><mml:mi>i</mml:mi></mml:math>
lépést jelent. Ne feledkezzünk meg azonban azokról a csomagokról, amelyek 


<mml:math><mml:mi>j</mml:mi></mml:math>-nél nagyobb indexű processzorokhoz utaznak, mivel ezek (és csak ezek) megvárakoztathatják 


<mml:math><mml:mi>q</mml:mi></mml:math>-t. Ezen csomagok száma legfeljebb 


<mml:math><mml:mi>p</mml:mi><mml:mo>−</mml:mo><mml:mi>j</mml:mi><mml:mo>.</mml:mo></mml:math>
Jelölje 


<mml:math><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
a kezdeti állapotban rendre a 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
processzortól induló ilyen csomagok számát. Jelölje 


<mml:math><mml:mi>m</mml:mi></mml:math>
minden lépés után azt az indexet, melyre 


<mml:math><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>&gt;</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo></mml:math>
és ha 


<mml:math><mml:mi>m</mml:mi><mml:mo>≤</mml:mo><mml:mi>s</mml:mi><mml:mo>≤</mml:mo><mml:mi>j</mml:mi><mml:mo>,</mml:mo></mml:math>
akkor 


<mml:math><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>s</mml:mi></mml:mrow></mml:msub><mml:mo>≤</mml:mo><mml:mn>1</mml:mn><mml:mo>.</mml:mo></mml:math>
Nevezzük a 


<mml:math><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math>
sorozatot 
<h:font color="#3300FF" size=""><h:b><h:i>szabad sorozatnak.</h:i></h:b></h:font><h:a name="id4530521"/>
 Vegyük észre, hogy az elkövetkezőkben a szabad sorozatban egyik csomag sem fog várakozni. Ezenfelül minden egyes lépésben legalább egy csomag csatlakozik a szabad sorozathoz. </h:p>
<h:p>A <h:a href="#id4530628">3.6</h:a>. ábra <h:a name="id4530540"/>
 egy szabad sorozatot mutat. Az ábrán a számok a megfelelő processzoroknál (melyeknek csak az indexe szerepel az ábrán) lévő csomagok számát mutatják. Például a nulladik lépésben 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math>-nél 3 csomag van és 1, 0, 1, 1 a szabad sorozat. A következő lépésben 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
egy, majd az azt követő lépésben 


<mml:math><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mn>2</mml:mn></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
4 új csomag csatlakozik a szabad sorozatban lévő csomagokhoz. </h:p>
<h:p><h:p><h:br/><h:center><h:img src="pics/p3-a6.gif"/><h:center><h:a name="id4530628"/>
<h:font color="#FF33FF" size=""><h:b>3.6. ábra.</h:b></h:font>
 Szabad sorozat. </h:center><h:br/></h:center></h:p>
 Így legfeljebb 


<mml:math><mml:mi>p</mml:mi><mml:mo>−</mml:mo><mml:mi>j</mml:mi></mml:math>
lépés után minden olyan csomag csatlakozott a szabad sorozathoz, amely miatt 


<mml:math><mml:mi>q</mml:mi></mml:math>
várakozásra kényszerülhet. Ezt a helyzetet mutatja a <h:a href="#id4530713">3.7</h:a>. ábra: a 


<mml:math><mml:mi>q</mml:mi></mml:math>
csomagnak a legfeljebb 


<mml:math><mml:mi>p</mml:mi><mml:mo>−</mml:mo><mml:mi>j</mml:mi></mml:math>
lépésnyi várakozáson felül 


<mml:math><mml:mi>j</mml:mi><mml:mo>−</mml:mo><mml:mi>i</mml:mi></mml:math>
lépést kell tennie, ezért legfeljebb 


<mml:math><mml:mi>p</mml:mi><mml:mo>−</mml:mo><mml:mi>i</mml:mi></mml:math>
lépés után célba ér. </h:p>
<h:p><h:p><h:br/><h:center><h:img src="pics/p3-a7.gif"/><h:center><h:a name="id4530713"/>
<h:font color="#FF33FF" size=""><h:b>3.7. ábra.</h:b></h:font>
 A <h:a href="#id4529924">3.1</h:a>. lemma bizonyításának szemléltetése </h:center><h:br/></h:center></h:p>
 A jobbról balra haladó csomagok esetében hasonlóan belátható, hogy legfeljebb 


<mml:math><mml:mi>i</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:math>
lépésben megérkeznek a rendeltetési helyükre.  <h:img src="pics/fkocka.gif"/><h:br/><h:br/>Most definiáljuk az 
<h:font color="#3300FF" size=""><h:b><h:i>általános csomagirányítási</h:i></h:b></h:font>
 feladatot. <h:a name="id4530762"/>
 Tételezzük fel, hogy egy 


<mml:math><mml:mi>p</mml:mi></mml:math>
processzoros láncon több csomag származhat egy processzortól és több csomagot küldhetünk egy processzorhoz. Továbbá a 


<mml:math><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>,</mml:mo><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
processzoroktól összesen induló csomagok száma nem több, mint 


<mml:math><mml:mi>j</mml:mi><mml:mo>+</mml:mo><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mi>p</mml:mi></mml:math>
valamely rögzített 


<mml:math><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
függvényére. Továbbítsuk a csomagokat a célprocesszorokhoz. <h:a name="id4530890"/></h:p>
<h:p>
<h:font color="#FF33FF" size="">

<h:b>3.3. lemma(Általános csomagirányítási feladat). </h:b>
</h:font>
<h:i>Ha a FOF elsőbbségi szabályt használjuk, akkor az általános csomagirányítási probléma megoldható 


<mml:math><mml:mi>p</mml:mi><mml:mo>+</mml:mo><mml:mi>f</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
lépésben. </h:i>
