logo

Analiza algoritmov | Big – Θ (Big Theta) zapis

V analiza algoritmov , se asimptotični zapisi uporabljajo za ovrednotenje delovanja algoritma v njegovem najboljše in najslabše primere . Ta članek bo obravnaval oznake Big – Theta, ki jih predstavlja grška črka (Θ).

definicija: Naj bosta g in f funkcija iz množice naravnih števil sama sebi. Za funkcijo f pravimo, da je Θ(g), če obstajajo konstante c1, c2> 0 in naravno število n0tako da c1* g(n) ≤ f(n) ≤ c2* g(n) za vse n ≥ n0

Matematična predstavitev:



Θ (g(n)) = {f(n): obstajajo pozitivne konstante c1, c2in n0tako da je 0 ≤ c1* g(n) ≤ f(n) ≤ c2* g(n) za vse n ≥ n0}
Opomba: Θ(g) je množica

Zgornja definicija pomeni, da če je f(n) theta od g(n), potem je vrednost f(n) vedno med c1 * g(n) in c2 * g(n) za velike vrednosti n (n ≥ n0). Definicija theta prav tako zahteva, da mora biti f(n) nenegativen za vrednosti n, večje od n0.

js onload

Grafična predstavitev:

Grafična predstavitev

V preprostem jeziku zapis Big – Theta(Θ) podaja asimptotične meje (tako zgornje kot spodnje) za funkcijo f(n) in zagotavlja povprečno časovno kompleksnost algoritma.

Sledite spodnjim korakom, da ugotovite povprečno časovno zahtevnost katerega koli programa:

  1. Program razdelite na manjše segmente.
  2. Poiščite vse vrste in število vhodov ter izračunajte število operacij, ki jih je treba izvesti. Prepričajte se, da so primeri vnosa enakomerno porazdeljeni.
  3. Poiščite vsoto vseh izračunanih vrednosti in vsoto delite s skupnim številom vhodov, recimo, da je funkcija n, dobljena po odstranitvi vseh konstant, g(n), nato pa je v zapisu Θ predstavljena kot Θ(g(n))

primer: Razmislite o primeru z uporabo linearnega iskanja ugotovi, ali ključ obstaja v matriki ali ne . Ideja je, da prečkati niz in preverite vsak element, če je enak ključu ali ne.

sql vrstni red po datumu

Psevdokoda je naslednja:

bool linearSearch(int a[], int n, int key) {  for (int i = 0; i   if (a[i] == key)  return true;  }   return false; }>

Spodaj je izvedba zgornjega pristopa:

C++

// C++ program for the above approach> #include> using> namespace> std;> // Function to find whether a key exists in an> // array or not using linear search> bool> linearSearch(>int> a[],>int> n,>int> key)> {> >// Traverse the given array, a[]> >for> (>int> i = 0; i // Check if a[i] is equal to key if (a[i] == key) return true; } return false; } // Driver Code int main() { // Given Input int arr[] = { 2, 3, 4, 10, 40 }; int x = 10; int n = sizeof(arr) / sizeof(arr[0]); // Function Call if (linearSearch(arr, n, x)) cout << 'Element is present in array'; else cout << 'Element is not present in array'; return 0; }>
>
>

Java

// Java program for the above approach> import> java.lang.*;> import> java.util.*;> class> GFG{> // Function to find whether a key exists in an> // array or not using linear search> static> boolean> linearSearch(>int> a[],>int> n,> >int> key)> {> > >// Traverse the given array, a[]> >for>(>int> i =>0>; i { // Check if a[i] is equal to key if (a[i] == key) return true; } return false; } // Driver code public static void main(String[] args) { // Given Input int arr[] = { 2, 3, 4, 10, 40 }; int x = 10; int n = arr.length; // Function Call if (linearSearch(arr, n, x)) System.out.println('Element is present in array'); else System.out.println('Element is not present in array'); } } // This code is contributed by avijitmondal1998>
>
>

Python3

# Python3 program for the above approach> # Function to find whether a key exists in an> # array or not using linear search> def> linearSearch(a, n, key):> ># Traverse the given array, a[]> >for> i>in> range>(>0>, n):> ># Check if a[i] is equal to key> >if> (a[i]>=>=> key):> >return> True> > >return> False> # Driver Code> # Given Input> arr>=> 2>,>3>,>4>,>10>,>40> x>=> 10> n>=> len>(arr)> # Function Call> if> (linearSearch(arr, n, x)):> >print>(>'Element is present in array'>)> else>:> >print>(>'Element is not present in array'>)> > # This code is contributed by shivanisinghss2110>
>
>

C#

// C# program for above approach> using> System;> class> GFG{> // Function to find whether a key exists in an> // array or not using linear search> static> bool> linearSearch(>int>[] a,>int> n,> >int> key)> {> > >// Traverse the given array, a[]> >for>(>int> i = 0; i { // Check if a[i] is equal to key if (a[i] == key) return true; } return false; } // Driver Code static void Main() { // Given Input int[] arr = { 2, 3, 4, 10, 40 }; int x = 10; int n = arr.Length; // Function Call if (linearSearch(arr, n, x)) Console.Write('Element is present in array'); else Console.Write('Element is not present in array'); } } // This code is contributed by sanjoy_62.>
>
>

Javascript

> // JavaScript program for the above approach> // Function to find whether a key exists in an> // array or not using linear search> function> linearSearch(a, n, key)> {> > >// Traverse the given array, a[]> >for>(>var> i = 0; i { // Check if a[i] is equal to key if (a[i] == key) return true; } return false; } // Driver code // Given Input var arr = [ 2, 3, 4, 10, 40 ]; var x = 10; var n = arr.length; // Function Call if (linearSearch(arr, n, x)) document.write('Element is present in array'); else document.write('Element is not present in array'); // This code is contributed by shivanisinghss2110>
>
>

Izhod
Element is present in array>

Časovna zapletenost: O(n)
Pomožni prostor: O(1)

V problemu linearnega iskanja predpostavimo, da so vsi primeri enaki enakomerno porazdeljena (vključno s primerom, ko v matriki ni ključa). Torej seštejte vse primere (ko je ključ prisoten na mestu 1, 2, 3, ……, n in ni prisoten, in vsoto delite z n + 1.

Povprečna časovna zapletenost primera = frac{sum_{i=1}^{n+1}	heta(i)}{n + 1}

frac{	heta((n+1)*(n+2)/2)}{n+1}

	heta(1 + n/2)

	heta(n)(konstante so odstranjene)

spanje v javascriptu

Kdaj uporabiti zapis Big – Θ: Big – Θ analizira algoritem z najnatančnejšo natančnostjo, saj se pri izračunu Big – Θ upošteva enakomerna porazdelitev različnih vrst in dolžin vhodov, zagotavlja povprečno časovno kompleksnost algoritma, ki je najbolj natančen pri analizi, vendar v praksi včasih postane težko najti enakomerno porazdeljen nabor vnosov za algoritem, v tem primeru Zapis z velikim O ki predstavljajo asimptotično zgornjo mejo funkcije f.

Za več podrobnosti glejte: Oblikovanje in analiza algoritmov .