You are on page 1of 15

MEMAHAMI METODE DAN CORRECTNESS ALGORITMA

Oleh

1. Kadek Teguh Wirawan (1404505016)


2. I Wayan Eka Oktaviana Putra (1404505017)
3. Putu Yogi Pradana (1404505018)
4. M. Zaenal Arifin (1404505019)

JURUSAN TEKNOLOGI INFORMASI


FAKULTAS TEKNIK
UNIVERSITAS UDAYANA
2014
BAB I
PENDAHULUAN

1.1.Latar Belakang
Algoritma adalah urutan langkah – langkah logis yang pada penyelesaian masalah yang
disusun secara sistematis. Masalah dapat berupa apa saja, dengan catatan untuk setiap
masalah ada syarat awal yang harus dipenuhi sebelum menjalankan algoritma. Konsep
algoritma sering kali disetarakan dengan sebuah resep. Sebuah resep biasanya memiliki
daftar bahan atau bumbu yang akan digunakan, urutan pengerjaan, dan bagaimana hasil
dari urutan pengerjaan tersebut. Apabila bahan yang digunakan tidak tertera, maka resep
tersebut tidak akan dapat dikerjakan. Demikian juga jika urutan pengerjaannya tidak
beraturan, maka hasil yang diharapkan tidak akan diperoleh.
Algoritma yang berbeda dapat diterapkan pada suatu masalah dengan syarat yang sama.
Tingkat kerumitan dari suatu algoritma merupakan ukuran seberapa banyak komputasi
yang dibutuhkan algoritma tersebut untuk menyelesaikan masalah. Umumnya, algoritma
yang dapat menyelesaikan suatu permasalahan dalam waktu yang singkat memiliki tingkat
kerumitan yang rendah, sementara algoritma yang membutuhkan waktu lama untuk
menyelesaikan suatu masalah membutuhkan tingkat kerumitan yang tinggi.
Di dalam algoritma, terdapat berbagai metode yang bisa dipakai dalam menyelesaikan
suatu masalah. Metode adalah jalan atau cara yang harus ditempuh untuk mencapai suatu
tujuan. Sehubungan dengan upaya ilmiah, maka metode menyangkut masalah cara kerja
untuk dapat memahami objek yang menjadi sasaran ilmu yang bersangkutan.
Dalam pembuatan suatu algoritma kita harus memperhatikan dan memahami masalah
yang akan pecahkan, yaitu dengan melakukan suatu analisa. Salah satunya yaitu analisa
mengenai kebenaran (correctness) dari algoritma tersebut. Suatu algoritma bernilai benar
apabila hasil (output) dari algoritma yang telah kita buat sama dengan hasil sesuai dengan
harapan / kemungkinan awal.
1.2.Rumusan Masalah
1.2.1. Apa saja metode – metode yang terdapat dalam Algoritma?
1.2.2. Bagaimana cara menguji kebenaran (correctness) dari suatu Algoritma?

1.3.Tujuan Penelitian
1.3.1. Untuk mengetahui metode – metode yang terdapat dalam Algoritma.
1.3.2. Untuk mengetahui cara menguji kebenaran (correctness) dari suatu Algoritma.
BAB II
PEMBAHASAN

2.1. Metode – Metode dalam Algoritma

1. Algoritma Euclid
Algoritma Euclid muncul sebagai Proposisi II dalam Book VII ("Elementary Number
Theory") dari Elements. Euclid mengajukan permasalahan: "Ambil dua angka bukan
prima, untuk mencari bilangan pembagi terbesar". Dia menentukan "Sebuah angka
[merupakan] besaran yang terdiri dari unit-unit": angka penghitung, integer positif
kecuali 0. Dan "mengukur" adalah menempatkan ukuran panjang terkecil s dengan
tepat (q kali) diantara ukuran terpanjang l sampai sisa r lebih kecil dari panjang
terkecil s. Dalam dunia modern, sisa r = l - q*s, q sebagai hasil bagi, atau sisa r adalah
"modulus", bagian sisa-integer yang tersisa setelah pembagian.
2. Metode Rakus
Metoda rakus adalah sebuah algoritma rakus mirip dengan algoritma pemrograman
dinamis, tapi perbedaannya adalah solusi dari submasalah tidak harus diketahui pada
setiap tahap; melainkan pilihan yang "rakus" bisa dibuat dengan melihat apa yang
terbaik untuk saat tersebut. Metoda rakus mengembangkan solusi dengan
kemungkinan keputusan yang terbaik (bukan dengan keputusan yang ada) pada tahap
algoritmis berdasarkan optimasi lokal yang ada sekarang dan keputusan yang terbaik
(bukan semua kemungkinan keputusan) yang dibuat pada langkah sebelumnya.
Algoritma ini tidak terlalu mendalam, dan tidak memberikan jawaban yang akurat
terhadap banyak permasalahan. Tapi bila ia bekerja, ia menjadi metoda yang paling
cepat. Algoritma rakus paling terkenal adalah menemukan rentang pohon minimal
seperti pada Pohon Huffman, Kruskal, Prim,Sollin.
3. Metode Heuristik
Dalam masalah optimisasi, algoritma heuristik bisa digunakan untuk menemukan
suatu solusi yang terdekat dengan solusi optimal jika seandainya menemukan solusi
optimal tidak praktis. Algoritma ini bekerja dengan mendekati sedikit demi sedikit ke
solusi optimal saat ia berjalan. Secara prinsipnya, jika dijalankan tanpa batas waktu, ia
akan menemukan solusi optimal. Kebaikan mereka adalah mereka dapat menemukan
suatu solusi sangat dekat dengan solusi optimal dalam waktu yang relatif sangat
pendek. Algoritma tersebut termasuk pencarian lokal, pencarian tabu, simulasi
pelunakan, dan algoritma genetik. Beberapa dari mereka, seperti simuasi pelunakan,
adalah algoritma non-deterministik sementara yang lainnya, seperti pencarian tabu,
adalah deterministik. Saat batas dari galat dari solusi non-optimal diketahui, algoritma
kemudian dikategorikan sebagai algoritma pendekatan.
4. Metode Gauss-Seidel
Metode Gauss-Seidel digunakan untuk menyelesaikan sistem persamaan linear (SPL)
berukuran besar dan proporsi koefisien nolnya besar, seperti sistem-sistem yang
banyak ditemukan dalam sistem persamaan diferensial. Metode iterasi Gauss-Seidel
dikembangkan dari gagasan metode iterasi pada solusi persamaan tak linier.
5. Metode Adaptive Neuro Fuzzy Inference System (ANFIS)
Metode adaptive neuro fuzzy inference system (ANFIS) merupakan metode yang
menggunakan jaringan syaraf tiruan untuk mengimplementasikan system inferensi
fuzzy. Keunggulan system inference fuzzy adalah dapat menerjemahkan pengetahuan
dari pakar dalam bentuk aturan-aturan, namun biasanya dibutuhkan waktu yang lama
untuk menetapkan fungsi keanggotaannya. Oleh sebab itu dibutuhkan teknik
pembelajaran dari jaringan syaraf tiruan untuk mengotomatisasi proses tersebut
sehingga dapat mengurangi waktu pencarian, hal tersebut menyebabkan metoda
ANFIS sangat baik diterapkan dalam berbagai bidang.
6. Algoritma Khnuth-Morris-Pratt
Algoritma Knuth-Morris-Pratt adalah salah satu algoritma pencarian string,
dikembangkan secara terpisah oleh Donald E. Knuth pada tahun 1967 dan James H.
Morris bersama Vaughan R. Pratt pada tahun 1966, namun keduanya
mempublikasikannya secara bersamaan pada tahun 1977.
7. Algoritma Brute Force
Jika kita melihat algoritma brute force lebih mendalam, kita mengetahui bahwa dengan
mengingat beberapa perbandingan yang dilakukan sebelumnya kita dapat
meningkatkan besar pergeseran yang dilakukan. Hal ini akan menghemat
perbandingan, yang selanjutnya akan meningkatkan kecepatan pencarian.
8. Algoritma PlayFair Chiper
Algoritma PlayFair Chiper adalah salah satu teknik kriptografi. Dalam teknik ini pesan
dienkripsi berdasarkan pasangan huruf, bukan huruf tunggal seperti sandi klasik
lainnya. Sandi Playfair ditemukan oleh ahli Fisika berkebangsaan Inggris bernama Sir
Charles Wheatstone (1802 – 1875) namun dipromosikan oleh Baron Lyon Playfair
(1819 – 1898) pada tahun 1854.
9. Algoritma Luhn
Algoritma Luhn atau Formula Luhn, dikenal juga sebagai algoritma “modulus 10”,
adalah sebuah formula checksum sederhana yang digunakan untuk memvalidasi
macam-macam Nomor Identifikasi seperti nomor Kartu Kredit. Checksum adalah
sebuah cara sederhana untuk melindungi integritas data dengan mendeteksi kesalahan
(error) dalam data yang dikirim melalui media telekomunikasi atau data dalam media
penyimpanan.
10. Algoritma K-Nearest Neighbor (k-NN)
Algoritma k-nearest neighbor (k-NN atau KNN) adalah sebuah metode untuk
melakukan klasifikasi terhadap objek berdasarkan data pembelajaran yang jaraknya
paling dekat dengan objek tersebut.
11. Algoritma Brute Force
Algoritma Brute Force adalah sebuah pendekatan yang lempang (straightforward)
untuk memecahkan suatu masalah, biasanya didasarkan pada pernyataan masalah
(problem statement) dan definisi konsep yang dilibatkan. Prinsip-prinsip algoritma
brute force untuk menyelesaikan persoalan Integer Knapsack ialah:
1) Mengenumerasikan semua himpunan bagian dari solusi.
2) Mengevaluasi total keuntungan dari setiap himpunan bagian dari langkah pertama
3) Pilih himpunan bagian yang mempunyai total keuntungan terbesar
12. Algoritma Dynamic Programming
Program Dinamis (dynamic programming) adalah metode pemecahan masalah
dengan cara menguraikan solusi menjadi sekumpulan langkah (step) atau tahapan
(stage) sedemikian sehingga solusi dari persoalan dapat dipandang dari serangkaian
keputusan yang saling berkaitan. Pada penyelesaian persoalan dengan metode ini:
1. Terdapat sejumlah berhingga pilihan yang mungkin,
2. Solusi pada setiap tahap dibangun dari hasil solusi tahap sebelumnya,
Kita menggunakan persyaratan optimasi dan kendala untuk membatasi sejumlah
pilihan yang harus dipertimbangkan pada suatu tahap.
Dua pendekatan yang digunakan dalam Dynamic Progamming adalah maju (forward
atau up-down) dan mundur (backward atau bottom-up).
Misalkan x1, x2,…,xn menyatakan peubah (variable) keputusan yang harus dibuat
masing-masing untuk tahap 1, 2, …, n. Maka,
1. Program dinamis maju: Program dinamis bergerak mulai dari tahap 1, terus maju
ke tahap 2, 3, dan seterusnya sampai tahap n. Runtunan peubah keputusan adalah
x1, x2,…,xn.
2. Program dinamis mundur: Program dinamis bergerak mulai dari tahap n, terus
mundur ke tahap n – 1, n – 2, dan seterusnya sampai tahap 1. Runtunan peubah
keputusan adalah xn, xn-1, …, x1.
Secara umum, ada empat langkah yang dilakukan dalam mengembangkana algoritma
program dinamis:

1. Karakteristikkan struktur solusi optimal.


2. Definisikan secara rekursif nilai solusi optimal.
3. Hitung nilai solusi optimal secara maju atau mundur.
4. Konstruksi solusi optimal.
13. Algoritma Branch and Bound
Metode Branch and Bound adalah sebuah teknik algoritma yang secara khusus
mempelajari bagaimana caranya memperkecil Search Tree menjadi sekecil mungkin.
Sesuai dengan namanya, metode ini terdiri dari 2 langkah yaitu:
1. Branch yang artinya membangun semua cabang tree yang mungkin menuju solusi
2. Bound yang artinya menghitung node mana yang merupakan active node (E-
node) dan nodezana yang merupakan dead node (D-node) dengan menggunakan
syarat batas constraint (kendala).
Teknik Branch And Bound:
a. FIFO Branch and Bound
Adalah teknik Branch and Bound yang menggunakan bantuan queue untuk
perhitungan Branch and Bound secara First In First Out
b. LIFO Branch and Bound
Adalah teknik Branch and Bound yang menggunakan bantuan stack untuk
perhitungan Branch and Bound secara Last In First Out.
c. Least Cost Branch and Bound
Teknik ini akan menghitung cost setiap node. Node yang memiliki cost paling
kecil dikatakan memiliki kemungkinan paling besar menuju solusi.
Branch and Bound dapat digunakan untuk memecahkan berbagai masalah yang
menggunakan Search Tree
1. Traveling Salesman Problem
2. N-Queen Problem
3. 15 Puzzle Problem
4. 0/1 Knapsack Problem
5. Shortest Path
14. Algoritma Pseudo Code
Algoritma Pseudo-Code merupakan algoritma yang paling mendekati bahasa
pemrograman dan yang paling mudah untuk digunakan langsung pada bahasa
pemrograman. Kedua algoritma sebelumnya memerlukan penulisan ulang saat akan
dipindahkan pada suatu bahasa pemrograman tertentu. Algoritma Pseudo-Code adalah
penulisan langkah-langkah penyelesaian masalah yang Paling mendekati bahasa
pemrograman sehingga memudahkan pembahasan
15. Algoritma Divide and Conquer
Paradigma untuk membagi suatu permasalahan besar menjadi permasalahan-
permasalahan yang lebih kecil. Pembagian masalah ini dilakukan terus menerus sampai
ditemukan bagian masalah kecil yang mudah untuk dipecahkan. Singkatnya
menyelesaikan keseluruhan masalah dengan membagi masalah besar dan kemudian
memecahkan permasalahan-permasalahan kecil yang terbentuk.

2.2. Membuktikan Kebenaran (Correctness) dari Algoritma


Kita telah mengetahui dengan jelas makna dari algoritma, sehingga pertanyaan
selanjutnya adalah algoritma seperti apa yang dapat dikatakan sebagai algoritma yang baik?
Pada umumnya kita tidak ingin menggunakan algoritma yang salah untuk menyelesaikan
masalah karena hal ini dapat menyebabkan masalah tidak diselesaikan dengan optimal, atau
lebih buruknya, tidak diselesaikan sama sekali.
Sebuah algoritma yang baik memiliki sifat-sifat berikut:
1. Benar, di mana algoritma menyelesaikan masalah dengan tepat, sesuai dengan definisi
masukan atau keluaran algoritma yang diberikan.
2. Efisien, berarti algoritma menyelesaikan masalah tanpa memberatkan bagian lain dari
aplikasi. Sebuah algoritma yang tidak efisien akan menggunakan sumber daya
(memori, CPU) yang besar dan memberatkan aplikasi yang mengimplementasikan
algoritma tersebut.
3. Mudah diimplementasikan, artinya sebuah algoritma yang baik harus dapat
dimengerti dengan mudah sehingga implementasi algoritma dapat dilakukan siapapun
dengan pendidikan yang tepat, dalam waktu yang masuk akal.
Pada prakteknya, tentunya ketiga hal tersebut tidak dapat selalu tercapai.
Kebenaran dari sebuah algoritma umumnya selalu dapat dicapai, setidaknya untuk nilai-
nilai masukan umum, tetapi efisiensi dan kemudahan implementasi tidak selalu
didapatkan. Begitupun, tentunya kita harus tetap berusaha mencapai ketiga hal tersebut
dalam merancang sebuah algoritma.
Pembuktian Kebenaran Algoritma
Kita telah mengetahui bahwa sebuah algoritma yang baik adalah algoritma yang benar,
efisien, dan mudah diimplementasikan. Pertanyaan berikutnya tentunya adalah,
bagaimana kita mengetahui bahwa sebuah algoritma telah benar? Algoritma yang efisien
itu seperti apa? Bagaimana kita mengukur kemudahan implementasi sebuah algoritma?
Bagian ini akan membahas mengenai pertanyaan pertama, yaitu bagaimana kita dapat
mengetahui kebenaran sebuah algoritma. Tentunya efisiensi dan kemudahan implementasi
sebuah algoritma menjadi tidak penting jika algoritma tersebut tidak dapat memberikan
hasil yang benar.
Sebuah algoritma dikatakan telah benar jika algoritma tersebut dapat memberikan
keluaran yang benar jika menerima masukan sesuai dengan definisi algoritma tersebut dan
algoritma tersebut terbukti akan selalu dapat diterminasi (berakhir).
Pembuktian kebenaran sebuah algoritma sendiri dapat dilakukan dengan beberapa cara,
misalnya:

1. Induksi Matematika
2. Pembuktian kontradiktif
3. Pembuktian kontrapositif
4. Metode Formal

Masing-masing alat pembuktian yang disebutkan memiliki kelebihan dan kekurangan


masing-masing, serta kasus pengunaan yang berbeda-beda. Perlu diingat juga bahwa masih
terdapat sangat banyak alat-alat pembuktikan lainnya yang dapat digunakan, tetapi kita
hanya membahas satu cara pembuktian (induksi matematika) saja sebagai pengenalan cara
membuktikan algoritma. Berikut adalah penggunaan masing-masing alat tersebut untuk
membuktikan algoritma.

1. Induksi Matematika
Induksi matematika merupakan alat pembuktian matematis yang digunakan
untuk membuktikan pernyataan atau proses yang melibatkan perhitungan bilangan asli
yang berulang. Contoh dari rumus matematis yang dapat dibuktikan dengan
menggunakan induksi matematika yaitu perhitungan deret aritmatika, deret geometris,
ataupun sigma bilangan.
Pembuktian menggunakan induksi matematika dilakukan dengan dua langkah,
yaitu melakukan pembuktian kasus dasar (base case), yaitu membuktikan bahwa
sebuah pernyataan (fungsi) matematika atau algoritma bernilai benar jika diaplikasikan
pada bilangan pertama yang sah sesuai dengan spesifikasi fungsi atau algoritma
tersebut. Melakukan induksi, yaitu membuktikan bahwa kebenaran dari fungsi
\(P(k+1)\) jika kebenaran fungsi \(P(k)\) diketahui.
Dengan membuktikan kedua hal tersebut, kita dapat mengambil kesimpulan
bahwa sebuah fungsi matematika atau algoritma bernilai benar untuk semua bilangan
asli. Jika diimplementasikan dengan tepat, induksi matematika dapat juga digunakan
untuk membuktikan kebenaran algoritma rekursif seperti penelusuran pohon (tree).
Untuk lebih jelasnya, mari kita lihat beberapa contoh cara pembuktian yang
dilakukan dengan menggunakan induksi matematika.

Contoh 1: Deret Aritmatika


Misalkan kita diminta untuk membuktikan bahwa pernyataan matematika untuk
perhitungan deret aritmatika berikut, \[1 + 2 + 3 + ... + n = \frac{n(n + 1)}{2}\] adalah
benar untuk semua bilangan bulat \(n \geq 1\).
Untuk membuktikan pernyataan matematika di atas, terlebih dahulu kita harus
mengubah pernyataan matematika tersebut menjadi sebuah fungsi matematika, \[P(k)
= 1 + 2 + 3 + ... + n = \frac{k(k + 1)}{2}\] dan kemudian membuktikan kebenarannya
menggunakan induksi matematika. Seperti yang telah dijelaskan sebelumnya, kita
harus menjalankan dua langkah untuk melakukan pembuktian dengan induksi.
a. Pembuktian Kasus Dasar
Karena pernyataan matematika pada soal menyatakan bahwa pernyataan benar
untuk semua bilangan bulat \(k \geq 1\), maka untuk pembuktian kasus dasar kita
harus membuktikan bahwa \(P(1)\) adalah benar untuk ruas kiri maupun ruas kanan
dari \(P(k)\). \[\begin{split}P(1)= 1 & = \frac{1(1+1)}{2} \\ 1 & = \frac{1(2)}{2}
\\ 1 & = \frac{2}{2} \\ 1 & = 1\end{split}\], karena hasil akhir dari ruas kanan dan
ruas kiri adalah sama (\(1\)), maka dapat dikatakan bahwa kasus dasar telah terbukti.

b. Induksi
Untuk pembuktian induksi, kita harus membuktikan bahwa \(P(k) \rightarrow
P(k + 1)\) bernilai benar. Langkah pertama yang dapat kita lakukan yaitu
menuliskan fungsi matematis dari \(P(k + 1)\) terlebih dahulu.
\[P(k + 1) = 1 + 2 + ... + k + (k + 1) = \frac{(k + 1)((k + 1) + 1)}{2}\] dan
kemudian kita harus membuktikan bahwa ruas kiri dan ruas kanan dari \(P(k + 1)\)
adalah sama. Pembuktian akan kita lakukan dengan melakukan penurunan pada
ruas kiri agar menjadi sama dengan ruas kanan.
\[\begin{split}1 + 2 + ... + k + (k + 1) & = (1 + 2 + ... + k) + (k + 1) \\ & =
\frac{k(k + 1)}{2} + (k + 1) \\ & = \frac{k(k + 1) + 2(k + 1)}{2} \\ & = \frac{k^2
+ 3k + 2}{2} \\ & = \frac{(k + 1)(k + 2)}{2} \\ & = \frac{(k + 1)((k + 1) +
2)}{2}\end{split}\] dan seperti yang dapat dilihat, ruas kiri dari \(P(k + 1)\) telah
menjadi sama dengan ruas kanannya, sehingga dapat dikatakan bahwa tahap
induksi telah berhasil dibuktikan benar.
Dengan pembuktian kasus dasar dan induksi yang bernilai benar, kita dapat
menyimpulkan bahwa \(P(n)\) bernilai benar untuk \(n \geq 1\).

Contoh 2: Pembuktian Hipotesa


Anda diminta untuk membuktikan hipotesa bahwa fungsi matematika \(n^3-n\)
habis dibagi 6 untuk semua bilangan bulat \(n \geq 2\). Langkah untuk membuktikan
pernyataan tersebut sama dengan sebelumnya. Mulai dari definisi ulang fungsi
matematikanya \[P(k) = k^3 - k\]. Dan kemudian lakukan induksi matematika, langkah
demi langkah.
a. Pembuktian Kasus Dasar
Lakukan perhitungan \(P(2)\) (karena nilai \(k\) minimal 2) dan pastikan
hasilnya habis dibagi 6. \[\begin{split}P(1) & = 2^3 - 2 \\ & = 8 - 2 \\ & =
6\end{split}\] karena \(6 \bmod 6 = 0\) maka telah dapat dibuktikan bahwa kasus
dasar bernilai benar.

b. Induksi
Jika \(P(k)\) benar habis dibagi 6, maka \(P(k + 1)\), atau \((k + 1)^3 - (k + 1)\)
harus juga habis dibagi 6. Mari kita lakukan pembuktiannya. \[\begin{split}P(k +
1) & = (k + 1)^3 - (k + 1) \\ & = (k^3 + 3k^2 + 3k + 1) - k - 1 \\ & = k^3 - 3k^2 +
2k \\ & = k^3 - 3k^2 + 2k + k - k \\ & = k^3 - 3k^2 + 3k - k \\ & = k^3 - k + 3k^2 +
3k \\ & = (k^3 - k) + 3k(k + 1)\end{split}\] dan dapat dilihat bagaimana \(P(k + 1)\)
telah terbukti habis dibagi 6 karena \(k^3 - k\) habis dibagi 6, sesuai dengan hipotesa
\(P(k)\), dan \(3k(k + 1)\) habis dibagi 6 karena salah satu nilai dari \(k\) atau \(k +
1\) pasti merupakan bilangan genap, yang jika dikalikan dengan 3 akan habis dibagi
6.
Setelah berhasil menyelesaikan dua langkah induksi, kita dapat menyimpulkan
bahwa \(P(k) = k^3 - k\) habis dibagi 6 untuk \(k \geq 2\).

Induksi Matematika untuk Pembuktian Algoritma


Seperti yang dapat dilihat dari apa yang telah kita pelajari pada bagian
sebelumnya, induksi matematika jelas sangat berguna untuk membuktikan kebenaran
sebuah teorema atau fungsi yang melibatkan perhitungan bilangan bulat yang berulang.
Tetapi apa guna induksi matematika untuk membuktikan kebenaran sebuah algoritma?
Sebuah algoritma kerap kali akan memiliki bagian yang melakukan perhitungan
bilangan atau data secara berulang. Kita dapat menggunakan konsep perulangan pada
pemrograman untuk menerapkan perhitungan bilangan ataupun data secara berulang.
Misalnya, algoritma berikut menghitung hasil kali dari dua buah bilangan bulat:

def kali(m, n):


if m < 0:
return -1 # error
else:
i=0
result = 0

while(m != i):
result = result + n
i=i+1
return result
yang secara matematis dapat dituliskan sebagai fungsi berikut. \[f(m, n) =
\sum_{i=1}^{n} m; n \geq 0\] atau lebih sederhananya, \[m \times n = \underbrace{m
+ m + m + ... + m}_{\text{n kali}}\] dan secara otomatis tentunya pernyataan matematis
tersebut dapat kita buktikan dengan menggunakan induksi matematika. Pembuktian
perulangan yang lebih kompleks sendiri dapat dilakukan dengan teknik yang dikenal
dengan nama loop invariant, yang tidak akan dijelaskan pada tulisan ini.
2. Pembuktian Kontradiktif
Pembuktian melalui kontradiksi adalah argumen logika yang dimulai dengan
suatu asumsi, lalu dari asumsi tersebut diturunkan suatu hasil yang absurd, tidak masuk
akal, atau kontradiktif, sehingga dapat diambil kesimpulan bahwa asumsi tadi adalah
salah (dan ingkarannya benar). Dalam disiplin matematika dan logika, pembuktian
melalui kontradiksi merujuk secara khusus kepada argumen dimana sebuah kontradiksi
dihasilkan dari suatu asumsi (sehingga membuktikan asumsi tadi salah). Argumen ini
menggunakan hukum non-kontradiksi yaitu suatu pernyataan tidak mungkin benar dan
salah sekaligus.
Dalam disiplin logika formal, pembuktian melalui kontradiksi digunakan ketika
sebuah kontradiksi (formal) dapat dihasilkan dari suatu premis, sehingga dapat
disimpulkan bahwa premis tersebut salah. Jika kontradiksi tersebut dihasilkan dari
beberapa (lebih dari satu) premis, kesimpulannya adalah satu atau lebih dari premis
tersebut adalah salah. Dalam kasus terakhir, metode lain harus digunakan untuk
membuktikan premis mana saja yang salah.
Suatu pernyataan matematis kadang-kadang dibuktikan dengan cara
pembuktian melalui kontradiksi, dengan cara mengasumsikan ingkaran (negasi) dari
pernyataan yang hendak dibuktikan, lalu dari asumsi ini diturunkan sebuah kontradiksi.
Ketika kontradiksi dapat dicapai secara logika, asumsi tadi telah terbukti salah,
sehingga pernyataan tersebut benar.
Pembuktian melalui kontradiksi atau reductio bukanlah sebuah argumen yang
salah, sebaliknya jika dilakukan dengan benar merupakan argumen yang sah. Jika
pembuktian melalui kontradiksi menghasilkan kesalahan, kesalahan tersebut terletak
pada kesalahan pada proses penurunan kontradiksi, bukan pada cara pembuktiannya.
Contoh klasik pembuktian melalui kontradiksi pada zaman Yunani Kuno adalah
pembuktian bahwa akar kuadrat dari dua merupakan bilangan irasional (tidak bisa
dinyatakan sebagai perbandingan bilangan bulat). Pernyataan ini dapat dibuktikan
dengan cara mengasumsikan sebaliknya bahwa √2 adalah bilangan rasional, sehingga
bisa dinyatakan sebagai perbandingan bilangan bulat a/b dalam pecahan yang paling
sederhana. Tapi jika a/b = √2, maka a2 = 2b2. Ini berarti a2 adalah bilangan genap.
Karena kuadrat dari bilangan ganjil tidak mungkin genap, maka a adalah bilangan
genap.
Karena a/b adalah pecahan paling sederhana b pastilah ganjil (sebab pecahan
genap/genap masih bisa disederhanakan). Namun karena a adalah bilangan genap
(anggap 2r artinya a2 (4r2) adalah bilangan kelipatan 4, dan b2 adalah bilangan kelipatan
2 (genap). Hal ini berarti b juga merupakan bilangan genap, dan ini merupakan
kontradiksi terhadap kesimpulan sebelumnya bahwa b pastilah ganjil. Karena asumsi
awal bahwa √2 adalah rasional mengakibatkan terjadinya kontradiksi, asumsi tersebut
pastilah salah, dan ingkarannya (bahwa √2 adalah irasional) merupakan pernyataan
yang benar.

3. Pembuktiam Kontrapositif
Logikanya, yang kontrapositif dari pernyataan kondisional dibentuk dengan
meniadakan kedua istilah dan membalikkan arah inferensi. Secara eksplisit, yang
kontrapositif dari pernyataan “jika A , maka B” adalah “jika tidak B, maka tidak A”.
Sebuah pernyataan yang kontrapositif yang secara logis setara jika pernyataan itu benar
, maka kontrapositifnya adalah benar dan sebaliknya.
Dalam matematika, bukti dengan kontraposisi adalah aturan inferensi yang
digunakan dalam bukti. Aturan ini menyimpulkan pernyataan bersyarat dari
kontrapositif-nya. Dengan kata lain, kesimpulan “jika A , maka B” diambil dari premis
tunggal “ jika tidak B, maka tidak A”.
Untuk membuktikan Jika x² dan x adalah genap. Meskipun bukti langsung dapat
diberikan, kita memilih untuk membuktikan pernyataan ini dengan kontraposisi.
Kontapositif pernyataan tersebut adalah. Jika x tidak genap, maka x² tidak genap.
Pernyataan terakhir ini dapat dibuktikan sebagai berikut. Misalkan x tidak genap maka
x adalah ganjil. Hasil kali antara dua bilangan ganjil adalah ganjil, maka x² = x . x
adalah ganjil. Jadi x² tidak genap. Setelah terbukti kontrapositif, kita menyimpulkan
pernyataan asli.
BAB III
PENUTUP
3.1.Simpulan
Algoritma adalah urutan langkah – langkah logis yang pada penyelesaian
masalah yang disusun secara sistematis. Dalam proses pengerjaannya, algoritma terdiri
dari berbagai metode yang memiliki konsep tersendiri dalam menyelesaikan suatu
masalah. Dalam membuat suatu algoritma, kita harus bisa mempelajari dan memahami
masalah tersebut. Algoritma dikatakan benar jika hasil atau output-nya sama dengan
kemungkinan awal dengan melakukan suatu pembuktian untuk membuktikan algoritma
tersebut benar atau tidak
DAFTAR PUSTAKA
http://bertzzie.com/knowledge/analisis-
algoritma/PengenalanDesaindanAnalisisAlgoritma.html#pembuktian-kebenaran-algoritma
diakses pada tanggal 25 November 2014
http://ringin.wordpress.com/analisa-algoritma/ diakses pada tanggal 25 November 2014
http://id.wikipedia.org/wiki/Algoritma diakses pada tanggal 25 November 2014
https://asanisembiring.wordpress.com/category/metode-dan-algoritma/page/2/ diakses pada
tanggal 25 November 2014