kompleksitas waktu O1 dalam kasus ini. Dapat dikatakan, pada kasus rata-rata, dan terburuk prosedur sort, prosedur Sort membutuhkan kompleksitas waktu Omax f
+ O|min| f, di mana f adalah jumlah elemen yang sama. Dengan kata lain, kompleksitas waktu prosedur sort adalah Of max + |min|.
Kompleksitas waktu kasus terbaik dari algoritma SMS adalah On, ketika array masukan sudah terurut. Ini berarti, ketika nilai max sama dengan min baris 19-21
prosedur scan maka array input sudah diurutkan. Dalam kasus rata-rata dan terburuk, prosedur scan memerlukan kompleksitas waktu On, prosedur move membutuhkan
kompleksitas waktu On + max + |min|, dan prosedur sort memerlukan kompleksitas waktu Of max + |min|. Jika dianggap distribusi data adalah normal, frekuensi
elemen harus sedikit, dan karena sebagian besar aplikasi nyata memiliki n jauh lebih besar dari nilai max dan |min|, dapat dipertimbangkan max dan min sebagai konstanta
dan menghilangkannya. Kompleksitas waktu keseluruhan dari algoritma SMS dalam kasus rata-rata dan terburuk adalah On + f max + | min |, di mana f adalah jumlah
elemen yang sama Mansi, 2010.
2.13. Kompleksitas Ruang Memori Algortima SMS
Pada kasus terbaik, jika array masukan berisikan data yang sudah terurut, algoritma SMS berhentiselesai pada prosedur Scan dan algoritma SMS tidak memerlukan ruang
memori tambahan untuk mengurutkan array masukan. Jika semua elemen dari array masukan adalah positif, algoritma SMS hanya membuat 2 array baru, yakni PosArray
berukuran max + 1 dan FreqArray berukuran n, atau jika semua elemen dari array masukan adalah negatif, algoritma SMS juga hanya membuat 2 array baru, yakni
NegArray berukuran |min| + 1 dan FreqArray berukuran n. Dapat dikatakan dalam kasus rata-rata dan terburuk, algoritma SMS membutuhkan ruang memori tambahan
sebesar On + max + | min | +2 Masni, 2010.
Universita Sumatera Utara
BAB III
METODOLOGI PENELITIAN
3.1. Lingkungan Penelitian
Dalam penelitian ini penulis membangun algoritma pengurutan yang merupakan pengembangan dari algoritma SMS, terkait hal tersebut maka penulis akan
menganalisa langkah-langkah kerja algoritma SMS dan melakukan pengembangan pada beberapa tahapan di dalam algoritma SMS tersebut, sehingga nantinya algoritma
yang penulis bangun akan memiliki efisiensi kompleksitas waktu yang lebih baik dibandingkan algoritma SMS pada kasus rata-rata dan terburuk yang terjadi pada
algoritma SMS.
3.2. Teknik Pengembangan
Pengembangan yang dilakukan terhadap algoritma SMS adalah pada ketiga prosedur yang terdapat pada algoritma SMS tersebut prosedur Scan, Move, dan Sort. Pada sub
bab berikut ini akan terlihat pengembangan yang terjadi pada masing-masing prosedur tersebut.
3.2.1. Pengembangan prosedur scan
Pada algoritma SMS tujuan dari prosedur scan hanya untuk mendapatkan nilai maksimum, nilai minimum, jumlah elemen positif, dan jumlah elemen negatif dari
array masukan, maka dilakukan pengembangan sehingga prosedur scan bertujuan untuk mendapatkan nilai maksimum positif, nilai minimum positif, nilai maksimum
negatif, nilai minimum negatif, jumlah elemen positif, dan jumlah elemen negatif dari
Universita Sumatera Utara
array masukan. Adapun kegunaan nilai maksimum positif, nilai minimum positif, nilai maksimum negatif dan nilai minimum negatif tersebut nantinya adalah untuk
meminimalkan jumlah perulangan yang terjadi pada prosedur Move dan prosedur Sort. Untuk mendapatkan nilai maksimum positif, nilai minimum positif, nilai
maksimum negatif, nilai minimum negatif, jumlah elemen positif, dan jumlah elemen negatif dari array masukan tersebut, pseudocode prosedur Scan dikembangkan
menjadi sebagai berikut: Prosedur Scanarray, size
if size 1 then 1
var a, maxpos, minpos, maxneg, minneg, NOP, NON 2
maxpos:= 0 3
minpos:=100000 4
maxneg:=-100000 5
minneg:= -1 6
NOP:=0 7
NON:=0 8
for a:= 0 to size-1 do 9
if arraya = 0 then 10
NOP:= NOP+1 11
if arraya maxpos then 12
maxpos := arraya 13
end if 14
if arraya minpos then 15
minpos:=arraya 16
end if 17
else 18
NON:= NON+1 19
if arraya minneg then 20
minneg := arraya 21
end if 22
if arraya maxneg then 23
maxneg:=arraya 24
Universita Sumatera Utara
end if 25
end if 26
end for 27
if maxneg minneg then 28
maxneg = minneg 29
if minpos maxpos then 30
minpos = maxpos 31
if minpos ≠ maxpos and minneg ≠ maxneg then
32 Movearray, size, NOP, NON, maxpos, minpos, maxneg, minneg
33 end if
34 end if
35 Akhir prosedur Scan
3.2.2. Pengembangan prosedur move
Pada algoritma SMS prosedur Move menciptakan 3 tiga array sementara, yakni FreqArray berukuran n, PosArray berukuran nilai maksimum tambah 1 satu, dan
NegArray berukuran absolut dari nilai minimum ditambah 1 satu. Pengembangan yang dilakukan menjadikan prosedur Move bertujuan untuk menciptakan 4 empat
array sementara, yakni FreqPosArray berukuran jumlah bilangan positif NOP, FreqNegArray berukuran jumlah bilangan negatif NON, PosArray berukuran nilai
maksimum positif tambah 1 satu, dan NegArray berukuran absolut dari nilai minimum negatif tambah 1 satu, kemudian menginisialisasi PosArray, NegArray,
FreqPosArray dan FreqNegArray dengan nilai minimum negatif dikurang 1 satu untuk yang menunjukkan indeks yang akan dilewati di fase berikutnya. Kemudian
prosedur ini mendistribusikan elemen dari array masukan kepada keempat array tersebut, elemen-elemen positif disimpan dalam PosArray menggunakan elemen itu
sendiri sebagai indeks, elemen-elemen negatif disimpan dalam NegArray menggunakan nilai absolut dari elemen itu sendiri sebagai indeks, elemen-elemen
positif yang sering muncul disimpan dalam FreqPosArray dan elemen-elemen negatif yang sering muncul disimpan dalam FreqNegArray.
Pada prosedur Move algoritma SMS sebelumnya, perulangan untuk menginisialisasi PosArray dimulai dari 0 nol dengan step ditambah 1 satu sampai
Universita Sumatera Utara
dengan batas nilai maksimum, dan perulangan untuk menginisialisasi NegArray dimulai dari 0 dengan step ditambah 1 satu hingga batas absolut nilai minimum,
maka pada pengembangan algoritma SMS yang dilakukan penulis jumlah perulangan tersebut diminimalkan, dimana untuk menginisialisasi PosArray dimulai dari nilai
minimum positif dengan step ditambah 1 satu sampai dengan batas nilai maksimum positif, dan perulangan untuk menginisialisasi NegArray dimulai dari absolut nilai
maksimum negatif dengan step ditambahi 1 satu hingga batas absolut nilai minimum negatif.
FreqPosArray dan FreqNegArray merupakan array penyederhanaan dari FreqArray pada algoritma SMS sebelumnya, jika pada algoritma SMS sebelumnya
seluruh elemen yang muncul lebih dari 1 satu kali sering muncul baik elemen positif maupun negatif disimpan dalam FreqArray, maka pada pengembangan
algoritma SMS yang dilakukan penulis, elemen negatif yang sering muncul disimpan dalam FreqNegArray dengan menggunakan variabel j sebagai indeks dimulai dari nol
dan seterusnya bertambah satu, dan elemen positif yang sering muncul disimpan dalam FreqPosArray dengan menggunakan variabel i sebagai indeks, dimulai dari nol
dan seterusnya bertambah satu. Hal ini bertujuan nantinya untuk meminimalkan perulangan yang terjadi pada prosedur Sort. Untuk mencapai berbagai tujuan
pengembangan diatas, pseudocode prosedur Move dikembangkan menjadi sebagai berikut:
Prosedur Movearray, size, NOP, NON, maxpos, minpos, maxneg, minneg var b,c,d,i,j
1 i:=0
2 j:=0
3 create a new array: FreqPosArray[NOP] and initialize by the value minneg-1 4
create a new array: FreqNegArray[NON] and initialize by the value minneg-1 5 if NOP 0 then
6 create a new array:PosArray[maxpos+1]
7 for b:=minpos to maxpos do
8 PosArrayb:= minneg-1
9 end for
10 end if
11
Universita Sumatera Utara
if NON0 then 12
create a new array: NegArray[|minneg|+1] 13
for c:= |maxneg| to |minneg| do 14
NegArrayc:= minneg-1 15
end for 16
end if 17
for d:= 0 to size-1 do 18
if arrayd = 0 then 19
if PosArrayarrayd==minneg-1 then 20
PosArrayarrayd:=arrayd 21
else 22
FreqPosArrayi:=arrayd 23
i:=i+1 24
end if 25
else 26
if NegArray|arrayd|==minneg-1 then 27
NegArray|arrayd|:= arrayd 28
else 29
FreqNegArrayj:= arrayd 30
j:= j+1 31
end if 32
end if 33
end for 34
Sort array, NegArray, PosArray, FreqPosArray, FreqNegArray, NON, NOP, maxpos, minpos, maxneg, minneg, i, j
35 Akhir prosedur Move
3.2.3. Pengembangan prosedur sort
Prosedur Sort pada algoritma SMS sebelumnya bertujuan menyalin elemen-elemen dari NegArray mulai dari indeks terakhir dan mengabaikan elemen NegArray yang
berisi nilai minimum kurang 1 satu, kemudian menyalin elemen-elemen dari PosArray mulai dari indeks pertama dan juga mengabaikan elemen PosArray yang
Universita Sumatera Utara
berisi nilai nilai minimum dikurang 1 satu. Pada prosedur Sort algoritma SMS sebelumnya, perulangan untuk penyalinan elemen-elemen negatif dari NegArray
dimulai dari nilai absolut dari elemen minimum negatif dikurang 1 satu sampai batas 0 nol dan perulangan untuk penyalinan elemen-elemen positif dari PosArray dimulai
dari 0 nol ditambah 1 satu sampai batas nilai maksimum. Kemudian penulis melakukan pengembangan untuk meminimalkan perulangan tersebut dengan cara
perulangan untuk penyalinan elemen-elemen negatif dari NegArray dimulai dari nilai absolut elemen minimum negatif dikurang 1 satu sampai batas nilai absolut dari
elemen maksimum negatif dan perulangan untuk penyalinan elemen-elemen positif dari PosArray dimulai dari nilai minimum positif ditambah 1 satu sampai batas nilai
maksimum positif. Penyalinan dilakukan pada array input asli dengan menimpa nilai- nilai asli dengan nilai-nilai yang telah diurutkan.
Pada prosedur Sort algoritma SMS sebelumnya, setelah menyalin setiap elemen dari NegArray dan PosArray ke array yang asli, kemudian dilanjutkan prosedur
pencarian FreqArray dan menyalin semua elemen yang sama dengan elemen yang disalin dalam operasi penyalinan terakhir elemen saat ini, yang mengakibatkan akan
dilakukan perulangan sejumlah banyaknya elemen pada FreqArray setiap kali ditemukan elemen yang tidak sama dengan nilai minimum kurang 1 satu.
Pengembangan yang dilakukan penulis pada prosedur Sort ini adalah meminimalkan jumlah perulangan tersebut, dengan cara jika elemen saat ini adalah positif maka
pencarian akan dilakukan pada FreqPosArray dan jika elemen saat ini adalah negatif maka pencarian akan dilakukan pada FreqNegArray, banyaknya elemen pada
FreqPosArray dan FreqNegArray lebih kecil dari banyaknya elemen pada FreqArray, karena FreqPosArray dan FreqNegArray adalah penyederhanaan dari FreqArray,
dimana FreqPosArray menampung elemen positif dari FreqArray dan FreqNegArray menampung elemen negatif dari FreqArray. Untuk mencapai tujuan-tujuan
pengembangan diatas, pseudocode prosedur Sort dikembangkan menjadi sebagai berikut :
Prosedur Sortarray, NegArray, PosArray, FreqPosArray, FreqNegArray, NON, NOP, maxpos, minpos, maxneg, minneg, i, j
var index,x,y 1
index:=0 2
Universita Sumatera Utara
if NON 0 then 3
for x:= |minneg| downto |maxneg| do 4
if NegArrayx ≠ minneg-1 then
5 arrayindex:= NegArrayx
6 index:= index+1
7 for y:= 0 to j do
8 if FreqNegArrayy==arrayindex-1 then
9 arrayindex:= FreqNegArrayy
10 index:= index+1
11 end if
12 end for
13 end if
14 end for
15 end if
16 if NOP 0 then
17 for x:= minpos to maxpos do
18 if PosArrayx
≠ minneg-1 then 19
arrayindex:= PosArrayx 20
index:= index+1 21
for y:= 0 to i do 22
if FreqPosArrayy== arrayindex-1 then 23
arrayindex:=FreqPosArrayy 24
index:= index+1 25
end if 26
end for 27
end if 28
end for 29
end if 30
Akhir prosedur Sort
Universita Sumatera Utara
3.3. Proses Analisis