Pseudocode Algoritma SMS Kompleksitas Waktu Algortima SMS

minimum dikurang 1 satu untuk yang menunjukkan indeks yang akan dilewati di fase berikutnya. Kemudian, prosedur ini mendistribusikan elemen pada tiga array, 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, dan elemen yang sering muncul disimpan dalam FreqArray menggunakan variabel i sebagai indeks dimulai dari nol dan seterusnya bertambah satu. Prosedur ketiga adalah prosedur Sort pengurutan yang 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 berisi nilai nilai minimum dikurang 1 satu. Penyalinan dilakukan pada array input asli dengan menimpa nilai-nilai asli dengan nilai-nilai yang telah diurutkan. 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 Mansi, 2010.

2.11. Pseudocode Algoritma SMS

Prosedur Scanarray, size if size 1 then 1 var a, max, min, NOP, NON 2 max:=array0 3 min:=array0 4 NOP:=0 5 NON:=0 6 for a:= 0 to size-1 do 7 if arraya max then 8 max := arraya 9 else 10 min:=arraya 11 end if 12 Universita Sumatera Utara if arraya = 0 then 13 NOP:= NOP+1 14 else 15 NON:= NON+1 16 end if 17 end for 18 if min ≠ max then 19 Movearray, size, NOP, NON, max, min 20 end if 21 end if 22 Akhir prosedur Scan Prosedur Movearray, size, NOP, NON, max, min var b,c,d,i 1 i:=0 2 create a new array: FreqArray[size] and initialize by the value min-1 3 if NOP 0 then 4 create a new array:PosArray[max+1] 5 for b:=0 to max do 6 PosArrayb:= min-1 7 end for 8 end if 9 if NON0 then 10 create a new array: NegArray[|min|+1] 11 for c:= 0 to |min|+1 do 12 NegArrayc:= min-1 13 end for 14 end if 15 for d:= 0 to size-1 do 16 if arrayd = 0 then 17 if PosArrayarrayd==min-1 then 18 PosArrayarrayd:=arrayd 19 else 20 Universita Sumatera Utara FreqArrayi:=arrayd 21 i:=i+1 22 end if 23 else 24 if NegArray|arrayd|==min-1 then 25 NegArray|arrayd|:= arrayd 26 else 27 FreqArrayi:= arrayd 28 i:= i+1 29 end if 30 end if 31 end for 32 Sortarray, NegArray, PosArray, FreqArray, NON, NOP, max, min, i 33 Akhir prosedur Move Prosedur Sortarray, NegArray, PosArray, FreqArray, NON, NOP, max, min, i var index,x,y 1 index:=0 2 if NON 0 then 3 for x:= |min| downto 0 do 4 if NegArrayx ≠ min-1 then 5 arrayindex:= NegArrayx 6 index:= index+1 7 for y:= 0 to i do 8 if FreqArrayy==arrayindex-1 then 9 arrayindex:= FreqArrayy 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 Universita Sumatera Utara for x:= 0 to max do 18 if PosArrayx ≠ min-1 then 19 arrayindex:= PosArrayx 20 index:= index+1 21 for y:= 0 to i do 22 if FreqArrayy== arrayindex-1 then 23 arrayindex:=FreqArrayy 24 index:= index+1 25 end if 26 end for 27 end if 28 end for 29 end if 30 Akhir prosedur Sort

2.12. Kompleksitas Waktu Algortima SMS

Algoritma SMS terdiri dari tiga prosedur, yakni Scan, Move, dan Sort, berikut akan terlihat kompleksitas waktu dari ketiga prosedur tersebut yang akan menghasilkan kompleksitas waktu keseluruhan dari algoritma SMS 2.12.1. Kompleksitas waktu prosedur scan Tujuan dari prosedur scan adalah untuk mendapatkan nilai maksimum, nilai minimum, jumlah elemen positif, dan jumlah elemen negatif dari array masukan. Hal ini memerlukan pengenalan array dimana setiap elemen harus dikunjungi 1 satu kali. Untuk perulangan baris 7-18 prosedur scan memerlukan kompleksitas waktu On Mansi, 2010. Universita Sumatera Utara 2.12.2. Kompleksitas waktu prosedur move Kasus terbaik prosedur move adalah ketika semua elemen dari array masukan adalah bilangan positif dan nilai maksimumnya kecil, atau ketika semua elemen dari array masukan adalah bilangan negatif dan nilai minimumnya kecil. Jika semua elemen array adalah bilangan positif dan tidak ada yang negatif, maka untuk perulangan baris 6-8 dari prosedur move membutuhkan kompleksitas waktu Omax untuk menginisialisasi PosArray, dan untuk perulangan baris 16-32 dari prosedur move membutuhkan kompleksitas waktu On. Berdasarkan penjelasan diatas, jika seluruh elemen array masukan merupakan bilangan positif, kompleksitas waktu keseluruhan prosedur move adalah On + max. Di sisi lain, jika semua elemen dari array masukan adalah bilangan negatif, maka untuk perulangan baris 12 -14 prosedur move membutuhkan kompleksitas waktu O|min| menginisialisasi NegArray, dan untuk perulangan baris 16 -32 prosedur move membutuhkan kompleksitas waktu On. Dalam hal ini berarti, kompleksitas waktu keseluruhan prosedur move jika seluruh elemen array masukan merupakan bilangan negatif adalah On + |min|. Dapat dikatakan bahwa dalam kasus rata-rata dan terburuk, jika terdapat elemen positif dan negatif dalam array masukan, maka kompleksitas waktu keseluruhan prosedur move adalah On + max + |min| Mansi, 2010. 2.12.3. Kompleksitas waktu prosedur sort Kasus terbaik prosedur sort adalah ketika semua elemen array masukan merupakan bilangan positif dan semua elemen berbeda serta bilangan maksimum bernilai kecil, atau ketika semua elemen array masukan adalah bilangan negatif dan semua elemen berbeda serta bilangan minimum bernilai kecil. Jika semua elemen array masukan adalah bilangan positif dan berbeda, maka perulangan baris 18-29 dari prosedur sort membutuhkan kompleksitas waktu Omax, karena perulangan baris 22-27 dari prosedur sort membutuhkan kompleksitas waktu O1 dalam kasus ini. Jika semua elemen array masukan adalah bilangan negatif dan setiap elemen berbeda, maka untuk perulangan baris 4-15 dari prosedur sort membutuhkan kompleksitas waktu O|min|, karena perulangan baris 8-13 dari prosedur sort membutuhkan Universita Sumatera Utara 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