Optimálne algoritmy. Aké je najrýchlejšie triedenie? Testovacie algoritmy

  • 28.06.2019

Optimalizácia algoritmu vyvinutého programu
Fáza vývoja algoritmu pre vašu aplikáciu je najťažšia v celom reťazci životného cyklu programu. Úspech jeho implementácie vo forme programového kódu do značnej miery závisí od toho, ako hlboko sú premyslené všetky aspekty vašej úlohy. Vo všeobecnosti majú zmeny v štruktúre samotného programu oveľa väčší účinok ako doladenie programového kódu. Neexistujú žiadne ideálne riešenia a vývoj aplikačného algoritmu je vždy sprevádzaný chybami a chybami. Tu je dôležité nájsť úzke miesta v algoritme, ktoré najviac ovplyvňujú výkonnosť aplikácie.

Navyše, ako ukazuje prax, je takmer vždy možné nájsť spôsob, ako zlepšiť už vyvinutý algoritmus programu. Samozrejme, je najlepšie starostlivo vyvinúť algoritmus na začiatku návrhu, aby sa v budúcnosti zabránilo mnohým nepríjemným následkom spojeným s dokončením fragmentov programového kódu v krátkom časovom období. Nájdite si čas na vývoj aplikačného algoritmu - ušetrí vám to bolesti hlavy pri ladení a testovaní programu a ušetrí vám to čas.

Je potrebné mať na pamäti, že algoritmus, ktorý je účinný z hľadiska výkonu programu, nikdy nespĺňa požiadavky na nastavenie problému na 100% a naopak. Algoritmy, ktoré nie sú zlé z hľadiska štruktúry a čitateľnosti, spravidla nie sú účinné z hľadiska implementácie programového kódu. Jedným z dôvodov je túžba vývojára zjednodušiť celkovú štruktúru programu pomocou vnorených štruktúr na vysokej úrovni, kdekoľvek je to možné. Zjednodušenie algoritmu v tomto prípade nevyhnutne vedie k zníženiu výkonu programu.

Na začiatku vývoja algoritmu je dosť ťažké posúdiť, aký bude aplikačný kód. Ak chcete správne navrhnúť programový algoritmus, musíte dodržať niekoľko jednoduchých pravidiel:
1. Starostlivo si preštudujte úlohu, pre ktorú bude program vyvinutý.
2. Určte základné požiadavky na program a predložte ich vo formálnej forme.
3. Určte formu prezentácie. vstupné a výstupné údaje a ich štruktúra, ako aj možné obmedzenia.
4. Na základe týchto údajov určte verziu programu (alebo model) implementácie úlohy.
5. Vyberte spôsob implementácie úlohy.
6. Vypracujte algoritmus na implementáciu programového kódu. Algoritmus na vyriešenie problému by sa nemal zamieňať s algoritmom na implementáciu programového kódu.
Vo všeobecnosti sa nikdy nezhodujú. Toto je najdôležitejšia fáza vývoja softvéru!
7. Vytvorte zdrojový kód programu v súlade s implementačným algoritmom programového kódu.
8. Ladte a vyskúšajte programový kód vyvíjanej aplikácie.

Tieto pravidlá by nemali byť brané doslovne. V každom konkrétnom prípade si programátor sám zvolí metodiku vývoja programov. Niektoré fázy vývoja aplikácií môžu byť podrobnejšie popísané a niektoré môžu úplne chýbať. Pri malých úlohách stačí vyvinúť algoritmus, mierne ho vyladiť, aby sa implementoval programový kód, a potom ho odladiť.

Pri vytváraní veľkých aplikácií môže byť potrebné vyvinúť a testovať oddelené fragmenty programového kódu, čo môže vyžadovať dodatočné spresnenie algoritmu programu.
Programátorovi môže pri správnej algoritmizácii úloh pomôcť množstvo literárnych zdrojov. Princípy vytvárania efektívnych algoritmov sú dobre rozvinuté. Na túto tému je veľa dobrej literatúry, napríklad kniha D. Knutha „Umenie programovania“.

Optimalizované pre hardvér počítača
Vývojár softvéru sa spravidla snaží zaistiť, aby výkonnosť aplikácie bola čo najmenej závislá od hardvéru počítača. V takom prípade by ste mali vziať do úvahy najhorší prípad, keď používateľ vášho programu nebude mať najnovší model počítača. V tomto prípade vám „revízia“ hardvéru často umožňuje nájsť rezervy na zlepšenie výkonu aplikácie.
Prvá vec, ktorú musíte urobiť, je analyzovať výkon periférnych zariadení počítača, na ktorých by mal program bežať. V každom prípade vedieť, čo je rýchlejšie a čo pomalšie, pomôže pri vývoji programu. Analýza kapacity systému vám umožní identifikovať úzke miesta a urobiť správne rozhodnutie. Rôzne počítačové zariadenia majú rôznu šírku pásma. Najrýchlejšími z nich sú procesor a RAM, zatiaľ čo relatívne pomalé sú pevný disk a jednotka CD. Najpomalšie sú tlačiarne, plotre a skenery.

Predpokladajme, že všetky skreslenia v kanáli sú striktne deterministické a náhodný je iba gaussovský aditívny šum n (t), ktorý sa najskôr považuje za biely so spektrálnou hustotou N 0. To znamená, že pri vysielaní signálu u i (t) (symbol b i (i = 0,1, ..., m-1) možno prichádzajúci signál popísať podľa modelu (3.38):

z (t) = s i (t) + n (t), (0≤t≤T), (6,17)

kde sú známe všetky s i (t) = ku i (t-τ) (i = 0, 1, ..., m-1). Nie je známa iba implementácia rušenia a index i skutočne prenášaného signálu, ktoré musí určiť rozhodovací obvod.

Budeme tiež predpokladať, že všetky si (t) sú konečné signály, ktorých trvanie je T. To je prípad, ak sú prenášané signály ui (t) konečné a majú rovnaké trvanie (systém je synchrónny) a existuje žiadne viaccestné šírenie alebo lineárne skreslenia v kanáli, ktoré spôsobujú predĺženie trvania signálu (alebo sú opravené).

V nasledujúcom budeme všade predpokladať, že v systéme je zaistená spoľahlivá synchronizácia hodín, to znamená, že hranice hodinového intervalu, v ktorom prichádza signál s (t), sú presne známe. Problémy so synchronizáciou sú veľmi dôležité pri implementácii optimálnych demodulátorov a synchrónnych komunikačných systémov všeobecne, ale presahujú rámec tohto kurzu. Okamžik začiatku odosielania s (t) sa berie ako nula.

Za týchto podmienok definujme algoritmus fungovania optimálneho (tj. Na základe pravidla maximálnej pravdepodobnosti) demodulátora, ktorý analyzuje signál v intervale hodín 0-T. Na to je potrebné nájsť pomery pravdepodobnosti pre všetkých m možných signálov vzhľadom na nulovú hypotézu (s (t) = 0; z (t) = n (t)).

Úlohu komplikuje skutočnosť, že šírka signálneho spektra je nekonečná (pretože je konečná), a preto je signálny priestor nekonečne dimenzionálny L 2 (T). Ako je uvedené, pre takéto signály (alebo nekonečno-dimenzionálne vektory) neexistuje hustota pravdepodobnosti. Existujú však „-dimenzionálne hustoty pravdepodobnosti pre akékoľvek n prierezy signálu (pozri § 2.1).

Najprv nahraďte biely šum kvázi bielym šumom, ktorý má rovnakú jednostrannú hustotu spektrálneho výkonu N 0, ale iba v určitom frekvenčnom pásme F = n / 2T, kde n >> 1. Uvažujme najskôr o ďalšej hypotéze, to znamená, že budeme predpokladať, že Z (t) je hluk. Vezmime n ekvidištantných rezov hodinovým intervalom cez Δt = 1 / 2F = T / n. Počty Z 1, ...., Z n v týchto častiach pre kvázi biely gaussovský šum sú nezávislé v súlade s (2.49). Preto je n-rozmerná hustota pravdepodobnosti pre odobraté vzorky

kde σ 2 = N 0 F je rozptyl (sila) kvázi bieleho šumu.

Za predpokladu, že bol symbol b i prenášaný, podľa (6.17), n (t) = z (t) - s i (t). V dôsledku toho je podmienená n -rozmerná hustota pravdepodobnosti sekcií Z (t) určená rovnakým vzorcom ako (6.18), ak je z (tk) nahradené rozdielom z (tk) -si (tk), čo je hluk podľa tejto hypotézy:

Pomer pravdepodobnosti pre signál s i (vzhľadom na dodatočnú hypotézu) vypočítaný pre n rezov:

Rozptyl σ 2 nahradíme jeho výrazom: σ 2 = N 0 F = N 0 / (2Δt). Potom

Podľa pravidla maximálnej pravdepodobnosti v prípade kvázi bieleho šumu by mal rozhodovací obvod zvoliť hodnotu i, ktorá poskytuje maximum Λ i [n]. Namiesto maxima Λ i je možné nájsť maximum jeho logaritmu:

Druhý člen v (6.22) nezávisí od t a pri porovnávaní hypotéz ho možno ignorovať. Potom pravidlo rozhodovania, že symbol b i bol prenášaný podľa (6.10), môže byť vyjadrené systémom nerovností

Vráťme sa teraz k pôvodnému problému s bielym šumom. Aby sme to urobili, roztiahneme pás F, potom počet sekcií n má tendenciu k nekonečnu a Δt má tendenciu k nule. Súčty v (6.22) sa zmenia na integrály a riešenie pre leptanie je definované nasledovne:

Výraz (6.24) určuje tie operácie (operačný algoritmus), ktoré by mal optimálny prijímač vykonávať počas vstupnej oscilácie z (t).

Na obr. 6.2 pre m = 2 ukazuje blokový diagram prijímacieho zariadenia pracujúceho v súlade s algoritmom (6.24).

Tu „-“ sú odčítače; Γ 0, Γ 1 - generátory referenčných signálov s 0 (t), s 1 (t); "KB" - štvorce; ∫ - integrátori; RU je rozhodujúce zariadenie, ktoré v časoch, ktoré sú násobky T (keď sú kľúče zatvorené), určuje číslo pobočky s minimálnym signálom.

Pre m> 2 v obvode na obr. 6.2 a ďalších schém uvedených nižšie, počet vetiev spracovania signálu, dosahujúcich RU, podľa toho rastie.

V Hilbertovom priestore


určuje normu rozdielu medzi vektormi z a s alebo vzdialenosť medzi nimi *. Algoritmus (6.24) je preto možné zapísať ako

|| z - s i ||

a poskytnite mu jednoduchú geometrickú interpretáciu: optimálny demodulátor by mal zaregistrovať ten zo signálov s i (t) (zodpovedajúci symbolu b i), ktorý je „bližšie“ k prijatému tvaru vlny z (t). Ako príklad, obr. 6.3 ukazuje optimálne rozdelenie dvojrozmerného priestoru prijatých signálov z (t) pri vysielaní signálov s 1 (t) a s 0 (t). Oblasti na rozhodovanie v prospech symbolov 0 alebo 1 sú umiestnené na oboch stranách čiary 0-0, ktorá je kolmá na segment spájajúci signálne body a rozdeľujúci ho na polovicu.

Prítomnosť obr. Jeho implementácia často komplikuje 6,2 štvorcov, navrhnutých tak, aby poskytovali transformáciu okamžitých hodnôt vstupných signálov v celom dynamickom rozsahu na základe štvorcového zákona. Preto na základe (6.24) získame ekvivalentný algoritmus príjmu, ktorý nevyžaduje zarovnávacie zariadenia.

Rozšírenie zátvoriek pod znakom integrálu a zrušenie výrazu na oboch stranách nerovností (6.24)

dostávame sa k algoritmu príjmu:

kde E j je energia očakávaného signálu s j (t):


V binárnom systéme je algoritmus (6.25) redukovaný na kontrolu jednej nerovnosti

Zariadenie, ktoré priamo vypočítava bodový súčin


sa nazýva aktívny filter alebo korelátor; preto prijímač, ktorý implementuje algoritmus (6.25), sa nazýva korelačný.

* (Pre n-rozmerný euklidovský priestor je táto norma rovná)


Na obr. 6.4 ukazuje blokový diagram prijímacieho zariadenia pracujúceho v súlade s (6.27). Tu bloky × sú multiplikátory; Γ 0, Γ 1 - generátory referenčných signálov s 0 (t) s 1 (t); ∫ - integrátori; " -" - odčítače; RU je riešiteľ, ktorý určuje časy, ktoré sú násobky T (keď je kľúč zatvorený), i = 0, 1 je číslo vetvy s maximálnym signálom.

Ak sú signály ui (t) zvolené tak, že všetky ich realizácie (a v dôsledku toho všetky realizácie si (t) majú rovnaké energie (E i = konšt), algoritmus príjmu (6,25) (a podľa toho , jeho implementácia) je zjednodušená (nie je potrebné odčítavače) a má formu

Z (6.29) je zrejmé, že rozhodovacie pravidlo sa nezmení, ak je signál z (t) prichádzajúci na vstup demodulátora vynásobený ľubovoľným číslom. Preto sa systém, v ktorom majú všetky realizácie signálu rovnakú energiu, líši v tom, že optimálny algoritmus príjmu nevyžaduje znalosť „mierky“ prichádzajúceho signálu, alebo inými slovami, znalosť prenosového koeficientu k kanála. Táto dôležitá vlastnosť dala podnet k rozsiahlemu používaniu signálnych systémov s rovnakou energiou, ktoré sa bežne označujú ako aktívne pauzové systémy. Toto je obzvlášť dôležité pre slabnúce kanály, kde zisk kolíše (pozri §6.7).

Všimnite si toho, že pre binárny systém môže byť nerovnosť (6.27) reprezentovaná jednoduchšou formou:


kde s Δ (0 = s 1 (t) - s 0 (t) je rozdielový signál; λ = 0,5 (E 1 -E 0) je prahová úroveň. Pre systém s aktívnou pauzou X = 0, čo výrazne uľahčuje implementáciu optimálnej schémy.

Keď je nerovnosť (6.30) splnená, zaregistruje sa symbol 1, inak - 0. Na implementáciu (6.30) v obvode na obr. 6.4 je potrebná iba jedna pobočka.

Na obr. 6.5, a ukazuje diagram, ktorý implementuje algoritmus (6.30) pre binárny prenosový systém s unipolárnymi impulzmi (s pasívnou pauzou): s 1 (t) = a, s 0 (t) = 0. Pre tieto signály je s Δ ( t) = s 1 (t) = a, E 1 = a 2 T, E 0 = 0, λ = a 2 T / 2 a (6.30) má nasledujúcu formu:


Uvažovaný systém binárnych signálov sa používa v najjednoduchších káblových komunikačných zariadeniach. V rozhlasových kanáloch, ako aj v moderných káblových kanáloch sa používajú vysokofrekvenčné signály. Najjednoduchšie binárne systémy s harmonickými signálmi sú systémy kľúčovania s amplitúdovým (AM), fázovým (PM) a frekvenčným (FM) posunom.

V binárnom AM sa predpokladá, že s 1 (t) = acos (ω 0 t + φ), s 0 (t) = 0. Všetky konštanty (a, ω 0, φ) v tejto časti sú známe. Pretože tu s Δ (t) = s 1 (t), E 1 = a 2 T / 2 a E 0 = 0, pravidlo (6.30) bude zapísané takto:


Je implementovaný obvodom na obr. 6.5.6, ktorý sa líši od obr. 6,5, blok na vynásobenie prichádzajúceho signálu referenčným signálom cos (ω 0 t + φ). Prahová hladina λ̇ je v tomto prípade rovná aT / (4RC).

Pre binárny systém FM s 0 (t) = a cos (tω 0 + φ), s 0 (t) = a cos (tω 0 + φ + π) = -s 1 (t). Toto je systém s aktívnou pauzou, a preto λ = 0 v (6,30). Je ľahké overiť, či sa pravidlo rozhodovania v tomto prípade redukuje na nasledujúce:


a je implementovaný rovnakým obvodom na obr. 6,5,6 pri λ̇ = 0. V tomto prípade RU plní úlohu diskriminátora polarity.

Ryža. 6.6. Optimálny demodulátor s bieliacim filtrom pre gaussovský „farebný“ šum

Stručne zvážime prípad, keď gaussovský šum v kanáli nie je biely alebo kvázi biely, ale „farebný“, to znamená, že má v pásme signálového spektra nerovnomernú hustotu výkonu G (f). Nechajme súčet signálu a šumu prichádzajúceho na vstup demodulátora prejsť filtrom s prenosovou funkciou k (i2πf) tak, aby súčin G (f) | k (i2πf) | 2 bola konštantná N 0. Zo všetkých možných filtrov s k (i2πf), ktoré spĺňajú túto podmienku a líšia sa iba fázovo-frekvenčnou odozvou, je možné zvoliť minimálny fázový, ktorý je reverzibilný. Hluk na výstupe filtra bude evidentne kvázi biely: G out (f) = N 0. Preto sa takýto filter nazýva bielenie.

Signál si (t) sa po prechode bieliacim filtrom zmení na iný signál, ktorý označíme s „i (t). Jeho typ sa dá určiť pomocou znalosti si (t) a k (i2πf). Ak teraz aplikujte oscilácie z výstupu bieliaceho filtra na demodulátor, ktorý je optimálny na príjem signálov s „i (t) (i = 0, 1, ..., m-1), potom dostaneme obvod na obr. 6,6, čo je evidentne optimálne pre signály s i (t) s farebným šumom.

Je potrebné poznamenať, že v diagrame na obr. 6.2, 6.4 a 6.5, referenčný signál musí mať rovnaké počiatočné fázy ako očakávané prichádzajúce signály, alebo inými slovami, musí byť v súlade s prichádzajúcimi signálmi. Táto požiadavka zvyčajne komplikuje implementáciu demodulátora a vyžaduje, aby do neho boli okrem blokov uvedených na obrázkoch zavedené ďalšie zariadenia určené na úpravu fáz referenčných signálov.

Všetky metódy príjmu, na implementáciu ktorých je potrebná presná a priori znalosť počiatočných fáz prichádzajúcich signálov, sa nazývajú koherentné. V prípadoch, keď sú informácie o počiatočných fázach očakávaných signálov extrahované zo samotného prijatého signálu (napríklad ak fáza kolíše, ale tak pomaly, že ju možno predpovedať z predchádzajúcich signálnych prvkov), príjem sa nazýva kvázi koherentný. Ak informácie o počiatočných fázach prichádzajúcich signálov chýbajú alebo sa z nejakého dôvodu nepoužívajú, príjem sa nazýva nesúvislý (pozri § 6.6).

V mnohých aplikáciách vzniká problém s detekciou anomálií, ktoré sa môžu objaviť v nasledujúcom viacrozmernom rámci sekvencie obrazov. Takými anomáliami môžu byť napríklad ohniská lesných požiarov, patologické zmeny na lekárskych snímkach, nové objekty v chránenom území atď. V tomto prípade je problém s detekciou formalizovaný nasledovne, Nechajte vykonať pozorovanie

SP s časopriestorovými koreláciami a SP nezávislých náhodných premenných s nulovými priemermi a odchýlkami. Vektor parametrov umožňuje vziať do úvahy napríklad možné vzájomné priestorové posuny a rotácie susedných rámcov obrazu.

Vzhľad deterministického signálu vedie k zmene modelu (2.1) iba v oblasti indexov (obr. 1) posledného z pozorovaných rámcov:

kde je sada užitočných vzoriek signálu.

Za uvažovaných podmienok je potrebné nájsť pravidlo na testovanie hypotézy H0 o neprítomnosti anomálie v oblasti G podľa alternatívneho predpokladu H1 o platnosti modelu (2.2).

Pre dané pravdepodobnostné charakteristiky komponentov modelov (2.1), (2.2) je možné určiť zodpovedajúce podmienené hustoty rozdelenia pravdepodobnosti (PDF) pozorovaní W (Z | Н0) a W (Z | Н1). Na vyriešenie problému s detekciou by preto malo byť použité porovnanie s prahovou úrovňou koeficientu pravdepodobnosti (LR):

(2.3)

Na zjednodušenie výpočtov reprezentujeme podmienené PDF vo forme produktov :, kde ZG je súbor pozorovaní v oblasti G; Z0 je množina všetkých pozorovaní, ktoré nepatria do oblasti očakávaného signálu. Pretože OP (2.3) je možné prepísať vo forme:

. (2.4)

Podmienené súbory PDF zahrnuté v OP (2.4) aproximujeme pomocou Gaussových distribúcií:

kde, a ,, sú podmienené matematické očakávania a matice priestorovej kovariancie pozorovaní ZG v neprítomnosti a v prítomnosti užitočného signálu.

Ak vezmeme do úvahy modely pozorovania (2.1), (2.2), je ľahké získať nasledujúce vzorce pre podmienené prostriedky, kde - optimálna predpoveď hodnôt SP, postavená na základe všetkých dostupných pozorovaní Z0, ktoré nepatria do signálnej oblasti. Priestorové matice V0 a V1 sú rovnaké: , kde je kovariančná matica optimálnych predpovedných chýb.

Po nahradení vyššie uvedených vzťahov do (2.4), (2.5) a prevzatí logaritmu nájdeme nasledujúci algoritmus detekcie signálu:

, (2.6)

kde - prah detekcie. Ako vyplýva zo vzorca (2.6), postup na detekciu anomálií zahŕňa kompenzáciu rušivých obrazov odčítaním optimálnej predikcie zistenej z pozorovania na základe všetkých pozorovaní, ktoré nepatria do oblasti G., z pozorovania, ktoré je po kompenzácii interferujúcich SP lineárne vážené vykoná sa súčet zvyškov

Použitím vzorca Frobenius na inverziu blokových matíc je možné ukázať, že štatistiku je možné redukovať na ekvivalentnú formu:

kde , - optimálna predpoveď hodnoty, postavená na základe všetkých dostupných pozorovaní okrem; ... je rozptyl chyby tejto prognózy. Naproti tomu ho budeme nazývať „predpoveď point-to-point“. Keď sú anomálie detegované vo všetkých možných oblastiach G s veľkým počtom prvkov, „predikciu do bodu“ je možné nájsť pomocou výrazne menšieho počtu výpočtových operácií ako „predikcie oblasti“.

Inú formu záznamu optimálneho postupu detekcie je možné získať za predpokladu, že užitočný signál môže obsadiť všetky dostupné obrazové rámce, t.j. oblasť G zahŕňa všetky viacrozmerné mriežky. Potom má najlepšia predpoveď a algoritmus (2.6) tvar:

, (2.8)

kde ; je kovariančná matica interferujúceho obrazu.

Priama implementácia postupu (2.8) je náročná z dôvodu veľkého počtu výpočtových operácií. Napriek tomu rozšírenie priestorovej symetrickej matice na súčin dvoch trojuholníkových , (2.8) môžu byť reprezentované vo forme

(2.9)

zodpovedajúce predbežnému „vybieleniu“ postupnosti obrazov a následnému váženiu so závažím. V mnohých prípadoch tento prístup umožňuje nájsť kvázi optimálne „bieliace“ algoritmy, ktoré sú prijateľné pre prax. Nezávislé zváženie adaptívnych rekurzívnych filtrov, ktoré sú svojimi vlastnosťami blízke bieliacim filtrom, je zároveň dôležitým smerom pri hľadaní možností relatívne jednoduchej technickej alebo softvérovej implementácie systému spracovania sekvencie obrazu. Novinkou, ktorú majú algoritmy (2.7), (2.8) a (2.9) vzhľadom na (2.6), je oddelenie namáhavej operácie optimálnej predikcie alebo bielenia, ktoré nesúvisí s tvarom signálu, a relatívne jednoduché váženie, ktoré berie do úvahy formu užitočného signálu. To umožňuje celkom jednoducho vyriešiť problémy s detekciou anomálií s neznámymi parametrami polohy a komplexnejšie problémy s multi-alternatívnou detekciou (rozpoznávaním) niekoľkých typov signálov.

Predložené výsledky umožňujú objasniť podmienky, za ktorých je navrhované nahradenie podmienených súborov PDF normálnymi distribúciami platné. V prvom rade je to široká trieda s gaussovskými modelmi (2.1), (2.2). V týchto prípadoch sú postupy (2.6), (2.7), (2.9) úplne optimálne. V prípade ne Gaussových komponentov modelov (2.1), (2.2) je dostatočnou podmienkou optimality možnosť aproximácie zadného PDF predpovede normálnym rozdelením. Všimnite si toho, že posledná podmienka je splnená aj v mnohých aplikovaných problémoch spracovania LB s významnými časopriestorovými koreláciami a je zvyčajne ekvivalentná podmienke vysokej presnosti predpovedí aposteriórnosti.

Odhad zložitosti algoritmov

6. Optimalizácia algoritmov

Počítačová veda doteraz nezhromaždila dostatok informácií na to, aby bol problém minimalizácie položený s obvyklou istotou pre matematiku. Zabraňuje tomu niekoľko faktorov.

Po prvé, je ťažké formulovať optimalizačné kritérium, ktoré má nespochybniteľnú praktickú hodnotu a je jednoznačne definované matematickými pojmami. Napríklad môže predstavovať problém minimalizácie počtu príkazov Turingovho stroja - kritérium dobre definované matematicky; ale jeho praktický význam je úplne nejasný, pretože je nepravdepodobné, že by skutočný program na skutočnom počítači simuloval Turingov stroj. Je možné položiť problém minimalizácie času vykonávania programu na skutočnom stroji - kritérium, ktoré je zrejmé z praktického hľadiska. Problém s optimalizáciou však nebude možné vyriešiť matematickými metódami, pretože doba vykonávania závisí (niekedy výrazne) od počítačovej architektúry a architektúru moderných počítačov nemožno opísať malým počtom parametrov. Je tiež dôležité, aby program, ktorý na jednom počítači beží rýchlejšie ako ostatné, nemusel byť na inom počítači najrýchlejší. Existujú dokonca aj špeciálne programy nazývané benchmark na hodnotenie architektúr.

Za druhé, nie je úplne jasné, v čom spočíva zložitosť úlohy. Dalo by sa to definovať ako minimum zložitosti algoritmov, ktoré riešia tento problém. Existuje však algoritmus minimálnej zložitosti (ako sa ubezpečiť, že nájdený algoritmus je skutočne minimálny alebo naopak nie minimálny)? Je o čo sa snažiť? A aké ťažké je nájsť toto minimum? Tieto otázky súvisia s nižším odhadom zložitosti algoritmov (a nie s horným odhadom, ako v predchádzajúcich krokoch) (5, s. 89-92).

Je možné pre posudzovaný problém dokázať, že žiadny algoritmus, ktorý ho rieši, nemôže byť jednoduchší ako táto dolná hranica? Zoberme si známy problém násobenia štvorcových matíc. Prezentuje sa algoritmus zložitosti T (n) = 3n3 + n2. (8, s. 199-203) Pravdepodobne to nie je najlepší algoritmus, ale čo je dolná hranica? Výsledná matica má n2 prvkov. Na výpočet akéhokoľvek prvku je potrebná najmenej jedna operácia jednoprocesorového stroja - dva prvky nemožno nájsť v jednej operácii. Pre minimálny algoritmus získame nerovnosti n2<= T, min(n) <= 3n3+n2 . Вряд ли n2 - хорошая нижняя оценка, но уже известно, что n3 нижней оценкой не является, так как найдены более быстрые алгоритмы (в частности, алгоритм Штрассена). (8, стр. 211)

Existuje niekoľko nezávislých aspektov optimalizácie programu, z ktorých vyberáme dva:

Optimalizácia spojená s výberom metódy na konštrukciu algoritmu;

Optimalizácia spojená s výberom metód na reprezentáciu údajov v programe.

Prvý typ optimalizácie je globálnej povahy a vedie k zníženiu poradia funkcie komplexnosti - napríklad nahradenie algoritmu hodnotou T (V) = O (FS) algoritmom s algoritmom T (V) = O (V4 ). Záleží na tom, ako je úloha rozdelená na podúlohy, do akej miery je toto delenie charakteristické pre samotnú úlohu, alebo je len umelou technikou. Všeobecným sprievodným prístupom tu môže byť postupnosť akcií, opak analýzy algoritmov. Pri analýze pomocou rekurzívneho algoritmu sa zostaví rovnica, ktorá sa potom vyrieši. Počas optimalizácie je implementovaný nasledujúci reťazec:

Vzorec pre požadovanú obtiažnosť ->

Zodpovedajúca rovnica (jedna z možných) ->

Metóda rozdelenia úlohy na podúlohy.

Druhý typ optimalizácie, bez zmeny štruktúry programu ako celku, vedie k šetreniu pamäte a / alebo k zjednodušeniu práce s dátovými štruktúrami, k zvýšeniu účinnosti pomocných postupov, ktoré poskytujú „rozhranie“ medzi aplikačnou úrovňou (na ktorej myslite v súvislosti s objektmi na vysokej úrovni - grafy, matice, texty atď.) a strojovou úrovňou, ktorá podporuje najjednoduchšie dátové typy (čísla, symboly, ukazovatele). To zvyčajne vedie k zníženiu koeficientov pre niektoré termíny vo funkcii komplexnosti (s úspešnou optimalizáciou, s najdôležitejším termínom), ale poradie funkcie komplexnosti zostáva rovnaké. (7, s. 204)

Oba typy optimalizácie sa navzájom dopĺňajú a je možné ich používať spoločne.

Algoritmy na riešenie problémov podľa výberu. Žíhací algoritmus

Aby ste pochopili, čo je optimalizácia, musíte zistiť, na čo slúži, a pochopiť, že v živote sa stretávame s optimalizáciami každý deň, často bez toho, aby sme si to všimli. Povedzme, že keď dostaneme ďalší plat, rozhodneme sa rozdeliť náš rozpočet ...

Analýza a syntéza na základe súboru technických prostriedkov hypotetického mikroprocesorového systému na optimálne riadenie technologického postupu a zariadenia technického objektu, parného generátora za podmienok stochastickej neistoty

Jedným z kľúčových problémov pri navrhovaní systému automatizovaného riadenia procesov je problém optimalizácie, účinnosť systému automatizovaného riadenia procesu do značnej miery závisí od rozumnej formulácie a úspešného riešenia, ktoré ...

Počítačová simulácia bezdrôtových sietí AD-HOC za účelom výpočtu komunikačného času mobilných účastníkov

Optimalizácia je proces zmeny programu podľa určitých kritérií s cieľom zlepšiť jeho kvalitu pri zachovaní významu pôvodného programu. Aby sa znížilo množstvo programového kódu, je rozdelený na časti - podprogramy ...

Modelovanie a optimalizácia diaľnic

Predstavme nasledujúce označenia: Xi - zvyškové fondy na začiatku i -tej fázy; Uj - množstvo finančných prostriedkov, ktoré bolo rozhodnuté alokovať na i - podnik; Pi je zisk, ktorý získal tento podnik ...

Modelovanie systému automatického riadenia softvérovými a simulačnými metódami

Optimalizácia je implementovaná metódou sekvenčného simplexového plánovania (simplexová metóda). Optimalizačný režim obsahuje nasledujúce dva podrežimy: nastavenie počiatočných podmienok a hranice optimalizácie; beží optimalizácia ...

Optimalizácia plánu výroby a dodávok pomocou plánovacieho systému IBM ILOG Plant PowerOps

IBM ILOG Plant PowerOps sa skladá zo štyroch modulov: Plánovanie výroby, Dávkové dimenzovanie, Podrobné plánovanie a Rozdelenie dopytu. Každý z modulov rieši konkrétne problémy v procese optimalizácie ...

Vlastnosti práce v softvérovom balíku MicroCAP-7

Parametrická optimalizácia sa v programe MC7 vykonáva metódou Powell v ktoromkoľvek z typov analýzy: prechodová analýza, analýza malého signálu striedavým prúdom a výpočet charakteristík pri jednosmernom prúde ...

Vlastnosti vytvárania textového obsahu pre stránky NNSU im. N.I. Lobačevskij

Stránka teda už existuje. Je užívateľsky prívetivý, má nádherný dizajn a má všetky vlastnosti, aké si dnes spotrebiteľ predstavuje. Ale z nejakého dôvodu indikátory návštevnosti pripomínajú ručičky zastavených hodín ...

Návrh a modelovanie elektrických obvodov v grafickom systéme AutoCAD a softvérovom balíku OrCAD 9.2

kinematický magnetofón elektrického obvodu Ďalej do obvodu pridáme parametre optimalizácie, pričom nastavíme aktuálnu „aktuálnu hodnotu“, počiatočné hodnoty „počiatočnej hodnoty“ komponentov a tiež „toleranciu“ ...

Vývoj návrhu dvojitého počítačového stola

Okrem možnosti 3D návrhu výrobkov, vytvárania výkresov a špecifikácií pre diely, ako aj výpočtu materiálov potrebných na výrobu výrobku, vám „bCAD Furniture Maker“ umožňuje vyrobiť ekonomický ...

Vývoj modelu realitnej kancelárie v súlade so štandardom IDEF0

Tento model patrí k typu „byť“, to znamená, že je postavený na princípe „ako by mal byť“. V procese vytvárania modelu som opravil niektoré nedostatky ...

Vývoj aplikácií pre výber nákupu dvojice strojov

Jednorozmerné problémy s minimalizáciou sú najjednoduchším matematickým optimalizačným modelom, v ktorom objektívna funkcia závisí od jednej premennej a segment skutočnej osi je prípustnou množinou ...

Vývoj programu „Stanovenie optimálnej doby výmeny zariadenia“

Jedným z dôležitých ekonomických problémov, s ktorými sa musí človek v praxi stretnúť, je stanovenie optimálnej stratégie výmeny starých strojov, priemyselných budov, jednotiek, strojov atď., Inými slovami ...

Systémová analýza informačného systému personálneho manažmentu v podniku

Vytvorenie virtuálnej 3D prehliadky zo série virtuálnych fotografických panorám

Na dokonalé lepenie panorámy, to znamená lepenie bez viditeľných „švov“, by mala byť vzdialenosť medzi pármi kontrolných bodov minimálna. Proces optimalizácie počíta ...

Algoritmy výmeny stránok. FIFO. Druhý pokus. Algoritmus LRU.

Algoritmy výmeny stránok. Optimálny algoritmus. Algoritmus NRU.

Algoritmy výmeny stránok

Aj keď si pri každom prerušení môžete vybrať náhodnú stránku, výkon systému sa zlepší, ak odstránite samotnú zriedka používanú stránku.

Optimálny algoritmus

V čase zlomu stránky je v pamäti konkrétna skupina stránok. Každú stránku je možné označiť počtom príkazov, ktoré sa vykonajú pred prvým volaním. Optimálny algoritmus odstráni stránku s najvyššou značkou. V praxi je takýto algoritmus nerealizovateľný, pretože operačný systém nemôže vedieť, kedy bude prístup na konkrétnu stránku. Optimálny algoritmus je možné implementovať ako súčasť experimentu s opakovaným behom. Výsledky optimálneho algoritmu je možné porovnať s výsledkami iných algoritmov, aby sa určila ich účinnosť.

Algoritmus NRU (nedávno nepoužitý) (nedávno použitá stránka)

V položke tabuľky sú pre každú stránku 2 bity:

Bit R (prístupový bit) je nastavený na jeden pri každom prístupe na stránku. Tento bit je možné vymazať, napríklad každých n časovačov tikne, aby sa rozlíšili stránky, ku ktorým sa dlho nevstupovalo;

Pri zmene stránky je bit M (modifikačný bit) nastavený na hodnotu jedna. Signalizuje, že pri odstraňovaní by mala byť stránka zapísaná na disk.

S prerušením stránky, na základe hodnôt bitov R a M, OS rozdelí všetky stránky do 4 tried. Stránka z najnižšej triedy je náhodne vybraná na odstránenie. Algoritmus je ľahko implementovateľný a môže poskytnúť celkom dostatočný výsledok.

Algoritmus FIFO

OS udržiava zoznam všetkých stránok v pamäti. Zoznam je zoradený v poradí, v akom sa stránky zobrazujú. Zlom strany uvoľní stránku zo začiatku zoznamu. Algoritmus sa zriedka používa v najčistejšej forme.

Algoritmus „druhý pokus“

Je to modifikácia algoritmu FIFO. Pri zalomení stránky sa bit R preskúma na prvej stránke v zozname. Ak sa rovná jednému, stránka sa umiestni na koniec zoznamu a bit R sa vymaže a skontroluje sa ďalšia stránka. Tento algoritmus hľadá v zozname stránku, na ktorú sa posledné n začiarknutia časovača nedostalo. Ak existovali odkazy na všetky stránky, algoritmus sa zmení na bežné FIFO.

Algoritmus „hodiny“

Predchádzajúci algoritmus je správny, ale neúčinný, pretože neustále presúva všetky stránky v zozname. Preto je lepšie uložiť záznamy stránky do kruhového zoznamu a použiť ukazovateľ na jednu z buniek. Keď dôjde k zalomeniu stránky, skontroluje sa bit R stránky, na ktorú ukazuje ukazovateľ. V závislosti od bitu R sa môže obsah záznamu zmeniť a hodnota ukazovateľa sa zmení oveľa rýchlejšie ako pri úprave celého zoznamu. Algoritmus je úplne identický s algoritmom „druhého pokusu“, okrem priamej implementácie.


Algoritmus LRU (Naposledy použité), najviac nepoužívaná stránka

Tento algoritmus je založený na pozorovaní, že stránky, ktoré boli viackrát navštívené v posledných príkazoch, budú pravdepodobne použité aj v nasledujúcich príkazoch a naopak. Algoritmus je taký, že keď dôjde k prerušeniu stránky, stránka, na ktorú sa najdlhšie nevstupuje, sa vytiahne z pamäte. Implementácia tohto algoritmu nie je lacná. Pre úplnú implementáciu je potrebné udržiavať prepojený zoznam všetkých stránok v pamäti, pričom posledná použitá stránka je na začiatku zoznamu. Zložité je, že zoznam je potrebné aktualizovať pri každom prístupe do pamäte. Pri tomto prístupe trvá veľmi dlho nájsť stránku, odstrániť ju a vložiť na začiatok zoznamu. Na implementáciu tohto algoritmu existujú hardvérové ​​metódy.

Prvá metóda vyžaduje vybavenie počítača špeciálnym N-bitovým počítadlom, ktoré sa automaticky zvyšuje po každom príkaze. Každý záznam v tabuľke stránok musí mať navyše pole na uloženie hodnoty tohto počítadla. Po každom prístupe do pamäte sa hodnota počítadla uloží do záznamu v tabuľke na zodpovedajúcej stránke, na ktorú sa pristupovalo. Ak dôjde k prerušeniu stránky, správca pamäte skontroluje počty v celej tabuľke a vyhľadá najmenšiu. Táto stránka je najdlhšie nepoužívaná.

Druhá možnosť hardvérovej implementácie je, že v systéme s blokmi N-stránok je zachovaná hardvérová matica veľkosti NxM, pôvodne rovná nule. Pri prístupe na stránku k hardvér nastaví všetky bity k-teho riadka na jednu, potom na všetky bity k-tého stĺpca-nula. V každom danom čase je reťazec s najmenšou binárnou hodnotou najdlhšie nepoužitý.