AiSD lista 7, zadanie 4

background image

AiSD: lista 7, zadanie 4

Paweł Laskoś-Grabowski

nr indeksu 169827

29 maja 2006

1

Treść

n-elementowym ciągiem o jednym zaburzeniu nazywamy dowolny ciąg, który może być
otrzymany z ciągu {1, 2, . . . , n} poprzez wykonanie jednej transpozycji. Załóżmy, że al-
gorytm InsertSort będzie uruchamiany jedynie na ciągach o jednym takim zaburzeniu.
Zbadaj średnią złożoność algorytmu przy założeniu, że dla każdego n wszystkie takie ciągi
n-elementowe są jednakowo prawdopodobne.

2

Rozwiązanie

Przeanalizujmy przebieg działania algorytmu na ciągu

1, 2, . . . , i − 1, j, i + 1, . . . , j − 1, i, j + 1, . . . , n − 1, n,

zauważając, że działa on w czterech „fazach”:

1. Sortowanie elementów 1, 2, . . . , i−1, j. Ponieważ każdy kolejny rozpatrywany element

jest większy od poprzedniego, wykonuje się i − 1 porównań (pierwszego elementu nie
porównujemy z niczym).

2. Wsortowanie elementów i + 1, . . . , j − 1. Każdy z nich porównywany jest ze stoją-

cym na początku listy j, od którego jest mniejszy, a następnie ze stojącym za nim,
od którego jest większy, zatem dla każdego z j − i − 1 elementów wykonuje się 2
porównania.

3. Wsortowanie elementu i. Wstawiany element jest mniejszy od stojących na początku

listy i + 1, . . . , j − 1, j (j − i porównań), ale większy od stojącego za nimi i − 1 –
ogółem j − i + 1 porównań.

4. Dosortowanie elementów j + 1, . . . , n − 1, n. Tu znów na początku listy zawsze stoi

element mniejszy od wsortowywanego, zatem wykonuje się po 1 porównaniu dla
każdego z n − j elementów.

Po zsumowaniu dostajemy koszt T (i, j) = n + 2(j − i − 1).

Subtelnie inny wynik otrzymamy, gdy i = 1. Tu fazy działania algorytmu są nastę-

pujące:

1. Wstawienie j. 0 porównań.

2. Wsortowanie elementów i + 1, . . . , j − 1. Pierwszy z nich porównywany jest raz (tylko

z j), następne – po 2 razy (z j oraz następnym na liście, na którym się „zatrzymują”).
Razem – 2(j − 3) + 1 porównań.

1

background image

3. Wsortowanie elementu i. Porównujemy go ze wszystkimi już znajdującymi się na

liście, gdyż są od niego większe – j − 1 porównań.

4. Dosortowanie pozostałych elementów. Tak jak poprzednio, wykonuje się n − j po-

równań.

Koszt sumaryczny wynosi teraz T (1, j) = n + 2(j − 3). Ostatecznie zatem

T (i, j) =

(

n + 2(j − i − 1)

dla i>1,

n + 2(j − i − 1) 2 dla i=1.

(1)

Aby policzyć średnią złożoność algorytmu, należy teraz zsumować wszystkie T (i, j) dla
1 ¬ i < j ¬ n (z równymi wagami, bo każdy ciąg – czyli każdą parę transponowanych
indeksów i, j – uznajemy za równo prawdopodobną), i podzielić przez ilość różnych ciągów,
czyli

n

2



. Zatem

S =

n−1

X

i=1

n

X

j=i+1

T (i, j) =

n

X

j=2

(n + 2(j − 1 1) 2) +

n−1

X

i=2

n

X

j=i+1

(n + 2(j − i − 1)) =

=

n−1

X

i=1

n

X

j=i+1

(n + 2(j − i − 1)) 2(n − 1) =

=

n−1

X

i=1

(n − 2i − 2)(n − i) + 2

n

X

j=i+1

j

2(n − 1) =

=

n−1

X

i=1



(n − 2i − 2)(n − i) + 2

(n + i + 1)(n − i)

2



2(n − 1) =

=

n−1

X

i=1

((n − i)(2n − i − 1)) 2(n − 1) =

=

n−1

X

i=1

(2n

2

− n + i(1 3n) + i

2

) 2(n − 1) =

= (2n

2

− n)(n − 1) + (1 3n)

n−1

X

i=1

i +

n−1

X

i=1

i

2

2(n − 1) =

= (2n

2

− n)(n − 1) + (1 3n)

(n − 1)n

2

+

(n − 1)n(2n − 1)

6

2(n − 1) =

=

5

6

n

3

3

2

n

2

4

3

n + 2.

(2)

Średnia złożoność wynosi zatem

S(n) =

2S

n(n + 1)

'

5

3

n,

(3)

gdzie pominęliśmy wyrazy niższych rzędów.

2


Wyszukiwarka

Podobne podstrony:

więcej podobnych podstron