logo

Analýza algoritmů | Velký – Θ (Big Theta) zápis

V analýza algoritmů , asymptotické zápisy se používají k hodnocení výkonu algoritmu v jeho nejlepší případy a nejhorší případy . Tento článek se bude zabývat notacemi Big – Theta reprezentovanými řeckým písmenem (Θ).

Definice: Nechť g a f je funkce z množiny přirozených čísel k sobě samé. Funkce f se nazývá Θ(g), pokud existují konstanty c1, c2> 0 a přirozené číslo n0takové, že c1* g(n) ≤ f(n) ≤ c2* g(n) pro všechna n ≥ n0

Matematické znázornění:



Θ (g(n)) = {f(n): existují kladné konstanty c1, c2a n0tak, že 0 ≤ c1* g(n) ≤ f(n) ≤ c2* g(n) pro všechna n ≥ n0}
Poznámka: Θ(g) je množina

Výše uvedená definice znamená, že pokud f(n) je theta g(n), pak hodnota f(n) je vždy mezi c1 * g(n) a c2 * g(n) pro velké hodnoty n (n ≥ n0). Definice theta také vyžaduje, že f(n) musí být nezáporné pro hodnoty n větší než n0.

java spánek

Grafické znázornění:

Grafické znázornění

V jednoduchém jazyce, Big – Theta(Θ) notace specifikuje asymptotické meze (horní i dolní) pro funkci f(n) a poskytuje průměrnou časovou složitost algoritmu.

Chcete-li zjistit průměrnou časovou složitost libovolného programu, postupujte podle následujících kroků:

  1. Rozdělte program na menší části.
  2. Najděte všechny typy a počet vstupů a spočítejte počet operací, které je třeba provést. Ujistěte se, že vstupní případy jsou rovnoměrně rozloženy.
  3. Najděte součet všech vypočítaných hodnot a vydělte součet celkovým počtem vstupů, řekněme, že získaná funkce n je g(n) po odstranění všech konstant, pak v notaci Θ je reprezentována jako Θ(g(n))

Příklad: Zvažte příklad k pomocí lineárního vyhledávání zjistěte, zda klíč v poli existuje nebo ne . Myšlenka je procházet pole a zkontrolujte každý prvek, zda se rovná klíči nebo ne.

Pseudokód je následující:

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

Níže je uvedena implementace výše uvedeného přístupu:

dělat v Javě

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; }>
>
>

Jáva

// 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>
>
>

Výstup
Element is present in array>

Časová náročnost: Na)
Pomocný prostor: O(1)

V problému lineárního vyhledávání předpokládejme, že všechny případy jsou rovnoměrně rozložené (včetně případu, kdy klíč v poli chybí). Takže sečtěte všechny případy (když je klíč na pozici 1, 2, 3, ……, n a není přítomen, a vydělte součet n + 1.

náhodný c

Průměrná časová složitost případu = frac{sum_{i=1}^{n+1}	heta(i)}{n + 1}

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

	heta(1 + n/2)

Opalování)(konstanty jsou odstraněny)

Kdy použít velký – Θ zápis: Big – Θ analyzuje algoritmus s nejpřesnější přesností, protože při výpočtu Big – Θ je uvažováno s rovnoměrným rozdělením různého typu a délky vstupů, poskytuje průměrnou časovou složitost algoritmu, která je při analýze nejpřesnější, ale v praxi někdy je obtížné najít rovnoměrně rozloženou sadu vstupů pro algoritmus, v tom případě, Big-O zápis se používá, které představuje asymptotickou horní mez funkce f.

Další podrobnosti naleznete na adrese: Návrh a analýza algoritmů .