Anda di halaman 1dari 8

LAPORAN DAN TUGAS 1

DESAIN DAN ANALISIS ALGORITMA

Dosen Pengampu

FAHRIM IRHAMNA RACHMAN S.KOM., M.T

Ditulis Oleh :

Syahril Akbar (105841103821)

PROGRAM STUDI TEKNIK INFORMATIKA

FAKULTAS TEKNIK

UNIVERSITAS MUHAMMADIYAH MAKASSAR

2023
Hasil Laporan
Pada pertemuan kemarin, kita membicarakan topik yang sejauh mana algoritma dapat
mempengaruhi kinerja aplikasi yang sedang kita kembangkan dalam hal penggunaan waktu
dan ruang. Seiring berjalannya waktu, saya semakin menyadari betapa pentingnya untuk
secara cermat menilai sejauh mana algoritma ini berdampak pada aplikasi yang sedang kita
garap. Hal ini membuka wawasan baru dalam pandangan saya tentang cara merancang
perangkat lunak yang efektif.

Kepentingan algoritma yang efisien dalam pengelolaan waktu dan ruang menjadi semakin
nyata. Ini tidak hanya tentang memastikan aplikasi berjalan dengan cepat, tetapi juga
mengenai bagaimana kita dapat menghemat sumber daya yang berharga. Ketika algoritma
yang digunakan dalam aplikasi kita dioptimalkan dengan baik, ini dapat mengurangi
konsumsi daya baterai perangkat pengguna dan meningkatkan respons aplikasi secara
keseluruhan.

saya mulai memahami prinsip dasar dalam mengevaluasi efektivitas algoritma, seperti yang
ditunjukkan dalam contoh program di bawah ini yang menggunakan perulangan "for loop":

int jumlahData = 10, hasilTotal = 0, indeks;

for (indeks = 1; indeks <= jumlahData; indeks++) {


hasilTotal = hasilTotal + indeks;
}
int nilaiRata = hasilTotal / jumlahData;

System.out.println("Nilai Rata-rata = " + nilaiRata);

Untuk mengevaluasi efektivitas algoritma di dalam kode tersebut, kita dapat menghitung
eksekusi pada setiap baris sintaks yang akan dieksekusi:

 Pada baris pertama :


int jumlahData = 10, hasilTotal = 0, indeks;
Pada baris pertama ini, akan ada 3 eksekusi karena terdapat 3 variabel yang dipisahkan
oleh koma (,).

 Pada baris kedua :


for (indeks = 1; indeks <= jumlahData; indeks++) {
hasilTotal = hasilTotal + indeks;
}
Pada baris kedua, yang akan dihitung adalah eksekusi di dalam loop "for" yang akan
dieksekusi sebanyak "jumlahData" (10 kali), sehingga sintaks di dalam "for loop" akan
dieksekusi 10 kali.

 Pada baris ketiga :


int nilaiRata = hasilTotal / jumlahData;
Pada baris ketiga ini, akan dieksekusi 1 kali.

 Pada baris keempat :


System.out.println("Nilai Rata-rata = " + nilaiRata);
Pada baris ini, akan di eksekusi 1 kali

Jadi efektivitas algoritma diatas dalam persamaan waktu eksekusinya adalah :

1 + 1 + 1 + n(10) + 1 + 1 = 15 kali eksekusi

Sedangkan jika menggunakan do while :

int jumlahData2 = 10, hasilTotal2 = 0, indeks2 = 0;

do {
hasilTotal2 = hasilTotal2 + indeks2;
indeks2++;
} while (indeks2 < jumlahData2);
int nilaiRata2 = hasilTotal2 / jumlahData2;

System.out.println("Nilai Rata-rata = " + nilaiRata2);

 Pada baris pertama :

int jumlahData2 = 10, hasilTotal2 = 0, indeks2 = 0; // ini dihitung 3 kali


eksekusi karena ada 4 variabel
Pada baris pertama ini, akan dieksekusi 3 kali eksekusi

 Pada baris kedua :

do {
hasilTotal2 = hasilTotal2 + indeks2; // n (10) kali eksekusi
indeks2++; // n (10) kali eksekusi
} while (indeks2 < jumlahData2); // n (10) kali eksekusi
n(10) + n(10) + n(10) = 30 kali eksekusi
 Pada baris ketiga :

int nilaiRata2 = hasilTotal2 / jumlahData2; // 1 kali eksekusi


Pada baris ketiga ini, akan dieksekusi 1 kali eksekusi

 Pada baris keempat :

System.out.println("Nilai Rata-rata = " + nilaiRata2); // 1 kali eksekusi

Pada baris keempat ini, akan dieksekusi 1 kali eksekusi

Jadi efektivitas algoritma diatas dalam persamaan waktu eksekusinya adalah :

1 + 1 + 1 + n(10) + n(10) + n(10) + 1 + 1 = 35 eksekusi

Dapat di simpulkan bahwa algoritma for loop lebih efektif dalam persamaan waktu eksekusi
daripada menggunakan do while yang dimana membutuhkan 35 kali eksekusi sedangkan
jika menggunakan for loop cukup membutuhkan 15 kali eksekusi saja.
Tugas 1
Algoritma mencari bilangan prima dengan menggunakan for loop :

int[] bilangan = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; // 1


kali eksekusi

System.out.println("Bilangan prima dalam array:"); // 1 kali eksekusi

int totalEksekusi = 2; // 1 (deklarasi totalEksekusi) + 1 (loop awal) kali


eksekusi

for (int num : bilangan) {


boolean isPrime = true; // 1 kali eksekusi pada setiap iterasi

for (int i = 2; i <= Math.sqrt(num); i++) { // 1 (inisialisasi i) + 1 (cek


kondisi) kali eksekusi pada setiap iterasi
if (num % i == 0) {
isPrime = false; // 1 kali eksekusi pada setiap iterasi
break; // 1 kali eksekusi pada setiap iterasi
}
totalEksekusi += 3; // 1 (pengecekan kondisi) + 1 (increment i) + 1
(perbandingan i dengan akar num) kali eksekusi pada setiap iterasi
}

if (isPrime) {
System.out.print(num + " "); // 1 kali eksekusi pada setiap iterasi
(hanya jika num adalah bilangan prima)
totalEksekusi++; // 1 kali eksekusi pada setiap iterasi
}
totalEksekusi++; // 1 (increment num) kali eksekusi pada setiap iterasi
}

System.out.println("\nTotal Eksekusi: " + totalEksekusi); // 1 kali eksekusi


Efektivitas algoritma di atas dalam persamaan waktu eksekusinya adalah:

Total Eksekusi = 2 (deklarasi totalEksekusi) + 1 (loop awal) + 1 (inisialisasi totalEksekusi pada


setiap iterasi) + 15 (iterasi dalam loop) * (1 (isPrime) + 4 (loop dalam loop)) + 1 (cetak
totalEksekusi) = 2 + 1 + 15 * 5 + 1 = 78 kali eksekusi
Algoritma mencari bilangan prima dengan menggunakan do while loop :

int[] bilangan = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; // 1


kali eksekusi

System.out.println("Bilangan prima dalam array:"); // 1 kali eksekusi

int totalEksekusi = 2; // 1 (deklarasi totalEksekusi) + 1 (loop awal) kali


eksekusi

int i = 2; // 1 kali eksekusi

do {
for (int num : bilangan) {
boolean isPrime = true; // 1 kali eksekusi pada setiap iterasi

if (num < 2) {
isPrime = false; // 1 kali eksekusi pada setiap iterasi
} else {
if (num == 2) {
isPrime = true; // 1 kali eksekusi pada setiap iterasi
} else if (num % 2 == 0) {
isPrime = false; // 1 kali eksekusi pada setiap iterasi
} else {
int divisor = 3; // 1 kali eksekusi pada setiap iterasi
while (divisor * divisor <= num) { // 1 (cek kondisi) kali
eksekusi pada setiap iterasi
if (num % divisor == 0) {
isPrime = false; // 1 kali eksekusi pada setiap
iterasi
break; // 1 kali eksekusi pada setiap iterasi
}
totalEksekusi += 3; // 1 (pengecekan kondisi) + 1
(increment divisor) + 1 (perbandingan divisor dengan akar num) kali eksekusi
pada setiap iterasi
divisor += 2; // 1 kali eksekusi pada setiap iterasi
}
}
}

if (isPrime) {
System.out.print(num + " "); // 1 kali eksekusi pada setiap
iterasi (hanya jika num adalah bilangan prima)
totalEksekusi++; // 1 kali eksekusi pada setiap iterasi
}
totalEksekusi++; // 1 (increment num) kali eksekusi pada setiap
iterasi
}
i++; // 1 kali eksekusi pada setiap iterasi
totalEksekusi++; // 1 (increment i) kali eksekusi pada setiap iterasi
} while (i <= 2); // 1 (cek kondisi) kali eksekusi pada setiap iterasi

System.out.println("\nTotal Eksekusi: " + totalEksekusi); // 1 kali eksekusi

Efektivitas algoritma di atas dalam persamaan waktu eksekusinya adalah:

Total Eksekusi = 2 (deklarasi totalEksekusi) + 1 (loop awal) + 1 (inisialisasi totalEksekusi pada


setiap iterasi) + 2 (iterasi dalam do-while loop) * [15 * (1 (isPrime) + 8 (loop dalam loop))] +
1 (cetak totalEksekusi) = 2 + 1 + 2 * [15 * 9] + 1 = 272 kali eksekusi

Kesimpulan :

Kesimpulan dari algoritma mencari bilangan prima menggunakan for loop dan do while loop
di atas adalah:

1. For Loop:

 Algoritma menggunakan for loop untuk mengulangi iterasi pada setiap elemen dalam
array.
 Perulangan dilakukan sebanyak elemen dalam array (15 kali dalam contoh ini).
 Pada setiap iterasi, algoritma melakukan pengujian apakah suatu angka adalah bilangan
prima dengan menggunakan nested for loop.
 Jika suatu angka adalah bilangan prima, maka algoritma mencetaknya.
 Total eksekusi adalah 78 kali.

2. Do While Loop:

 Algoritma menggunakan do while loop untuk mengulangi iterasi pada setiap elemen
dalam array.
 Perulangan dilakukan sebanyak dua kali (terbatas pada dua iterasi).
 Pada setiap iterasi, algoritma menguji apakah suatu angka adalah bilangan prima
dengan menggunakan nested for loop.
 Jika suatu angka adalah bilangan prima, maka algoritma mencetaknya.
 Total eksekusi adalah 272 kali.
Kesimpulan umumnya adalah bahwa algoritma dengan for loop jauh lebih efisien daripada
do while loop dalam hal jumlah eksekusi. Do while loop pada contoh di atas memiliki
overhead eksekusi yang jauh lebih tinggi karena ada dua iterasi dan lebih banyak kondisi
yang diuji. Oleh karena itu, algoritma menggunakan for loop lebih efisien dalam mencari
bilangan prima dalam array.

Anda mungkin juga menyukai