ALG O RI T M A TEKNIK PENYELESAIAN PERMASALAHAN UNTUK KOMPUTASI
oleh :
Edhy Sutanta
i
KATA PENGANTAR
Puji syukur kami panjatkan ke hadirat Tuhan Yang Maha Esa atas limpahan rahmat dan karunia-Nya sehingga buku ini dapat diselesaikan. Buku ini membahas secara khusus tentang fase penyelesaian permasalahan (problem solving phase) dalam dunia komputasi yang lebih dikenal dengan solusi dalam bentuk algoritma. Algoritma merupakan suatu himpunan berhingga langkah-langkah / prosedurprosedur logika yang harus dilaksanakan untuk menyelesaikan suatu permasalahan yang berorientasi pada pemrograman komputer. Tujuan algoritma adalah memberikan petunjuk tentang langkah / prosedur logika penyelesaian suatu permasalahan dalam bentuk yang mudah dipahami secara nalar sebagai acuan yang membantu saat mengembangkan program komputer. Pemahaman tentang algoritma merupakan aspek kritis dalam pemrograman komputer, yakni guna memperoleh kebenaran logika (logical validity) program aplikasi yang dikembangkan. Pemahaman tentang algoritma akan mencegah sejak dini kemungkinan terjadinya kesalahan logika pada program komputer yang dikembangkan. Peranan algoritma menjadi penting, karena kesalahan logika program akan mengakibatkan kesalahan yang fatal pada hasil eksekusinya. Memahami solusi permasalahan dalam bentuk algoritma, berarti mengerti tentang permasalahannya dan mengerti tentang bagaimana menyelesaikannya dengan benar. Hal seperti ini jauh lebih penting dan bermanfaat. Kebiasaan cara berpikir logis, terstruktur, dan sistematis dan kemampuan menerapkan trik-trik yang tepat dalam menyelesaikan suatu permasalahan, merupakan tuntutan dan sekaligus menjadi keuntungan nyata bagi seseorang yang mempelajari algoritma. Pada sisi lain pemahaman konsep algoritma menuntut kita untuk dapat menentukan pilihan alternatif solusi yang paling tepat bagi program aplikasi. Buku ini ditujukan bagi para mahasiswa Manajemen Informatika, Teknik Informatika, Ilmu Komputer atau siapapun yang tertarik mempelajari konsep algoritma dan pemrograman komputer. Buku ini dapat dipakai tanpa harus bergantung pada salah satu bahasa pemrograman, sehinga penerapannya menjadi sangat fleksibel. Kehadiran buku ini di tangan para Pembaca merupakan wujud kerja sama yang baik dari berbagai pihak. Suatu kebahagiaan bagi Penulis untuk dapat menyampaikan ucapan terima kasih dan penghargaan kepada keluarga besar Jurusan Teknik Informatika, FTI, ISTA Yogyakarta. Penulis menyadari bahwa setiap karya dan usaha yang telah dilakukan terhadap buku ini masih mengandung kekurangan dan kedangkalan, oleh karena itu saran, kritik yang membangun senantiasa diharapkan sebagai umpan balik yang positif. Semoga bermanfaat…….! Yogyakarta, September 2007 Penulis
ii
DAFTAR ISI BAB I. PENDAHULUAN 1.1. Konsep Algoritma 1.2. Program komputer 1.3. Konsep Program Terstruktur 1.4. Struktur Proses Dalam Algoritma 1.5. Data Komputasi 1.6. Tipe data 1.7. Pseudocode 1.8. Bagan Alir (Flowchart) BAB II. PROSES REKURSI DAN ITERASI 2.1. Konsep Rekursi dan Iterasi 2.2. Beberapa Contoh Permasalahan 2.3. Keunggulan Dan Kelemahan Teknik Rekursi dan Iterasi BAB III. METODA LEAST SQUARE 3.1. Regresi Linier Sederhana 3.2. Regresi Polinomial BAB IV. MENGHITUNG AKAR-AKAR PERSAMAAN 4.1. Menghitung Akar-akar Persamaan Kuadrat 4.2. Menghitung Akar-akar Persamaan Suku Banyak 4.3. Perbandingan Antar Metoda BAB V. HITUNG INTEGRAL 5.1. Metoda Simpson 5.2. Metoda Empat Persegi Panjang (Rectangle) 5.3. Metoda Segi Empat Sembarang (Trapezoid) BAB VI. PENGURUTAN DATA (SORTING) 6.1. Metoda Seleksi Langsung (Straight Selection) 6.2. Metoda Gelembung (Buble Sort) 6.3. Contoh Penyisipan Langsung (Straight Insertion) 6.4. Metoda Penyisipan Biner (Binary Insertion) 6.5. Metoda Quick Sort (Partition Exchange Sort) 6.6. Metoda Shell Short (Diminishing Increment) 6.7. Metoda Merge Sort (Two-Way Marge Sort) 6.8. Metoda Radix Sort BAB VII. PENCARIAN DATA (SEARCHING) 7.1. Metoda Pencarian Langsung (Linear Search) 7.2. Metoda Pencarian Biner (Binary Search) BAB VIII. MENGGABUNGKAN DUA VEKTOR (MERGING) 8.1. Penggabungan Sederhana (Simple Merge) 8.2. Mailing List
iii
BAB IX. OPERASI MATRIK 9.1. Operasi Penjumlahan 9.2. Operasi Perkalian 9.3. Matrik Transpose 9.4. Matrik Invers BAB X. MATRIK DAN SISTEM PERSAMAAN LINIER SIMULTAN 10.1. Metoda Eliminasi Gauss 10.2. Metoda Eliminasi Gauss-Jordan 10.3. Metoda Iterasi Jacobi 10.4. Metoda Iterasi Gauss-Seidel BAB XI. METODA COBA-SALAH (TRIAL-ERROR) 11.1. Mencari Penyelesaian Fungsi Persamaan 11.2. Menghitung Akar Kuadrat Bilangan Integer BAB XII. MENCARI DATA MAKSIMUM DAN MINIMUM 12.1. Mencari Data Maksimum 12.2. Mencari Data Minimum BAB XIII. MENGECEK KESAMAAN DUA VEKTOR 13.1. Mengecek Kesamaan Dua Vektor Tidak Urut 13.2. Mengecek Kesamaan Dua Vektor Urut BAB XIV. OPERASI KARAKTER 14.1. Membalik Kalimat 14.2. Mengetes Kata Palindrom
iv
DAFTAR GAMBAR
Gambar 1.1 : Hubungan antara suatu permasalahan, algoritma, dan program komputer Gambar 1.2. menunjukkan struktur proses berurutan dalam algoritma Gambar 1.3 : Struktur proses perulangan bersarang Gambar 1.4 : Langkah kerja penerjemah Gambar 1.5 : Beberapa simbol dalam flowchart Gambar 1.6 : Flowchart menghitung luas persegi panjang Gambar 1.7 : Flowchart menghitung sisa uang pembayaran Gambar 1.8 : Flowchart mengecek kesamaan dua angka masukan Gambar 2.1 : Flowchart prosedur perkalian dua bilangan integer secara rekursi Gambar 2.2 : Flowchart prosedur perkalian dua bilangan integer secara iterasi Gambar 2.3 : Flowchart prosedur mencari bilangan FIBONACCI secara rekursi Gambar 2.4. : Flowchart prosedur mencari bilangan FIBONACCI secara iterasi Gambar 2.5. : Flowchart prosedur menghitung nilai Faktorial secara rekursi Gambar 2.6. : Flowchart prosedur menghitung nilai faktorial secara iterasi Gambar 3.1 : Fungsi least square pada regresi linier sederhana Gambar 3.2 : Flowchart prosedur mencari koefisien persamaan regresi dengan metoda regresi linier Gambar 3.3 : Flowchart sistem mencari koefisien-koefisien persamaan pada regresi polinomial Gambar 4.1 : Flowchart menghitung akar-akar persamaan kuadrat Gambar 4.2 : Konsep model matematis pengolahan data Gambar 4.3 : Mencari akar-akar persamaan suku banyak dengan pendekatan metoda Newton Gambar 4.4 : Flowchart menghitung akar-akar persamaan suku banyak dengan pendekatan metoda Newton Gambar 4.5 : Mencari akar-akar persamaan suku banyak dengan metoda Secant dengan pendekatan dari satu sisi Gambar 4.6: Mencari akar-akar persamaan suku banyak dengan metoda Secant dengan pendekatan dari dua sisi Gambar 4.7 : Flowchart prosedur menghitung akar-akar persamaan suku banyak dengan pendekatan metoda Secant Gambar 4.8: Mencari akar-akar persamaan suku banyak dengan pendekatan metoda Succesive Bisection Gambar 4.9 : Flowchart prosedur menghitung akar-akar persamaan suku banyak dengan pendekatan metoda Succesive Bisection Gambar 4.10: Mencari akar-akar persamaan suku banyak dengan pendekatan metoda Fixed Point Iteration Gambar 4.11: Kegagalan konvergensi pada metoda Fixed Point Iteration Gambar 4.12 : Flowchart menghitung akar-akar persamaan suku banyak dengan pendekatan metoda Fixed Point Iteration Gambar 5.1 : Luas daerah terasir di bawah kurva Y=F(X) antara titik A dan B B
adalah sama dengan ∫ F ( X )dx A
Gambar 5.2: Menghitung luas daerah di bawah kurva F(X) dengan pendekatan metoda Simpson
v
B
Gambar 5.3 : Flowchart prosedur menghitung ∫ F ( X )dx dengan metoda Simpson A
Gambar 5.4: Menghitung luas daerah di bawah kurva F(X) dengan pendekatan metoda empat persegi panjang B
Gambar 5.5 : Flowchart prosedur menghitung ∫ F ( X )dx dengan metoda empat A
persegi Gambar 5.6: Menghitung luas daerah di bawah kurva F(X) dengan pendekatan metoda segi empat sembarang B
Gambar 5.7 : Flowchart prosedur menghitung ∫ F ( X )dx dengan metoda segi empat A
Gambar 6.1: Flowchart prosedur pengurutan data secara urut naik dengan metoda seleksi langsung Gambar 6.2: Flowchart prosedur pengurutan data secara urut turun dengan metoda seleksi langsung Gambar 6.3: Flowchart prosedur pengurutan data secara urut naik dengan metoda gelembung Gambar 6.4: Flowchart prosedur pengurutan data secara urut turun dengan metoda gelembung Gambar 6.5: Flowchart prosedur pengurutan data secara urut naik dengan metoda penyisipan langsung Gambar 6.6: Flowchart prosedur pengurutan data secara urut turun dengan metoda penyisipan langsung Gambar 6.7: Flowchart prosedur pengurutan data secara urut naik dengan metoda penyisipan biner Gambar 6.8: Flowchart prosedur pengurutan data secara urut naik dengan metoda Quick Sort Gambar 6.9 : Flowchart prosedur pengurutan data secara urut naik dengan metoda Shell sort Gambar 6.10: Contoh ilustrasi pengurutan data dengan metoda merge sort Gambar 7.1 : Flowchart prosedur pencarian data dengan metoda pencarian Gambar 7.2 : Flowchart prosedur pencarian data dengan metoda pencarian langsung (modifikasi 1) Gambar 7.3 : Flowchart prosedur pencarian data dengan metoda pencarian langsung (modifikasi 2) Gambar 7.4 : Flowchart prosedur pencarian data dengan metoda pencarian biner Gambar 8.1 : Flowchart prosedur menggabung dua vektor dengan metoda penggabungan sederhana Gambar 9.1 : Flowchart prosedur penjumlahan dua matrik Gambar 9.2 : Flowchart prosedur perkalian matrik dengan suatu skalar Gambar 9.3 : Flowchart prosedur perkalian dua matrik Gambar 9.4 : Flowchart prosedur matrik transpose Gambar 10.1: Flowchart prosedur penyelesaian sistem persamaan linier simultan dengan metoda eliminasi Gauss Gambar 10.2: Flowchart prosedur penyelesaian persamaan linier simultan dengan metoda eliminasi Gauss-Jordan Gambar 10.3: Flowchart prosedur penyelesaian persamaan linier simultan secara iteratif dengan metoda Jacobi
vi
Gambar 10.4: Flowchart prosedur penelesaian linier simultan secara iteratif dengan metoda Gauss-Seidel Gambar 11.1: Flowchart prosedur metoda coba-salah untuk menyelesaikan fungsi persamaan Gambar 11.2 : Contoh flowchart prosedur metoda coba-salah untuk menghitung akar kuadrat suatu bilangan integer Gambar 12.1 : Flowchart prosedur untuk mencari data maksimum Gambar 12.1 : Flowchart prosedur untuk mencari data minimum Gambar 13.1 : Flowchart prosedur untuk mengecek kesamaan dua vektor tidak urut Gambar 13.2 : Flowchart prosedur untuk mengecek kesamaan dua vektor urut Gambar 14.1 : Flowchart prosedur membalik karakter dalam kalimat Gambar 14.2 : Flowchart prosedur mengecek kata Palindrom
vii
DAFTAR TABEL
Tabel 4.1 : Contoh menghitung akar-akar persamaan suku banyak dengan pendekatan Metoda Newton Tabel 4.2 : Contoh Menghitung akar-akar persamaan suku banyak dengan pendekatan metoda Secant Tabel 4.3 : Pencarian pendekatan akar-akar persamaan suku banyak dengan pendekatan metoda Succesive Bisection Tabel 4.4 : Contoh menghitung akar-akar persamaan suku banyak menggunakan pendekatan metoda Succesive Bisection Tabel 4.5 : Perbandingan antar metoda untuk perhitungan akar-akar persamaan suku banyak Tabel 6.1 : Contoh pengurutan data secara urut naik dengan metoda seleksi langsung Tabel 6.2 : Contoh pengurutan data secara urut turun dengan metoda seleksi langsung Tabel 6.3: Contoh pengurutan data secara urut naik dengan metoda gelembung Tabel 6.4: Contoh pengurutan data secara urut turun dengan metoda gelembung Tabel 6.5: Contoh proses pengurutan data secara urut naik dengan metoda penyisipan langsung Tabel 6.6: Contoh proses pengurutan data secara urut turun dengan metoda penyisipan langsung Tabel 6.7: Contoh proses pengurutan data secara urut naik dengan metoda penyisipan biner Tabel 6.8: Contoh penentuan lokasi penyisipan data secara urut naik dengan metoda biner Tabel 6.9. Contoh pengurutan data secara urut naik denga metoda Shell sort Tabel 7.1: Contoh pencarian data dengan metoda pencarian biner (Contoh 1) Tabel 7.2: Contoh pencarian data dengan metoda pencarian biner (Contoh 2) Tabel 8.1 : Contoh menggabungkan dua vektor dengan metoda penggabungan sederhana Tabel 9.1 : Perubahan posisi-posisi entri pada matrik transpose Tabel 10.1: Contoh penyelesaian sistem persamaan linier simultan secara iteratif dengan metoda Jacobi Tabel 10.2: Contoh menyelesaikan sistem persamaan linier simultan secara iteratif dengan metoda Gauss-Seidel
viii