You are on page 1of 19

Zadatak 1

Demonstrirati algoritam za direktno umetanje (insertion sort)


na primeru sortiranja neuređenog niza
3, 10, 4, 6, 8, 9, 7, 2, 1, 5

INSERTION-SORT(a)
for i = 2 to n do
K = a[i]
j=i–1
while (j > 0) and (a[j]) > K) do
a[j + 1] = a[j]
j = j –1
end_while
a[j + 1] = K
end_for
Elektrotehnički fakultet, Algoritmi i Strukture Podataka 1
Beograd
Zadatak 1 – Rešenje
i=2
k=10 3 10 4 6 8 9 7 2 1 5
j i
i=3
k=4 3 10 4 6 8 9 7 2 1 5
j i
3 10 10 6 8 9 7 2 1 5
j i
3 4 10 6 8 9 7 2 1 5
j i
i=4 3 4 10 6 8 9 7 2 1 5
k=6
j i
i=5 3 4 6 10 8 9 7 2 1 5
k=8
j i
Elektrotehnički fakultet, Algoritmi i Strukture Podataka 2
Beograd
Zadatak 1 – Rešenje
i=6 3 4 6 8 10 9 7 2 1 5
k=9
j i

i=7 3 4 6 8 9 10 7 2 1 5
k=7
j i
3 4 6 8 9 10 10 2 1 5
j i
3 4 6 8 9 9 10 2 1 5
j i
3 4 6 8 8 9 10 2 1 5
j i
3 4 6 7 8 9 10 2 1 5
j i
Elektrotehnički fakultet, Algoritmi i Strukture Podataka 3
Beograd
Zadatak 1 – Rešenje
i=8
k=2 3 4 6 7 8 9 10 2 1 5
j=0 i

i=9
k=1 2 3 4 6 7 8 9 10 1 5
i
i=10
k=5 1 2 3 4 6 7 8 9 10 5
i

1 2 3 4 5 6 7 8 9 10

Performanse: najbolje O(n), najgore O(n2), prosečno O(n2).


Dobre performanse za prilično uređene nizove.

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 4


Beograd
Zadatak 2

Opisati sortiranje primenom metoda umetanja


sa smanjenjem inkrementa (shell sort).

Objasniti na čemu se zasniva efikasnost ovog metoda,


kako se bira sekvenca inkremenata
i kolika je složenost metoda.

Ilustrovati rad algoritma pri sortiranju niza


19, 61, 42, 31, 7, 95, 77 i 25
u tri iteracije sa efikasnim izborom inkrementa.

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 5


Beograd
Zadatak 2 – Rešenje

SHELL-SORT(a, h) Shell sort pokušava da popravi


for i = 1 to t do nedostatke algoritma insertion sort:
inc = h[i]
for j = inc + 1 to n do 1. insertion sort najbolje radi
y =a[j] kada je niz (gotovo) uređen
k = j – inc
while (k  1) and (y < a[k]) do 2. loše performanse duguje
a[k + inc] = a[k] višestrukom pomeranju podataka
k = k – inc za jedno mesto (korak)
end_while
a[k + inc] = y 3. ideja: napraviti više prolaza, najpre
end_for sa većom vrednošću koraka a
end_for zatim sve manjom dok se niz ne
svede na situaciju koja je pogodna
za insertion sort

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 6


Beograd
Zadatak 2 – Rešenje

Performanse zavise i od sekvence inkremenata


Generalno: sekvenca h1,h2,h3,...,ht proizvoljna,
ali mora da ispuni uslove hi+1 < hi, ht = 1

Predložena optimalna sekvenca, empirijski utvrđena:


1, 4, 10, 23, 57, 132, 301, 701
(Marcin Ciura, Best Increments for the Average Case of Shellsort, 13th International
Symposium on Fundamentals of Computation Theory, 2001)

Performanse: najgore O(n2), prosečno O(n1.3).


Još uvek nije dokazano da li može O(n log n).

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 7


Beograd
Zadatak 2 – Rešenje

h1 = 4 19 61 42 31 7 95 77 25

h2 = 2 7 61 42 25 19 95 77 31

h3 = 1 7 25 19 31 42 61 77 95

7 19 25 31 42 61 77 95

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 8


Beograd
Zadatak 4
Ilustrovati rad algoritma direktne selekcije (selection sort)
pri sortiranju niza: 13, 10, 4, 6, 8, 9, 7, 2, 1, 5

SELECTION-SORT(a) U svakom ciklusu i


for i = 1 to n - 1 do • algoritam pronalazi element najmanje
min = a[i] vrednosti u neobrađenom delu niza
pos = i • menja mesta uočenom minimalnom
for j = i + 1 to n do elementu sa elementom i
if (a[j] < min) then
min = a[j] Performanse:
pos = j • najgori slučaj O(n2)
end_if • pretraga ne zavisi od uređenosti niza,
end_for pa je prosečna i najbolja takođe O(n2)
a[pos] = a[i] • za razliku od INSERTION-SORT-a,
a[i] = min algoritam zahteva da ceo niz bude u
end_for dostupan pre početka izvršavanja
Elektrotehnički fakultet, Algoritmi i Strukture Podataka 9
Beograd
Zadatak 4 – Rešenje

13 10 4 6 8 9 7 2 1 5
i min

1 10 4 6 8 9 7 2 13 5
i min

1 2 4 6 8 9 7 10 13 5
i min

1 2 4 6 8 9 7 10 13 5
i min

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 10


Beograd
Zadatak 8

• Objasniti postupak i realizaciju algoritma particijskog


sortiranja (quicksort).
• Demonstrirati algoritam na primeru sortiranja
neuređenog niza 64, 81, 24, 42, 90, 30, 9 i 95.
Za pivot izabrati prvi element u particiji.
• Izvesti performanse u najboljem i najgorem slučaju.
Kako se može izbeći najgori slučaj?

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 11


Beograd
Zadatak 8 – Rešenje

• Quicksort se bazira na strategiji "podeli i osvoji"


(divide and conquer)
– složen problem se razlaže
na nekoliko jednostavnijih potproblema
koji su po prirodi isti kao i složen (osnovni problem)
– novi potproblemi se dalje razlažu
na još jednostavnije potprobleme
– proces razlaganja se nastavlja sve dok rezultujući potproblem
nije trivijalan za rešavanje
• Generalna ideja:
– podeliti osnovni niz na dva podniza razdvojenih elementom
koji se garantovano nalazi
na svojoj konačnoj poziciji (poziciji nakon sortiranja)
– primeniti ovaj postupak na dobijene podnizove

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 12


Beograd
Zadatak 8 – Rešenje
QUICKSORT(a, low, high)
• Quicksort se najjednostavnije formuliše
if (low ≥high) then return u svom rekurzivnom obliku
j = PARTITION(a, low, high) • Funkcija PARTITION preuređuje osnovni niz
QUICKSORT(a, low, j - 1) i vraća indeks pozicije
QUICKSORT(a, j + 1, high) koja razdvaja dva podniza
– PIVOT je element koji razdvaja podnizove
– nakon preuređivanja, svi elementi pre pivota
PARTITION(a, down, up)
moraju biti manji ili jednaki pivotu,
i = down
svi nakon pivota veći ili jednaki
j = up
pivot = a[down] – izbor pivota utiče na performanse algoritma
while (i < j) do
while ((a[i]  pivot) and (i < j)) do i = i + 1 end_while
while (a[j] > pivot) do j = j – 1 end_while
if (i < j) then a[i]  a[j] end_if
end_while
a[down] = a[j]
a[j] = pivot
return j
Elektrotehnički fakultet, Algoritmi i Strukture Podataka 13
Beograd
Zadatak 8 – Rešenje
U postavci je rečeno da se za pivot bira prvi element particije.
Na početku, ceo niz je jedna particija.

64 81 24 42 90 30 9 95
i j

64 81 24 42 90 30 9 95
i j

64 81 24 42 90 30 9 95
i j

64 9 24 42 90 30 81 95
i j

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 14


Beograd
Zadatak 8 – Rešenje

64 9 24 42 90 30 81 95
i j

64 9 24 42 30 90 81 95
i j

64 9 24 42 30 90 81 95
j i

30 9 24 42 64 90 81 95

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 15


Beograd
Zadatak 8 – Rešenje

30 9 24 42 64 90 81 95
i j

30 9 24 42 64 90 81 95
j i

24 9 30 42 64 90 81 95

24 9 30 42 64 90 81 95
i j

24 9 30 42 64 90 81 95
i, j
Elektrotehnički fakultet, Algoritmi i Strukture Podataka 16
Beograd
Zadatak 8 – Rešenje

9 24 30 42 64 90 81 95

i,j

9 24 30 42 64 90 81 95

i j

9 24 30 42 64 90 81 95

j i

9 24 30 42 64 81 90 95

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 17


Beograd
Zadatak 8 – Rešenje

• Performanse algoritma quicksort


– najbolji slučaj: O(n log n)
– najgori slučaj: O(n2)
• nastaje kada je u svakom koraku pivot inicijalno na svom mestu
• postoji samo jedna rezultujuća particija
• primer: niz je već sortiran, pivot je prvi element particije

– poboljšanje: fleksibilniji izbor pivota


• slučajan izbor
• bira se jedan od nekoliko članova particije

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 18


Beograd
Korisni sajtovi sa simulacijama

http://www.ida.liu.se/~TDDB28/mtrl/demo/sorting/index.sv.shtml

http://home.earthlink.net/~mihailod/atic/sorting.html

http://www.cs.ubc.ca/~harrison/Java/sorting-demo.html

Elektrotehnički fakultet, Algoritmi i Strukture Podataka 19


Beograd

You might also like