Ruang Belajar Terbuka E-Learning
P1 Pertemuan 1: Pengenalan Algoritma
Algoritma dan Pemrograman

Pertemuan 1: Pengenalan Algoritma

Pertemuan 1 dari 16

Pokok Bahasan

1

Definisi Algoritma dan Sejarahnya

2

Penyajian Algoritma dengan Pseudocode

3

Penyajian Algoritma dengan Flowchart

Ringkasan Materi

Pertemuan ini membahas fondasi paling penting dalam ilmu komputer: algoritma. Mahasiswa akan memahami definisi algoritma sebagai urutan langkah-langkah logis yang sistematis untuk menyelesaikan suatu permasalahan. Materi mencakup sejarah singkat algoritma, karakteristik algoritma yang baik (finite, definite, input, output, effective), serta penerapan konsep algoritma dalam kehidupan sehari-hari. Mahasiswa juga akan diperkenalkan pada tiga cara utama merepresentasikan algoritma: uraian deskriptif (natural language), pseudocode, dan flowchart. Sebagai penutup, disajikan contoh-contoh algoritma sederhana yang dijabarkan dalam ketiga bentuk representasi tersebut untuk membangun intuisi berpikir komputasional.

Detail Materi

Definisi dan Konsep Dasar Algoritma

Algoritma adalah urutan langkah-langkah logis dan sistematis yang dirancang untuk menyelesaikan suatu permasalahan atau mencapai tujuan tertentu. Istilah "algoritma" berasal dari nama matematikawan Persia abad ke-9, Abu Abdullah Muhammad ibn Musa al-Khwarizmi, yang karya-karyanya menjadi dasar pengembangan metode komputasi modern. Dalam konteks ilmu komputer, algoritma berfungsi sebagai blueprint atau cetak biru sebelum menulis kode program. Sebuah algoritma harus memiliki lima karakteristik utama: input (data masukan), output (hasil keluaran), definiteness (setiap langkah didefinisikan secara jelas), finiteness (berakhir setelah sejumlah langkah tertentu), dan effectiveness (setiap langkah dapat dilaksanakan secara efisien).

Pemahaman tentang algoritma tidak terbatas pada dunia pemrograman saja. Dalam kehidupan sehari-hari, manusia secara tidak sadar menerapkan algoritma untuk berbagai aktivitas. Contoh sederhana adalah algoritma membuat secangkir kopi: (1) siapkan cangkir, kopi, gula, dan air panas; (2) masukkan dua sendok kopi ke dalam cangkir; (3) tambahkan gula sesuai selera; (4) tuangkan air panas; (5) aduk hingga merata; (6) kopi siap dinikmati. Setiap langkah dalam contoh tersebut bersifat terdefinisi, terurut, dan menghasilkan output yang diinginkan. Perbedaan utamanya dengan algoritma komputer adalah pada tingkat presisi dan kecepatan eksekusi.

Penyajian Algoritma: Pseudocode

Pseudocode adalah cara menyajikan algoritma menggunakan bahasa deskriptif yang menyerupai bahasa pemrograman namun dapat dipahami oleh manusia tanpa memperhatikan sintaks ketat bahasa pemrograman tertentu. Pseudocode berfungsi sebagai jembatan antara logika berpikir manusia dan implementasi kode program. Tidak ada standar baku penulisan pseudocode, sehingga setiap pengembang dapat menyesuaikan gayanya sendiri, dengan syarat tetap konsisten dan mudah dipahami. Elemen-elemen umum dalam pseudocode meliputi deklarasi variabel, struktur percabangan (if-else), struktur perulangan (for, while), serta operasi masukan dan keluaran.

Berikut adalah contoh algoritma menentukan bilangan ganjil atau genap yang ditulis dalam pseudocode:

ALGORITMA CekGanjilGenap
DEKLARASI:
    bilangan : integer
    
DESKRIPSI:
    INPUT bilangan
    IF bilangan MOD 2 = 0 THEN
        OUTPUT bilangan, " adalah bilangan genap"
    ELSE
        OUTPUT bilangan, " adalah bilangan ganjil"
    ENDIF
END ALGORITMA

Penyajian Algoritma: Flowchart

Flowchart atau diagram alir adalah representasi visual dari algoritma menggunakan simbol-simbol grafis yang saling terhubung dengan garis alur. Simbol oval menandakan awal atau akhir algoritma, simbol jajar genjang untuk operasi input/output, simbol persegi panjang untuk proses atau operasi komputasi, simbol belah ketupat untuk percabangan atau pengambilan keputusan, dan simbol lingkaran kecil sebagai konektor antar halaman. Flowchart sangat membantu dalam memvisualisasikan alur logika, terutama untuk algoritma yang kompleks dengan banyak percabangan dan perulangan. Kelebihan utama flowchart adalah kemampuannya menyajikan logika program secara self-documenting, sehingga mempermudah proses debugging dan komunikasi dalam tim.

Dalam praktik pengembangan perangkat lunak, flowchart biasanya dibuat sebelum menulis kode program, terutama pada tahap perancangan sistem. Langkah-langkah pembuatan flowchart meliputi: (1) identifikasi masalah dan tujuan algoritma; (2) tentukan data masukan dan keluaran; (3) uraikan langkah-langkah penyelesaian secara kronologis; (4) pilih simbol flowchart yang sesuai untuk setiap langkah; (5) hubungkan simbol-simbol dengan panah alur; (6) verifikasi kelengkapan dan kebenaran logika. Flowchart yang baik harus memiliki satu titik awal (Start) dan satu titik akhir (End), serta setiap jalur percabangan harus mencapai titik akhir.

Struktur Dasar Algoritma

Setiap algoritma, dari yang paling sederhana hingga yang paling kompleks, dibangun dari tiga struktur dasar: runtunan (sequence), percabangan (selection), dan perulangan (iteration). Struktur runtunan adalah pelaksanaan langkah-langkah secara berurutan dari atas ke bawah tanpa ada langkah yang dilewati. Struktur percabangan digunakan ketika algoritma harus mengambil keputusan berdasarkan suatu kondisi, menghasilkan dua atau lebih jalur eksekusi yang berbeda. Struktur perulangan memungkinkan sekelompok langkah dieksekusi berulang kali selama kondisi tertentu terpenuhi, menghindari penulisan kode yang berulang-ulang secara manual.

Teori Bohm-Jacopini (1966) membuktikan bahwa ketiga struktur dasar ini sudah cukup untuk menyusun algoritma apa pun tanpa memerlukan instruksi lompatan tak terkendali seperti goto. Prinsip ini menjadi fondasi pemrograman terstruktur yang mendorong pengembangan perangkat lunak yang mudah dibaca, diuji, dan dipelihara. Dalam praktiknya, ketiga struktur ini saling berkombinasi: sebuah perulangan dapat berisi percabangan di dalamnya, dan sebuah percabangan dapat mengandung runtunan langkah yang berbeda pada masing-masing cabang. Penguasaan ketiga struktur dasar ini menjadi kunci kemampuan menyusun algoritma yang efisien dan terstruktur.

Contoh Penerapan Algoritma dalam Pemrograman

Untuk mengkonkretkan pemahaman tentang algoritma, berikut adalah implementasi algoritma penjumlahan deret bilangan dari 1 hingga N menggunakan bahasa pemrograman Python. Algoritma ini menerima masukan berupa bilangan bulat positif N, kemudian menghitung total penjumlahan 1 + 2 + 3 + ... + N, dan menampilkan hasilnya. Rumus matematika untuk perhitungan ini adalah Total = N × (N + 1) ÷ 2, yang ditemukan oleh Carl Friedrich Gauss pada usia muda sebagai solusi efisien tanpa perlu menjumlahkan satu per satu.

# Algoritma: Penjumlahan Deret Bilangan 1 sampai N
def jumlah_deret(n):
    total = 0
    # Struktur perulangan
    for i in range(1, n + 1):
        total = total + i  # Struktur runtunan
    return total

# Program utama
N = int(input("Masukkan nilai N: "))

# Struktur percabangan untuk validasi
if N <= 0:
    print("N harus bilangan bulat positif!")
else:
    hasil = jumlah_deret(N)
    print(f"Jumlah deret 1 hingga {N} adalah {hasil}")
    # Verifikasi dengan rumus Gauss
    print(f"Verifikasi Gauss: {N * (N + 1) // 2}")

Kode di atas mendemonstrasikan ketiga struktur dasar algoritma sekaligus: runtunan terlihat pada baris-baris kode yang dieksekusi secara berurutan, percabangan digunakan untuk memvalidasi masukan apakah N bernilai positif, dan perulangan for menghitung total penjumlahan dari 1 hingga N. Bandingkan pendekatan iteratif dengan rumus Gauss yang hanya memerlukan satu operasi perkalian dan satu operasi pembagian — ini adalah contoh penting bagaimana pemilihan algoritma yang tepat dapat meningkatkan efisiensi secara drastis. Untuk N = 1.000.000, algoritma iteratif memerlukan satu juta kali perulangan, sedangkan rumus Gauss hanya memerlukan dua operasi aritmatika.

Efisiensi dan Kompleksitas Algoritma

Efisiensi algoritma diukur berdasarkan dua sumber daya utama: waktu (time complexity) dan ruang memori (space complexity). Kompleksitas waktu menggambarkan seberapa lama suatu algoritma berjalan seiring bertambahnya ukuran masukan, sementara kompleksitas ruang menggambarkan seberapa banyak memori yang dibutuhkan. Notasi Big-O menjadi standar untuk menyatakan kompleksitas algoritma, misalnya O(1) untuk algoritma dengan waktu konstan, O(n) untuk algoritma linear, O(n²) untuk algoritma kuadratik, dan O(log n) untuk algoritma logaritmik seperti pencarian biner. Pemahaman tentang kompleksitas algoritma menjadi krusial ketika menangani data dalam skala besar, di mana perbedaan antara O(n) dan O(n²) dapat berarti perbedaan antara detik dan jam waktu eksekusi.

Pertimbangan efisiensi harus sudah dimulai sejak tahap perancangan algoritma, bukan setelah implementasi. Sebagai ilustrasi, untuk mencari nama dalam daftar telepon yang berisi satu juta entri: algoritma pencarian linear (O(n)) memerlukan rata-rata 500.000 perbandingan, sedangkan algoritma pencarian biner (O(log n)) hanya memerlukan maksimal 20 perbandingan. Perbedaan sebesar 25.000 kali lipat ini menunjukkan bahwa memilih algoritma yang tepat sama pentingnya dengan menulis kode yang benar. Dalam praktik industri perangkat lunak, pengembang harus mampu menganalisis trade-off antara kecepatan eksekusi, penggunaan memori, dan kemudahan implementasi untuk setiap permasalahan yang dihadapi.

Presensi

0 sesi

Belum ada sesi presensi untuk pertemuan ini.

Tugas Kelas

0 tugas

Belum ada tugas untuk mata kuliah ini.