W jaki sposób liczy się złożoność obliczeniową QuickSort?

0

Staram się ostatnio zrozumieć sposób w jaki liczy się złożoność obliczeniową algorytmu QuickSort. Oto jego kod:

void qsort(int *tab, int left, int right)
{
     if(left < right)
     {
          int m = left;
          for(int i = left+1; i<=right; i++)
               if(tab[i] < tab[left])
                   swap(tab[++m], tab[i]);
           swap(tab[left], tab[m])
           qsort(tab, left, m-1);
           qsort(tab, m+1, right);
      }
}

Przykładowe wartości do posortowanie:
6 4 7 1 8 9 6 2
Jak można policzyć złożoność dla danych liczb?

5

Nie da się. Dla danych liczb możesz najwyżej policzyć ile operacji wykonał algorytm. Rząd złożoności obliczeniowej okresla jak zmieni się czas działania algorytmu w odpowiedzi na zwiększenie/zmniejszenie danych wejściowych
Jeśli złożoność algorytmu wynosi O(n3) to znaczy że dla problemu o rozmiarze X algorytm działa Y sekund a dla problemu o rozmiarze 5*X algorytm będzie działał 53Y = 125Y sekund.
Wynika z tego że nie można mówić o czymś takim jak "złożoność obliczenowa algorytmu dla danych liczb".

0

Rozumiem. A czy zapisanie równania rekurencyjnego dla jakichś danych jest możliwe?

Biorąc dane z pierwszego postu możemy prześledzić jak wykona się sortowanie.

1 wywołanie:
Element osiowy - 6.
Lewa strona - 4, 1, 2.
Prawa strona - 7, 8, 9, 6

  1. wywołanie:
    Element osiowy - 4
    Lewa strona - 1, 2
    Prawa strona - pusta

  2. wywołanie:
    Element osiowy - 1
    Lewa strona - pusta
    Prawa strona - 2

  3. wywołanie:
    Element osiowy - 7
    Lewa strona - 6
    Prawa strona - 8, 9

  4. wywołanie:
    Element osiowy - 8
    Lewa strona - pusta
    Prawa strona - 9

Można to sobie ładnie w drzewku rozpisać. Czy na podstawie takiego drzewa mogę zapisać równanie rekurencyjne?

1 użytkowników online, w tym zalogowanych: 0, gości: 1