vanessa sukietra
Dalam dunia pemrograman, salah satu tantangan terbesar adalah merancang algoritma yang efisien, terutama ketika menyelesaikan masalah matematika yang sering muncul dalam kehidupan sehari-hari, seperti mencari Faktor Persekutuan Besar (FPB) dan Kelipatan Persekutuan Kecil (KPK).
FPB digunakan untuk menemukan bilangan terbesar yang dapat membagi habis dua angka atau lebih, sedangkan KPK adalah bilangan terkecil yang merupakan kelipatan dari dua angka atau lebih. Masalah ini penting dalam banyak kasus, seperti optimasi pembagian sumber daya, aritmatika, dan sistem komputer.
Portofolio ini menunjukkan bagaimana Python dapat digunakan untuk menyelesaikan perhitungan FPB dan KPK dengan memanfaatkan dua pendekatan algoritmik, yaitu metode rekursif dan iteratif. Program ini juga dilengkapi dengan analisis efisiensi menggunakan teknik Big O dan pengukuran waktu eksekusi (benchmarking).
Program ini dibuat untuk memenuhi beberapa tujuan berikut:
Program ini memiliki empat bagian utama, yaitu:
1. Algoritma FPB
Metode Rekursif: Menggunakan algoritma Euclidean yang diimplementasikan dengan pemanggilan fungsi secara rekursif. Prinsipnya adalah membagi dua angka dengan mengambil sisa bagi hingga salah satu angka menjadi nol. Kompleksitas waktu: O(log(min(a, b))).
Metode Iteratif: Algoritma Euclidean diimplementasikan menggunakan loop sehingga mengurangi overhead pemanggilan fungsi berulang. Kompleksitas waktu: O(log(min(a, b))).
2. Algoritma KPK
3. Benchmarking
4. Kompleksitas Big O
Berikut adalah kode lengkap program Python:
import time
import math
def fpb_recursive(a, b):
if b == 0:
return a
return fpb_recursive(b, a % b)
def fpb_iterative(a, b):
while b != 0:
a, b = b, a % b
return a
def kpk(a, b):
return abs(a * b) // fpb_iterative(a, b)
def benchmark(func, *args):
start_time = time.time()
result = func(*args)
end_time = time.time()
execution_time = end_time - start_time
return result, execution_time
if __name__ == "__main__":
print("Program Perhitungan FPB dan KPK dengan Analisis Efisiensi Algoritma")
print("------------------------------------------------------------")
num1 = int(input("Masukkan bilangan pertama: "))
num2 = int(input("Masukkan bilangan kedua: "))
fpb_result, fpb_time = benchmark(fpb_recursive, num1, num2)
print(f"FPB (Rekursif) antara {num1} dan {num2} adalah {fpb_result} (Waktu: {fpb_time:.10f} detik)")
fpb_iter_result, fpb_iter_time = benchmark(fpb_iterative, num1, num2)
print(f"FPB (Iteratif) antara {num1} dan {num2} adalah {fpb_iter_result} (Waktu: {fpb_iter_time:.10f} detik)")
kpk_result, kpk_time = benchmark(kpk, num1, num2)
print(f"KPK antara {num1} dan {num2} adalah {kpk_result} (Waktu: {kpk_time:.10f} detik)")
print(" Perbandingan Waktu Eksekusi:")
print(f"- FPB Rekursif: {fpb_time:.10f} detik")
print(f"- FPB Iteratif: {fpb_iter_time:.10f} detik")
print(f"- KPK: {kpk_time:.10f} detik")
Output
Kesimpulan
Efisiensi FPB Rekursif vs Iteratif:
KPK:
Rekomendasi: