Lucrări de curs: Optimizarea algoritmilor de căutare. Stratul de gestionare a memoriei virtuale independent de hardware

În timpul interviurilor, aceștia sunt adesea întrebați care tip este cel mai rapid. Intrebare capcana. Vă explicăm de ce și căutăm cea mai bună opțiune.

Ca răspuns, ar trebui să întrebați: „Pentru ce caz este selectată sortarea optimă pentru timp?” Și numai atunci când condițiile sunt anunțate, puteți parcurge în siguranță opțiunile disponibile.

Exista:

  • algoritmi de sortare O(n 2) cum ar fi sortările de inserare, balon și selecție, care sunt utilizate în cazuri speciale;
  • sortare rapidă (de uz general): mediu O(n log n) schimburi, dar cel mai rău moment este O(n 2), dacă matricea este deja sortată sau elementele sunt egale;
  • algoritmi O(nButurugan), precum merge și sortare heap (sortare piramidală), care sunt, de asemenea, algoritmi buni de sortare de uz general;
  • Pe) sau algoritmi de sortare liniară (select, select with exchange, select with count) pentru liste de numere întregi, care pot fi adecvate în funcție de natura numerelor întregi din listele dvs.

Dacă tot ce știți este relația de ordine generală dintre elemente, atunci algoritmii optimi vor avea complexitate O(n log n). Algoritmii liniari necesită informații suplimentare despre structura elementelor.

Optimitatea algoritmului depinde îndeaproape de tipul de liste/matrice pe care urmează să le sortați și chiar de modelul computerului. Cu cât ai mai multe informații, cu atât alegerea ta va fi mai precisă. În baza unor ipoteze foarte slabe despre factori, complexitatea optimă a cazului cel mai rău ar putea fi Pe!).

Acest răspuns abordează doar dificultățile. Timpul real de execuție al algoritmilor depinde de un număr mare de factori.

Testare

Deci, care fel este cel mai rapid?

Vizualizarea

O bună vizualizare a sortărilor este demonstrată în acest videoclip:

Pare să răspundă la întrebarea care tip este cel mai rapid, dar rețineți că viteza este afectată de mulți factori, iar aceasta este doar una dintre opțiunile demonstrate.

Limita inferioară a complexității unei clase de algoritmi nu este determinată într-un mod unic. De exemplu, f(n) = 0 este întotdeauna o limită inferioară, la fel ca orice funcție negativă. Cu cât limita inferioară găsită este mai mare, cu atât este mai netrivială și mai valoroasă. Un semnal că nu vom putea construi o limită inferioară mai mare decât


DE Capitolul 4. Limita inferioară a complexității. Algoritmi optimi

limita inferioară pe care o avem deja f(n), poate servi, de exemplu, prezenței A e .s4, pentru care T A (n) = f(n). Această situație o întâlnim în paragraful anterior din exemplele 14.1 și 14.3. Algoritmul cunoscut pentru găsirea celui mai mic element și algoritmul pentru căutarea binară a locației unui element într-o matrice ordonată au fiecare o complexitate care coincide cu limita inferioară găsită. Acești algoritmi sunt optimi în sensul următoarei definiții.

Definiție 15.1. Lăsa .s4 - o clasă de algoritmi pentru rezolvarea unei anumite probleme. Să existe un acord asupra modului în care sunt măsurate costurile algoritmilor și a ceea ce contează ca mărime de intrare și să n- desemnarea dimensiunii intrării. Algoritm A e .s4 numit optim V j4, Dacă T A(n) este o limită inferioară a complexității algoritmilor din j4.

Exemplul 15.1. Când se obține o limită inferioară a complexității și se demonstrează optimitatea, uneori este util să se utilizeze funcții pe seturi de valori care apar în timpul execuției algoritmului, de exemplu, pe seturi de valori ale variabilelor utilizate de algoritm.

Propunerea 15.1.Funcția f(n) = Г 2 n 1 - 2 este o limită inferioară a complexității algoritmilor pentru selectarea simultană a celor mai mari și mai mici elemente ale unui tablou de lungime n folosind comparații.

Dovada. Fiecare etapă de execuție a unui algoritm arbitrar V, bazat pe comparații și conceput pentru a găsi cele mai mari și mai mici elemente ale unui tablou, poate fi caracterizat prin cvadruplu ( A, B, C, D) submulţimi ale mulţimii elementelor originale (x g, x 2, ■ ■ ■, x n), Unde

A constă din toate acele elemente care nu au fost deloc comparate;

B constă din toate acele elemente care au participat la unele comparații și s-au dovedit întotdeauna a fi mari;

C constă din toate acele elemente care au participat la unele comparații și s-au dovedit întotdeauna a fi mai mici;

D constă din toate acele elemente care au participat la unele comparații, uneori s-au dovedit a fi mai mari și alteori mai puține.

Lăsa a, b, c, d- numărul de elemente ale mulţimilor A, B, C, Dîn consecinţă. Situația inițială este caracterizată de egalități a = n, b = = c = d = 0. După finalizarea algoritmului, trebuie executate următoarele:


§ 15 . Algoritmi optimi

stva A = 0, b = c = 1, d = n-2. După prima comparație, pe toată durata execuției algoritmului, vor apărea constant inegalități b^1, c^1.



Toate comparațiile făcute în timpul executării algoritmului V, poate fi împărțit în tipuri, desemnate AA,AB,AC,AD, BB,BC,BD,CC, CD,DD, de exemplu: comparația aparține tipului AB , dacă unul dintre elementele care se compară este luat din A , altul-de ÎN , etc. Pe baza acestui fapt, putem nota toate modificările posibile ale cvadruplui (a, b, Cu, d) sub influenţa comparaţiilor de diferite tipuri.

Evaluarea complexității algoritmului

6. Optimizarea algoritmilor

Până acum, informatica nu a acumulat suficiente informații pentru ca problema minimizării să poată fi pusă cu siguranța obișnuită a matematicii. Mai mulți factori împiedică acest lucru.

În primul rând, este dificil de formulat un criteriu de optimizare care să aibă atât o semnificație practică incontestabilă, cât și să fie definit fără ambiguitate în termeni matematici. De exemplu, se poate pune problema minimizării numărului de instrucțiuni ale unei mașini Turing - un criteriu bine definit matematic; dar semnificația sa practică nu este deloc clară, deoarece este puțin probabil ca un program real pe un computer real să simuleze o mașină Turing. Puteți seta sarcina de a minimiza timpul de execuție al unui program pe o mașină reală - un criteriu clar din punct de vedere practic. Cu toate acestea, problema de optimizare va fi imposibil de rezolvat folosind metode matematice, deoarece timpul de execuție depinde (uneori în mod semnificativ) de arhitectura computerului, iar arhitectura computerelor moderne nu poate fi descrisă printr-un număr mic de parametri. De asemenea, este important ca un program care rulează mai repede decât altele pe un computer poate să nu fie cel mai rapid pe altul. Există chiar și programe speciale cu denumirea generală benchmark, concepute pentru a evalua arhitecturile.

În al doilea rând, nu este complet clar care este complexitatea sarcinii. Ar putea fi definită ca fiind complexitatea minimă a algoritmilor care rezolvă această problemă. Dar există un algoritm de complexitate minimă (cum să vă asigurați că algoritmul găsit este într-adevăr minim sau, dimpotrivă, nu minim)? Există ceva pentru care să lupți? Și cât de greu este să găsești acest minim? Aceste întrebări sunt legate de estimarea inferioară a complexității algoritmilor (nu de cea superioară, ca în pașii anteriori) (5, pp. 89-92).

Este posibil să se demonstreze pentru problema luată în considerare că niciun algoritm care o rezolvă nu poate fi mai simplă decât această limită inferioară? Să luăm binecunoscuta problemă a înmulțirii matricelor pătrate. Este dat un algoritm de complexitate T(n) = 3n3 + n2. (8, pp. 199-203) Acesta nu este probabil cel mai bun algoritm, dar care este limita inferioară? Matricea rezultată are n2 elemente. Pentru a calcula orice element, este necesară cel puțin o operație a unei mașini cu un singur procesor - două elemente nu pot fi găsite într-o singură operație. Pentru algoritmul minim obținem inegalitățile n2<= T, min(n) <= 3n3+n2 . Вряд ли n2 - хорошая нижняя оценка, но уже известно, что n3 нижней оценкой не является, так как найдены более быстрые алгоритмы (в частности, алгоритм Штрассена). (8, стр. 211)

Există mai multe aspecte independente ale optimizării programului, dintre care vom evidenția două:

Optimizarea asociată cu alegerea metodei de construire a unui algoritm;

Optimizare asociată cu alegerea metodelor de prezentare a datelor în program.

Primul tip de optimizare este de natură globală și duce la o scădere a ordinii funcției de complexitate - de exemplu, înlocuirea unui algoritm cu T(V) = O(FS) cu un algoritm cu T(V) = O(V4). ). Depinde de modul în care sarcina este împărțită în subsarcini, cât de mult este inerentă această diviziune sarcinii în sine sau este doar o tehnică artificială. O abordare generală de ghidare aici ar putea fi să procedați în ordinea inversă a analizei algoritmice. Când se analizează folosind un algoritm recursiv, se construiește o ecuație, care este apoi rezolvată. În timpul optimizării, este implementat următorul lanț:

Formula care specifică dificultatea dorită ->

Ecuația corespunzătoare (una dintre cele posibile) ->

O metodă de împărțire a unei sarcini în subsarcini.

Al doilea tip de optimizare, fără modificarea structurii programului în ansamblu, duce la economisirea memoriei și/sau la simplificarea lucrului cu structurile de date, sporind eficiența procedurilor auxiliare care asigură o „interfață” între nivelul aplicației (la care gândiți în termeni de obiecte de nivel înalt - grafice, matrice, texte etc.) și la nivel de mașină, care acceptă cele mai simple tipuri de date (numere, simboluri, pointeri). Rezultatul este de obicei o scădere a coeficienților pentru unii termeni din funcția de complexitate (cu optimizare reușită - pentru termenul cel mai semnificativ), dar ordinea funcției de complexitate rămâne aceeași. (7, p. 204)

Ambele tipuri de optimizare se completează reciproc și pot fi utilizate împreună.

Algoritmi pentru rezolvarea problemelor de selecție. Algoritm de recoacere

Pentru a înțelege ce este optimizarea, trebuie să aflați de ce este nevoie de ea și să înțelegeți că în viață întâlnim optimizări în fiecare zi, de multe ori fără să le observăm. Să zicem că, după ce am primit următorul nostru salariu, decidem să ne distribuim bugetul...

Analiza si sinteza pe baza unui set de mijloace tehnice ale unui sistem ipotetic cu microprocesor pentru controlul optim al procesului tehnologic si al echipamentului unui generator de abur obiect tehnic in conditii de incertitudine stocastica

Una dintre problemele cheie în proiectarea sistemelor automate de control al proceselor este problema optimizării, a cărei formulare bine fundamentată și soluție de succes determină în mare măsură eficacitatea sistemului automat de control al procesului...

Modelarea computerizată a rețelelor AD-HOC fără fir în scopul calculării timpului de comunicare a abonaților de telefonie mobilă

Optimizarea este procesul de schimbare a unui program după anumite criterii pentru a-i îmbunătăți calitatea, păstrând în același timp sensul programului original. Pentru a reduce cantitatea de cod de program, acesta este împărțit în părți - subrutine...

Modelarea și optimizarea autostrăzilor

Să introducem următoarea notație: Xi - fonduri reziduale la începutul etapei i-a; Uj - suma de fonduri pe care s-a decis să o aloce întreprinderii i; Pi este profitul primit de această întreprindere...

Modelarea unui sistem de control automat folosind software și metode de simulare

Optimizarea este implementată folosind metoda planificării secvenţiale simplex (metoda simplex). Modul de optimizare include următoarele două submoduri: stabilirea condițiilor inițiale și a limitelor de optimizare; punem în aplicare optimizarea...

Optimizați planul de producție și aprovizionare folosind sistemul de planificare IBM ILOG Plant PowerOps

IBM ILOG Plant PowerOps constă din patru module: planificarea producției, dimensionarea lotului, programarea detaliată și capturarea cererii. Fiecare modul rezolvă probleme specifice în procesul de optimizare...

Caracteristici de lucru în pachetul software MicroCAP-7

Optimizarea parametrică se realizează în programul MC7 folosind metoda Powell în oricare dintre tipurile de analiză: analiză tranzitorie, analiză AC cu semnal mic și calculul caracteristicilor DC...

Caracteristici de creare de conținut text pentru site-ul web UNN. N.I. Lobaciovski

Deci, site-ul există deja. Este ușor de utilizat, are un design frumos și are toate proprietățile de consum imaginabile astăzi. Dar, dintr-un motiv oarecare, cifrele de prezență seamănă cu acele unui ceas oprit...

Proiectarea si modelarea circuitelor electrice in sistemul grafic AutoCAD si pachetul software OrCAD 9.2

magnetofon cinematic cu circuit electric În continuare, adăugăm parametrii de optimizare la circuit, setând „Valoarea curentă”, valorile inițiale „Valoarea inițială” ale componentelor, precum și toleranța „Toleranță”...

Dezvoltarea designului unui birou de calculator cu două locuri

Pe lângă capacitatea de a proiecta produse 3D, de a crea desene și specificații pentru piese, precum și de a calcula materialele necesare pentru fabricarea unui produs, „bCAD Furniture Maker” vă permite să produceți rentabil...

Dezvoltarea unui model de agentie imobiliara in conformitate cu standardul IDEF0

Acest model aparține tipului „a fi”, adică modelul este construit pe principiul „cum ar trebui să fie”. În procesul de creare a modelului, am corectat unele deficiențe...

Dezvoltarea unei aplicații pentru alegerea achiziției unei perechi de utilaje

Problemele de minimizare unidimensională sunt cel mai simplu model de optimizare matematică în care funcția obiectiv depinde de o variabilă, iar mulțimea admisibilă este un segment al axei reale...

Dezvoltarea programului „Determinarea perioadei optime de înlocuire a echipamentelor”

Una dintre problemele economice importante pe care le întâmpinăm în practică este determinarea strategiei optime pentru înlocuirea mașinilor vechi, clădirilor industriale, unităților, mașinilor etc., cu alte cuvinte...

Analiza de sistem a sistemului informatic de management al personalului întreprinderii

Crearea unui tur virtual 3D dintr-o serie de panorame foto virtuale

Pentru lipirea perfectă a unei panorame, adică lipirea fără „cusături” vizibile, distanța dintre perechile de puncte de control ar trebui să fie minimă. În timpul procesului de optimizare...

AGENȚIA FEDERALĂ PENTRU EDUCAȚIE

Instituția de învățământ de stat de învățământ profesional superior „Universitatea Tehnică de Stat Voronej”

Facultatea de Inginerie Radio

Departamentul de Inginerie Radio

Specialitatea 210302 „Inginerie radio”

Optimizarea algoritmilor de căutare

Completat de student gr. RT-041 D.S. Chetkin

Verificat de conf. univ al catedrei V.P. Litvinenko

Introducere. 4

1. Dezvoltarea unui algoritm optim de căutare dihotomică cu o distribuție de probabilitate echiprobabilă și numărul de evenimente M=16. 5

2. Dezvoltarea unui algoritm optim de căutare pentru legea distribuției probabilităților exponențiale pentru M=16. 7

3. Dezvoltarea unui algoritm optim pentru căutarea unei legi de distribuție exponențială cu un număr de măsurători de la N=15 la N=log2M.. 9

4. Dezvoltarea unui algoritm optim de căutare pentru a 9-a opțiune de distribuție cu numărul de măsurători de la N=1 la 15. 12

Concluzie. 19

Referințe.. 20

Introducere

Stealth caracterizează costurile (timp, bani) necesare identificării unui re-eveniment cu o fiabilitate dată (probabilitatea unei decizii corecte, probabilitatea de încredere).

La formarea unei evaluări a secretului unui eveniment aleatoriu, a fost adoptată ca bază o procedură de căutare pas cu pas cu două alternative, a cărei esență este următoarea.

Mulțimea X cu legea distribuției probabilităților corespunzătoare este împărțită în două submulțimi și (superscriptul este numărul partiției). Un contor binar efectuează o măsurătoare binară, identificând în ce subset se află reevenimentul (urma acestuia). Apoi, submulțimea în care a fost detectat reevenimentul (în Fig. 2.1. aceasta) este din nou împărțită în două subseturi și este dezvăluită o urmă a reevenimentului într-una dintre ele. Procedura se termină când există un eveniment în subsetul selectat. Căutarea poate fi secvenţială sau dihotomică. În primul algoritm (), o căutare secvenţială a stărilor este efectuată de la prima până la ultima până când este întâlnită un reeveniment.

Al doilea algoritm de căutare () implică împărțirea întregului set de stări în jumătate, verificarea prezenței unui re-eveniment în fiecare dintre aceste părți, apoi împărțirea jumătății selectate a mulțimii X în două părți egale, verificarea prezenței un reeveniment în ele și așa mai departe. Căutarea se termină când există un eveniment în subsetul selectat.

Există mai multe moduri de a minimiza procedurile binare de căutare. Exemplele includ metodele Zimmerman-Huffman și Shannon-Fono. Algoritmul poate fi optimizat în funcție de diverși parametri, ținând cont de costul măsurării și fără. În această lucrare de laborator, am investigat optimizarea unui algoritm de căutare dihotomică bazat pe cea mai mică valoare medie a stealth.

1. Dezvoltarea unui algoritm optim de căutare dihotomică cu o distribuție de probabilitate echiprobabilă și numărul de evenimente M=16

Activați modul de căutare dihotomică. Setați numărul de evenimente cu o distribuție uniformă de probabilitate și setați numărul de dimensiuni. Dezvoltați un algoritm de căutare optim, setați-l pe un câmp tipizat, efectuați modelarea și determinați potențialul secret.

În acest caz, cel mai optim algoritm de căutare este algoritmul dezvoltat conform principiului Shannon-Fano. Această metodă presupune împărțirea setului inițial de elemente cu o distribuție dată în două submulțimi cu numerele 0 și 1, astfel încât probabilitățile de a intra în ele să fie cât mai apropiate (ideal, la jumătate). Apoi fiecare dintre subseturile rezultate este împărțit separat în două subseturi cu aceeași condiție și numere 00,01,10,11. Partiția se termină atunci când toate elementele subsetului au un singur element.

Ca rezultat, a fost dezvoltat un algoritm de căutare optim pentru legea distribuției probabilităților echiprobabile.

Să calculăm secretul potențial pentru o lege de distribuție a probabilității la fel de probabilă:

(1)

Rezultatul pentru acest caz:

Ca urmare, s-a obținut o expresie simplă pentru determinarea potențialului secret al unei legi de distribuție uniforme, care, cu un algoritm de căutare dihotomic, nu depinde de enumerarea unei combinații de măsurători, ci doar de tipul arborelui de căutare.

Dezvoltarea unui algoritm optim de căutare pentru legea distribuției probabilităților exponențiale pentru M=16

Selectați o distribuție exponențială de probabilitate a evenimentelor de forma , , - factor de normalizare, cu aceeași ca la punctul 1. Determinați algoritmul optim de căutare, setați-l pe un câmp de apelare, efectuați modelarea, determinați potențialul secret.

Inițial, să lăsăm arborele de căutare la fel ca în paragraful anterior. „PrintScreen” al programului „Search” pentru acest caz pentru legea distribuției exponențiale.

Privind cursul curbei de eliminare a incertitudinii, ajungem la concluzia că cursul acesteia este suboptim. Folosind algoritmi cunoscuți de optimizare a căutării, ajungem la concluzia că în acest caz algoritmul optim de căutare nu este deloc un algoritm dihotomic pentru orice combinație de găsire a unui re-eveniment, ci una secvenţială. Pentru acest caz, este optim, deoarece prima măsurătoare verifică cea mai probabilă, apoi următoarea, și așa mai departe până când nu există nicio incertitudine în decizie.

Dovada utilizării unui algoritm de căutare secvenţială. În acest scop, se utilizează metoda Zimmerman-Huffman. Această metodă de optimizare constă în două etape: „Operațiuni de achiziție” și „Lectură”. Acest lucru este discutat mai detaliat în carte.

Deoarece exponentul este mai mare decât 1, aceasta satisface inegalitatea:

Unde λ este un exponent al distribuției de probabilitate egal cu 1, atunci pentru acest caz algoritmul de căutare secvențială este optim.

Ca urmare a acestui punct, se arată că un algoritm de căutare secvenţial este optim. Comparând rezultatele a doi pași, ajungem la concluzia că pentru fiecare lege de distribuție a probabilității există propriul algoritm de căutare optim, fie secvențial, dihotomic, fie algoritm de căutare combinat.

Dezvoltarea unui algoritm optim pentru căutarea unei legi de distribuție exponențială cu un număr de măsurători de la N=15 la N=log2M

Pentru distribuția exponențială a probabilității de la punctul 2, reducând succesiv numărul maxim de măsurători de la până la , dezvoltați algoritmi optimi de căutare și, pe baza rezultatelor simulării, determinați valorile corespunzătoare ale numărului mediu de măsurători.

Când N=15 din paragraful anterior, algoritmul de căutare secvenţială este optim şi pentru acesta se determină valoarea medie a măsurătorilor binare în acelaşi mod ca şi pentru potenţialul secret. Valoarea Rcp este prezentată în Tabelul 1.

Tabelul 1 – Dependența numărului mediu de măsurători

asupra numărului de măsurători cu algoritmi optimi de căutare

Să calculăm secretul potențial pentru fiecare caz folosind formula 1:

Când numărul de măsurători este egal cu 3, este imposibil să se dezvolte un algoritm de căutare, deoarece acesta nu satisface condiția de fezabilitate a căutării, și anume:

Ca rezultat, un grafic al dependenței numărului mediu de măsurători de numărul de măsurători este prezentat în Figura 8.

Figura 8 – Dependența numărului mediu de măsurători de numărul de măsurători pentru legea distribuției probabilităților exponențiale

4. Dezvoltarea unui algoritm optim de căutare pentru a 9-a opțiune de distribuție cu un număr de măsurători de la N=1 la 15

Pentru versiunea dvs. a distribuției de probabilitate pentru numărul de evenimente, dezvoltați un algoritm de căutare optim, construiți un arbore de căutare, explicați forma acestuia, ce o determină?

În câmpul de tastare, specificați algoritmul optim de căutare completă. Prin excluderea secvențială a ultimelor măsurători (până la), luați în considerare dependența numărului mediu de măsurători, probabilitatea soluției incomplete și secretul rezidual de durata căutării. Rezultatele sunt prezentate în Tabelul 2.

Tabelul 2 – Dependența numărului mediu de măsurători,

secret rezidual, probabilitatea de incertitudine în funcție de numărul de măsurători

n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
R 4 3.775 4.325 4.725 5.1625 5.375 5.5 5.65 5.7 5.7625 5.8 5.8
Pneop 0.55 0.7625 0.875 0 0 0 0 0 0 0 0 0 0 0 0
Sost 0.801 0.785 0.791 0.802 0.814 0.826 0.837 0.848 0.858 0.868 0.877 0.885 0.893 0.901

În acest tabel, Sost a fost calculat la un nivel de încredere de 0,9. „PrintScreen” al programului „Poisk” pentru diferite valori ale numărului de dimensiuni este prezentat în figurile 8-11.

Când numărul de măsurători este mai mic de 4, există posibilitatea unei soluții incomplete din cauza faptului că este imposibil să se verifice toate evenimentele. Ca urmare, nu totul trebuie verificat, cea mai bună opțiune ar fi să verificați cele mai probabile evenimente. „PrintScreen” al programului „Search” atunci când numărul de măsurători este mai mic de 3 este prezentat în Figura 12.

Să construim un grafic al dependenței secretului potențial de numărul de măsurători, care este prezentat în Figura 13.

Figura 13 – Dependența numărului mediu de măsurători de numărul de măsurători pentru a 9-a lege a distribuției probabilităților

Figura 14 – Dependența probabilității unei soluții incomplete de numărul de măsurători pentru a 9-a lege a distribuției probabilităților

(3)

(4)

Vom modifica probabilitatea de încredere în intervalul 0,7÷0,9. Ca urmare, a fost obținut un grafic al dependenței secretului rezidual de numărul de măsurători, care este prezentat în Figura 15.

Nost(Pdov) Pdov=0,9

Figura 15 – Dependența ascundării reziduale la valorile probabilității de încredere de 0,7÷0,9

Din graficul prezentat mai sus putem concluziona că Pdov ar trebui să fie ales aproape de unu, acest lucru va duce la o scădere a secretului rezidual, dar acest lucru nu este întotdeauna posibil.

Figura 16 – Dependența ascunsării reziduale pentru valorile numărului de dimensiuni 4,8,16

Din acest grafic rezultă că la un număr mare de măsurători secretul rezidual este mai mare, deși în mod logic un număr mai mare de măsurători va duce la o scădere a probabilității incertitudinii deciziei.

Concluzie

În această lucrare, au fost efectuate studii de optimizare a unui algoritm de căutare dihotomică folosind programul Poick. Se face o comparație cu algoritmul secvenţial. Tipul de SSC a fost studiat pentru o distribuție uniformă, exponențială și a evenimentelor specificate în funcție de variantă. Abilități dezvoltate în gestionarea programului Poick.

În timpul lucrărilor de laborator, au fost dezvoltați algoritmi optimi de căutare pentru algoritmi de căutare secvențială și dihotomică.

S-a calculat curba de eliminare a incertitudinii și s-a constatat că în unele cazuri este mai corect să se folosească un algoritm de căutare secvențială, iar în altele unul dihotomic. Dar acest lucru poate fi legat doar de distribuția de probabilitate inițială.

Funcționarea corectă a programului Poisk a fost confirmată cu ajutorul calculelor efectuate în pachetul software Matcard 2001.

Bibliografie

1. Fundamentele teoriei stealth: un manual pentru studenții cu normă întreagă de specialitatea 200700 „Inginerie radio” / Universitatea Tehnică de Stat Voronezh; Comp.Z.M. Kanevsky, V.P. Litvinenko, G.V. Makarov, D.A. Maksimov; editat de Z.M. Kanevski. Voronej, 2006. 202 p.

2. Orientări pentru munca de laborator „Cercetarea algoritmilor de căutare” la disciplina „Fundamentals of the Theory of Stealth” pentru studenții specialității 200700 „Inginerie radio” cu normă întreagă / Universitatea Tehnică de Stat Voronezh; comp.Z.M. Kanevsky, V.P. Litvinenko. Voronej, 2007.54p.

3. STP VSTU 005-2007. Proiectarea cursului. Organizare, ordine, executare decontare si nota explicativa si partea grafica.

Deci, cea mai responsabilă acțiune a managerului de memorie este să aloce un cadru de RAM pentru a găzdui o pagină virtuală situată în memoria externă. Amintiți-vă că luăm în considerare o situație în care dimensiunea memoriei virtuale pentru fiecare proces poate depăși semnificativ dimensiunea memoriei principale. Aceasta înseamnă că atunci când o pagină de memorie principală este alocată, există o probabilitate mare ca un cadru de pagină liber să nu fie găsit. În acest caz sistem de operareîn conformitate cu criteriile stabilite în acesta ar trebui:

  • găsiți o pagină de memorie principală ocupată;
  • mutați conținutul în memoria externă dacă este necesar;
  • rescrieți conținutul paginii virtuale dorite din memoria externă în acest cadru de pagină;
  • modificați în mod corespunzător elementul necesar din tabelul de pagini corespunzător;
  • continuați executarea procesului care avea nevoie de această pagină virtuală.

Rețineți că atunci când înlocuiți, trebuie să transferați pagina de două ori între memoria principală și cea secundară. Procesul de înlocuire poate fi optimizat prin utilizarea bit de modificare(unul dintre atributele paginii din tabelul paginii). Bitul de modificare este setat de computer dacă pe pagină a fost scris cel puțin un octet. La selectarea unui candidat de înlocuire, bitul de modificare este verificat. Dacă bitul nu este setat, nu este nevoie să rescrieți această pagină pe disc; o copie a acesteia este deja pe disc. O metodă similară se aplică și paginilor de numai citire, acestea nu sunt niciodată modificate. Această schemă reduce timpul de procesare a erorilor de pagină.

Există un număr mare de algoritmi diferiți de înlocuire a paginii. Toate sunt împărțite în locale și globale. Algoritmii locali, spre deosebire de cei globali, alocă un număr fix sau configurabil dinamic de pagini fiecărui proces. Când un proces a consumat toate paginile alocate, sistemul va elimina una dintre paginile sale din memoria fizică, mai degrabă decât paginile altor procese. Algoritmul de înlocuire globală, în cazul unei excepții, se va mulțumi cu eliberarea oricărei pagini fizice, indiferent de proces căruia i-a aparținut.

Algoritmii globali au o serie de dezavantaje. În primul rând, fac unele procese sensibile la comportamentul altor procese. De exemplu, dacă un proces dintr-un sistem folosește un număr mare de pagini de memorie în același timp, atunci toate celelalte aplicații vor experimenta o încetinire semnificativă ca rezultat din cauza cadrelor de memorie insuficiente pentru a funcționa. În al doilea rând, o aplicație care funcționează defectuos poate submina întregul sistem (cu excepția cazului în care, desigur, sistemul are o limită a cantității de memorie alocată procesului) încercând să obțină mai multă memorie. Prin urmare, într-un sistem multitasking, uneori este necesar să se utilizeze algoritmi locali mai complexi. Utilizarea algoritmilor locali necesită ca sistemul de operare să stocheze o listă de cadre fizice alocate fiecărui proces. Această listă de pagini este uneori numită set rezident proces. Într-una din secțiunile următoare, este luată în considerare o variantă a algoritmului de paginare, bazată pe aducerea setului rezident în corespondență cu așa-numitul set de lucru proces.

Eficiența algoritmului de obicei evaluat pe o anumită secvență de referințe de memorie, pentru care se numără numărul de erori de pagină care apar. Această secvență se numește linie de cereri(șir de referință) Putem genera un șir de lovituri în mod artificial folosind un senzor de numere aleatoare sau urmărind un anumit sistem. Ultima metodă produce prea multe link-uri, pentru a reduce numărul cărora puteți face două lucruri:

  • pentru o anumită dimensiune a paginii, vă puteți aminti doar numerele acestora și nu adresele către care se duce linkul;
  • Mai multe link-uri consecutive către o pagină pot fi înregistrate o singură dată.

După cum am menționat deja, majoritatea procesoarelor au cel mai simplu hardware, permițându-vă să colectați unele statistici privind accesările la memorie. Aceste facilități includ de obicei două steaguri speciale pentru fiecare intrare în tabelul de pagină. Indicatorul de referință este setat automat atunci când are loc orice acces la această pagină, iar bitul de modificare discutat mai sus este setat dacă se face o scriere pe această pagină. sistem de operare verifică periodic setarea unor astfel de steaguri pentru a aloca paginile utilizate în mod activ, după care valorile acestor steaguri sunt resetate.

Să ne uităm la o serie de algoritmi de înlocuire a paginii.

Algoritmul FIFO. Apăsând prima pagină pentru a ajunge

Cel mai simplu algoritm. Fiecărei pagini i se atribuie un marcaj de timp. Acest lucru este implementat pur și simplu prin crearea unei cozi de pagini, la sfârșitul cărora paginile merg atunci când sunt încărcate în memoria fizică și sunt preluate de la început când memoria trebuie eliberată. Cea mai veche pagină este selectată pentru înlocuire. Din păcate, este destul de probabil ca această strategie să aibă ca rezultat înlocuirea paginilor foarte utilizate, cum ar fi paginile de cod de procesor de text atunci când editați un fișier. Rețineți că atunci când înlocuiți paginile active, totul funcționează corect, dar eroarea paginii apare imediat.

Anomalie Belady

La prima vedere, pare evident că cu cât sunt mai multe cadre de pagină în memorie, cu atât vor apărea mai puține erori de pagină. În mod surprinzător, acesta nu este întotdeauna cazul. După cum au descoperit Biladi și colegii săi, anumite secvențe de accesări ale paginii duc de fapt la o creștere a numărului de încălcări ale paginii la creşterea cadrelor alocate procesului. Acest fenomen se numește „anomalii Biladi” sau „anomalii FIFO”.

Un sistem cu trei cadre (9 defecte) se dovedește a fi mai performant decât cu patru cadre (10 defecte) pentru linia de acces la memorie 012301401234 la alegerea strategiei FIFO.


Orez. 10.1.

Algoritmul optim (OPT)

Una dintre consecințele descoperirii anomaliei lui Biladi a fost căutarea unui algoritm optim care, pentru o anumită linie de cereri, să aibă frecvența minimă a erorilor de pagină dintre toți ceilalți algoritmi. Un astfel de algoritm a fost găsit. Este simplu: înlocuiți pagina care nu va fi folosită pentru cea mai lungă perioadă de timp.

Fiecare pagină trebuie să fie etichetată cu numărul de instrucțiuni care vor fi executate înainte ca pagina respectivă să fie prima dată referită. Pagina pentru care acest număr este cel mai mare ar trebui să fie scoasă.

Acest algoritm este ușor de descris, dar imposibil de implementat. Sistemul de operare nu știe ce pagină va fi accesată în continuare. (Anterior, astfel de probleme au apărut la programarea proceselor - algoritmul SJF).

Însă putem concluziona că pentru ca algoritmul de înlocuire să fie cât mai aproape de algoritmul ideal, sistemul trebuie să prezică cât mai precis accesul la memorie ale proceselor. Acest algoritm este utilizat pentru a evalua calitatea algoritmilor implementați.

Scoate cea mai lungă pagină nefolosită. Algoritmul LRU

O aproximare a algoritmului OPT este un algoritm bazat pe regula euristică conform căreia trecutul recent este un ghid bun pentru prezicerea viitorului apropiat.

Diferența cheie dintre FIFO și algoritmul optim este că unul privește înapoi, iar celălalt înainte. Dacă folosiți trecutul pentru a aproxima viitorul, este logic să înlocuiți pagina care nu a fost folosită de cel mai mult timp. Această abordare se numește cel mai putin recent folosit algoritm (LRU). Funcționarea algoritmului este ilustrată în Fig. orez. 10.2. Comparând Fig. 10.1 b și 10.2, puteți vedea că utilizarea algoritmului LRU vă permite să reduceți numărul încălcări ale paginii.


Orez. 10.2.

LRU este un algoritm bun, dar greu de implementat. Trebuie avut lista legată toate paginile din memorie, la începutul cărora vor fi stocate cele mai recent pagini utilizate. Mai mult, această listă trebuie actualizată cu fiecare acces la memorie. De asemenea, este nevoie de mult timp pentru a căuta pagini dintr-o astfel de listă.

În [Tanenbaum, 2002], este luată în considerare o variantă de implementare a algoritmului LRU cu un pointer special de 64 de biți, care este incrementat automat cu unul după ce fiecare instrucțiune este executată, iar tabelul de pagini are un câmp corespunzător în care valoarea pointerului este introdus cu fiecare referință la pagină. Când apare o eroare de pagină, pagina cu cea mai mică valoare a acestui câmp este descărcată.

Atât algoritmul optim, cât și LRU nu suferă de anomalia lui Biladi. Există o clasă de algoritmi pentru care, având aceeași linie de accesări, setul de pagini din memorie pentru n cadre este întotdeauna un subset de pagini pentru n+1 cadre. Acești algoritmi nu prezintă anomalia lui Bilady și sunt numiți algoritmi de stivă.

Ejectarea unei pagini utilizate rar. Algoritmul NFU

Deoarece majoritatea procesoarelor moderne nu oferă suport hardware adecvat pentru implementarea algoritmului