Sortowanie przez wybieranie

0

Jaka jest średnia złożoność obliczeniowa sortowania przez wybieranie?
Przyda się też jakiś dowodzik :)

0

Złożoność wynosi dokładnie O(n^2) (gdzie O to duże theta), gdyż algorytm wykonuje zawsze te same kroki (zakładając, że operacja max(a, b) jest jednostkowa).

Mamy n - 1 przebiegów pętli, w i-tym przebiegu porównujemy n - i elementów z elementem i-tym i zamieniamy je miejscami. Wobec tego samych operacji max jest n - 1 + n - 2 + ... + 1 = (n - 1) * n / 2.

0

A czy w przypadku, gdy nie będziemy używać porównań, aby otrzymać następny element? Można na przykład zastosować funkcję partition celem znalezienia kolejnego najmniejszego elementu:

procedureSELECT(A,n,k)
  (*Wtablicy A(1),...,A(n)poszukujemy k-tego najmniejszego elementu tablicy i wstawiamy go napo-
  zycji k.
  integer n,k,m,r,j
  m=1;r=n+1;A(n+1)=+inf
  loop //za każdym razem gdy wchodzimy do pętli 1<=m<=k<=r<=n+1
    j=r  //ustawiaj jako najwyższy index tablicy+1
    call PARTITION(m,j) //zwraca j takie, że A(j) jest j-tą najmniejszą wartością
    case
      :k=j:return
      :k<j:r=j //j jest nowym górnym limitem
      :else:m=j+1 //j+1 jest nowym niskim limitem
    endcase
  repeat
endSELECT

Średnia złożoność obliczeniowa tego algorytmu jest O(n) (co najwyżej rzędu). Czy w tym przypadku średnia złożoność obliczeniowa dalej jest n^2

0

Algorytm Select(1) w optymistycznym przypadku (kiedy naszym pierwszym elementem dzielącym jest minimum) wykonuje tyle samo porównań co Minimum. W pesymistycznym wykonuje O(n^2) porównań (jeżeli zawsze naszym elementem dzielącym jest maksimum).

Średnia złożoność obliczeniowa Select(1) to O(n). Tak więc n wywołań Select(1) ma średnią złożoność obliczeniową O(n2). Pesymistycznie sortowanie przez wybieranie z użyciem algorytmu Select ma złożoność O(n3).

Nie rozumiem po co zastępować liczenie minimum algorytmem Select. Nie dość że pesymistyczna złożoność obliczeniowa jest drastycznie gorsza, optymistyczna i średnia gorsza o stały współczynnik (i to pewnie dość duży, strzelam że to jest 5 - 10) to jeszcze jest dużo więcej kodu do napisania. Chyba, że dla rozrywki.

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