Anda di halaman 1dari 67

ALGORITMA

Pendidikan Ilmu Komputer A


MATERI

Konsep Algoritma
01 04 Struktur Iteratif

Representasi Algoritma 02 05 Struktur Rekursif

Penemuan Algoritma
03 06 Efisiensi dan Ketepatan
KONSEP
ALGORITMA

GOSTUDIO
PENGERTIAN ALGORITMA
Algoritma adalah urutan langkah-langkah logis penyelesaian masalah yang disusun secara sistematis dan tidak tergantung pada bahasa
pemrograman tertentu. Langkah-langkah (intruksi) dalam algoritma harus logis serta harus dapat ditentukan bernilai salah atau benar.

Agar dapat dilaksanakan oleh komputer, algoritma harus ditulis dalam notasi bahasa pemrograman sehingga dinamakan program. Jadi,
program adalah perwujudan atau implementasi teknis algoritma yang ditulis dalam bahasa pemrograman tertentu sehingga dapat
dilaksanakan oleh komputer.

Ciri-ciri algoritma :

1. Algoritma harus berhenti setelah mengerjakan sejumlah langkah terbatas.


2. Setiap langkah harus didefinisikan dengan tepat dan tidak berarti dua (ambiguitas).
3. Algoritma memiliki nol atau lebih input dan output.
4. Algoritma harus efektif (sederhana)
 
STRUKTUR DASAR ALGORITMA
RUNTUNAN (SEQUENCE)

=> Aksi –aksi dalam algoritma yang dikerjakan secara berurutan


=> Tiap intruksi dikerjakan secara satu per satu
=> Tidak ada intruksi yang berulang
=> Urutan ntruksi yang dilaksanakan pemrosesan sama dengan urutan intruksi yang tertulis dalam teks algoritma
=> Akhir dari intruksi terakhir merupakan akhir algoritma

• Contoh
A1. Aksi 1 >> mula-mula aksi 1 dilakukan
A2. Aksi 2 >> aksi 2 dilakukan setelah aksi 1
A3. Aksi 3 >> aksi 3 diakukan setelah aksi 2
STRUKTUR DASAR ALGORITMA
PEMILIHAN (SELECTION)
=> Memungkinkan suatu aksi dieksekusi jika suatu kondisi terpengaruh atau tidak terpengaruh
=> Bentuk-bentuk pemilihan :
>> if – else
>> switch – case (digunakan apabila kontruksi if-else bertingkat terlalu jauh, sehingga sulit dibaca)

PENGULANGAN (REPEATITION)

=> Aksi-aksi yang dikerjakan berulang kali


=> Bentuk-bentuk pengulangan
>> FOR pencacah pengulangan dari a sampai b DO aksi ( aksi dilakukan sebanyak hitungan pencacah pengulang)
>> REPEAT aksi UNTIL kondisi (pengulangan aksi dilakukan sehingga kondisi/persyaratan berhenti terpenuhi)
>> WHILE kondisi DO aksi (selama kondisi/persyaratan pengulangan masih benar maka aksi dikerjakan)
REPRESENTASI
ALGORITMA
PRIMITIF
Primitif adalah blok penyusun yang menetapkan satu set blok yang terdefinisi dengan baik dari mana representasi algoritma dapat
dibangun. Setiap primitif memiliki sintak dan semantiknya masing-masing. Sintak mengacu pada representasi simboik primitif,
sedangkan semantik mengacu pada makna primitif. Untuk mendapatkan koleksi primitif, kita dapat beralih ke intruksi individual yang
dirancang untuk dijalankan oleh mesin.
PSEUDOCODE
Pseudocode adalah kode atau tanda yang menyerupai (pseudo) program atau merupakan penjelasan cara menyelesaikan suatu masalah.
Pseudocode sering digunakan oleh programmer untuk menuliskan algoritma karena mudah dipahami dan digunakan dan kode-kode nya
mirip dengan program sebenarnya.

Struktur pseudocode :
=> Program (nama program) -🡪 penjelasan tentang algoritma, berisi urain singkat mengenai masalah yang akan diselesaikan
=> Deklarasi -🡪 semua nama yang dipakai ; nama tipe, nama konstanta, nama peubah, nama produser, nama fungsi
=> Algoritma -🡪 semua langkah/aksi algoritma ditulis pada bagian ini
CONTOH FORMAT PSEUDOCODE
PROGRAM

Program untuk mencari GCD dari dua bilangan bulat posistif m dan n (m ≥ n). GCD dari m dan n adaah bilangan bulat posistif terbesar
yang habis membagi m dan n

DEKLARASI

m,n : integer (bilangan bulat)


r : integer (sisa hasil bagi)

ALGORITMA

read (m,n) (m ≥ n)
while n! = 0 do
r 🡨m MOD n
m🡨n
n🡪r
end while
(kondisi selesai pengulangan n=0, maka gcd (m,n) = m)
PENEMUAN
ALGORITMA

Meletakkan Kaki di Pintu

Seni Menyelesaikan Masalah


SENI MEMECAHKAN MASALAH

⮚ Hubungan erat antara proses penemuan algoritma dan pemecahan masalah umum menyebabkan ilmuwan
komputer bergabung dengan orang-orang dari disiplin ilmu lain dalam mencari teknik pemecahan masalah yang
lebih baik.

⮚ Pada akhirnya, seseorang ingin mengurangi proses pemecahan masalah menjadi algoritme itu sendiri, tetapi ini
terbukti mustahil di mana terdapat masalah yang tidak memiliki solusi algoritmik.

⮚ Dengan demikian kemampuan untuk memecahkan masalah tetap lebih merupakan keterampilan artistik untuk
dikembangkan daripada ilmu yang tepat untuk dipelajari.
Sebagai bukti dari sifat artistik yang sulit dipahami dari pemecahan masalah,
ahli matematika George Polya mendefinisikan fase pemecahan masalah pada
tahun 1945, yang sampai saat ini tetap menjadi prinsip dasar untuk
mengajarkan keterampilan memecahkan masalah.

Fase 1. Memahami masalah.

Fase 2. Menyusun rencana untuk memecahkan masalah.

Fase 3. Menjalankan rencana.

Fase 4. Mengevaluasi solusi untuk ketepatan dan


kemungkinannya sebagai alat untuk memecahkan masalah lain. The Godfather of Problem Solving
Dalam pengembangan program, tahapannya menjadi

Fase 1. Memahami masalahnya.

Fase 2. Mendapatkan gambaran tentang bagaimana


fungsi algoritmik dapat memecahkan masalah.

Fase 3. Merumuskan algoritma dan


merepresentasikannya sebagai program.

Fase 4. Mengevaluasi program untuk akurasi dan


potensinya sebagai alat untuk memecahkan masalah lain.
Perlu ditekankan bahwa fase-fase ini bukanlah langkah-langkah yang harus
diikuti ketika mencoba untuk memecahkan suatu masalah, melainkan fase-fase
yang akan diselesaikan suatu saat selama proses penyelesaian

Kejadian lain yang dapat terjadi adalah inspirasi misterius yang mungkin datang
kepada seorang calon pemecah masalah yang, setelah mengerjakan suatu
masalah tanpa hasil yang jelas, di kemudian hari tiba-tiba melihat solusi saat
melakukan tugas lain. Fenomena tersebut mencerminkan proses di mana bagian
bawah sadar dari pikiran seseorang terus bekerja dan, jika berhasil,
memunculkan solusi ke dalam pikiran sadar.
MELETAKKAN KAKI DI PINTU
Tunggu, anda tidak berpikir bahwa kita akan berjalan menuju pintu dan menginjakkan kaki disana kan?
Menginjakkan kaki di pintu, dalam hal ini, berarti kita memulai suatu langkah awal dalam serangkaian proses
pemecahan masalah.

Salah satunya adalah mencoba mengerjakan soal secara mundur. Contoh : Apabila seorang mengerjakan
suatu program, beberapa orang cenderung melihat ‘program’ yang sudah jadi untuk kemudian melihat cara
kerja dari algoritme pemrograman tersebut
Pendekatan lain untuk memulai pemecahan masalah adalah dengan menerapkan stepwise
refinement. Idenya adalah memecah masalah asli menjadi beberapa bagian masalah yang mudah
diselesaikan

Contoh : Menyeduh Kopi

Memasukkan air, kopi dan gula


ke dalam gelas

Menyiapkan bahan Mengaduk campuran


air, kopi, dan gula Kopi siap dinikmati
Struktur Iteratif

ALGORITMA PENCARIAN
BERURUTAN

KONTROL LOOP

ALGORITMA SORTASI
PENYISIPAN
Metode iteratif merupakan suatu proses perulangan yang
dilaksanakan oleh suatu prosedur atau fungsi atau sub
program dengan cara memasukkan secara langsung
nilai-nilai argumennya.

Dalam proses iteratif. Proses perulangan


dikendalikan oleh pencacah (counter) yang akan
selalu berubah setiap kali selesai dilakukan

perulangan.
1. Algoritma Pencarian Berurutan
adalah proses membandingkan setiap elemen larik satu per satu secara beruntun, mulai
dari elemen pertama, sampai elemen yang dicari ditemukan, atau seluruh elemen sudah
diperiksa.

Pada dasarnya, pencarian ini hanya melakukan pengulangan dari 1 sampai dengan jumlah data.  Pada
setiap pengulangan, dibandingkan data ke-i dengan yang dicari.  Apabila sama, berarti data telah
ditemukan.   Sebaliknya apabila sampai akhir pengulangan tidak ada data yang sama, berarti data
tidak ada.  Pada kasus yang paling buruk, untuk N elemen data harus dilakukan pencarian sebanyak
N kali pula.
Algoritma pencarian berurutan dapat dituliskan sebagai berikut :

kita mencari data 5 dari array [,1,2,4,3,5]

maka akan mengecek dari awal sampai data ketemu, jadi akan di periksa satu persatu , 
dengan cara membandingkan seperti ini 

apakah 5 = 1 False
apakah 5 = 2 False
apakah 5 = 4 False
apakah 5 = 3 False
apakah 5 = 5 True

jika ada ada di tengah maka akan berhenti ketika kondisi menjadi true, dan tidak akan di ulang lagi.
contoh  kita mencari data 5 dari array [,1,2,5,3,4]

apakah 5 = 1 False
apakah 5 = 2 False
apakah 5 = 5 True

Jika data sudah ketemu maka tdk akan diproses lagi.


2. Kontrol Loop
Penggunaan berulang dari instruksi atau urutan instruksi adalah konsep algoritmik yang
penting. Salah satu metode untuk mengimplementasikan pengulangan seperti itu adalah
struktur berulang yang dikenal sebagai loop, di mana sekumpulan instruksi, yang
disebut badan perulangan, dieksekusi secara berulang di bawah arahan beberapa proses
kontrol.

kontrol loop adalah bagian struktur yang lebih rentan terhadap kesalahan dan oleh
karena itu perlu diperhatikan.
Kontrol loop terdiri dari tiga aktivitas:

UJI
Bandingkan keadaan saat
ini dengan kondisi
terminasi dan hentikan
INISIALISASI pengulangan jika sama MODIFIKASI
Tetapkan keadaan awal yang akan Ubah keadaan sedemikian
dimodifikasi menuju kondisi rupa sehingga bergerak
penghentian menuju kondisi penghentian
termination condition
langkah inisialisasi dan modifikasi harus mengarah pada kondisi penghentian yang
sesuai. Karakteristik ini sangat penting untuk kontrol loop yang tepat, dan oleh karena
itu seseorang harus selalu mengecek ulang keberadaannya saat merancang struktur
loop.
Kegagalan untuk membuat evaluasi seperti itu bisa menyebabkan kesalahan bahkan
dalam kasus yang paling sederhana. Contoh:

“Number” (Angka) = 1
“while” (Bilangan! = 6): Bilangan = Bilangan + 2

penggunaan operator Python "! =" ("tidak sama“). Di sini kondisi terminasi adalah
"Number == 6“. Tetapi nilai Number diinisialisasi pada 1 dan kemudian bertambah 2
pada langkah modifikasi. Jadi, saat siklus perulangan, nilai yang ditetapkan ke
Bilangan akan menjadi 1, 3, 5, 7, 9, dan seterusnya, tetapi tidak pernah nilainya 6.
Akibatnya, loop ini tidak akan pernah berhenti.
Insertion Sort

~ Insertion sort (Sortasi Penyisipan) => sebuah metode pengurutan dengan cara
melakukan perbandingan terhadap data-data sebelumnya.

~ Ide dari metode Insertion Sort ini dapat dianalogikan sama seperti mengurutkan kartu,
dimana jika suatu kartu dipindah tempatkan menurut posisinya, maka kartu yang lain akan
bergeser mundur atau maju sesuai kondisi pemindahan kartu tersebut.
KOMPLEMENTASI WAKTU
Algoritma Insertion Sort juga terdiri dari 2 kalang bersarang. Dimana terjadi N-1 Pass (dengan N adalah
banyak elemen struktur data), dengan masing-masing Pass terjadi i kali operasi perbandingan. i tersebut
bernilai 1 untuk Pass pertama, bernilai 2 untuk Pass kedua, begitu seterusnya hingga Pass ke N-1.

Kompleksitas algoritma insertion sort, yaitu :


o O(n) untuk best case
o O (n^2) untuk worst case
Struktur Rekursif

BRANDING

POSITIONING

ADAPTABILITY
Struktur Rekursif
Salah satu konsep paling dasar dalam ilmu komputer dan pemrograman adalah pengunaan
fungsi sebagai abstraksi untuk kode-kode yang digunakan berulang kali. Kedekatan ilmu
komputer dengan matematika juga menyebabkan konsep-konsep fungsi pada matematika
seringkali dijumpai. Salah satu konsep fungsi pada matematika yang ditemui pada ilmu
komputer adalah fungsi rekursif: sebuah fungsi yang memanggil dirinya sendiri.
Struktur Rekursif
Secara umum, fungsi rekursif dirancang untuk menguji kondisi terminasi (sering disebut
kasus dasar atau kasus degeneratif) sebelum meminta aktivasi lebih lanjut. Jika kondisi
terminasi tidak terpenuhi, rutin membuat aktivasi lain dari fungsi dan menugaskannya
tugas untuk memecahkan masalah yang direvisi yang lebih dekat dengan kondisi
terminasi daripada yang ditugaskan ke aktivasi saat ini. Namun, jika kondisi terminasi
terpenuhi, sebuah jalur diambil yang menyebabkan aktivasi saat ini berhenti tanpa
membuat aktivasi tambahan.
Algoritma Pencarian Biner
Sebuah algoritme pencarian biner (atau pemilahan biner) adalah sebuah
teknik untuk menemukan nilai tertentu dalam sebuah larik (array) linear,
dengan menghilangkan setengah data pada setiap langkah, dipakai
secara luas tetapi tidak secara ekslusif dalam ilmu komputer.
Pencarian BIner (Binary Search)
dilakukan untuk :
~Memperkecil jumlah operasi perbandingan yang harus dilakukan antara
data yang dicari dengan data yang ada di dalam tabel, khususnya untuk
jumlah data yang sangat besar ukurannya.
~Prinsip dasarnya adalah melakukan proses pembagian ruang pencarian
secara berulang-ulang sampai data ditemukan atau sampai ruang
pencarian tidak dapat dibagi lagi ( berarti ada kemungkinan data tidak
ditemukan).
~Syarat utama untuk pencarian biner adalah data di dalam table harus
sudah terurut, misalkan terurut menaik
EFISISENSI &
KETEPATAN
Efisiensi Algoritma
Efisiensi Algoritma

Meskipun saat ini mesin sudah mampu mengeksekusi jutaan atau


ribuan intruksi setiap detik, efisiensi tetap menjadi perhatian yang
utama dalam desain algoritma. Algoritma yang efisien dapat menjadi
pembeda dalam menghasilkan solusi yang praktis.
Efisiensi Algoritma
Contoh Kasus:
Sistem registrasi universitas dalam penerimaan dan pembaharuan
records siswa.

Masalah:
Walaupun universitas memiliki pendaftaran siswa secara aktual
dengan perkiraan siswa yang mendaftar sebanyak 10.000 orang
pada satu semester, file “siswa saat ini” berisikan lebih dari 30.000
orang karena termasuk mahasiswa yang mendaftar setidaknya 1
mata kuliah namun belum menyelesaikan studinya.
Efisiensi Algoritma
Kita asumsikan bahwa records mahasiswa tersebut disimpan dalam
komputer yang berisikan registrasi mahasiswa secara berurutan
sesuai dengan id mahasiswa.

Untuk melakukan proses pencarian list mahasiswa, terdapat 2


algoritma yang dapat diterapkan. Pertama, sequential search
algorithm (algoritma penelusuran berurutan) dan binary search
algorithm (algoritma penelusuran biner).
Efisiensi Algoritma
Penyelesaian dengan algoritma sequential search:

Dengan diberi nomor id siswa, algoritma sequential search memulai


pencarian dari list dengan id pertama dan membandingkan entri
yang ditemukan dengan nomor id yang diinginkan. Karena tidak
mengetahui apa pun tentang sumber nilai dari target, kita tidak
dapat menyimpulkan seberapa jauh pencarian ini harus dilakukan.
Namun, setelah banyak penelusuran, kita dapat mengharapkan rata-
rata penelusuran berada di tengah daftar; beberapa penelusuran ada
yang lebih pendek dan ada yang lebih panjang.
Efisiensi Algoritma
Lanjutan sequential search:

Dengan begitu, kita memperkirakan bahwa dalam jangka waktu tertentu,


sequential search dapat mengidentifikasi kurang lebih 15,000 records
setiap penelusuran. Jika penerimaan dan pengecekkan records dengan
untuk penelusuran nomor id, dibutuhkan 10 miliseconds, maka proses
penelusuran membutuhkan rata-rata 2.5 menit yang mana merupakan
waktu yang lama untuk seorang registar untuk menunggu data siswa
muncul di layar komputer. Walaupun proses penerimaan dan
pengecekkan data berkurang hingga 1 miliseconds, penelusuran masih
memakan waktu yang lama, yaitu 15 detik.
Efisiensi Algoritma
Penyelesaian dengan algoritma binary search:

Berbeda dengan sequential search, binary search bekerja dengan


membandingkan nilai dari target dengan entri tengah dari list yang
tersedia. Jika bukan entri yang diinginkan, binary search setidaknya
melanjutkan penelusuran dengan setengah list lain yang tersisa.
Jadi, setelah memeriksa entri tengah dari list data siswa sebanyak
30.000 records, binary search memiliki paling banyak 15.000 records
yang masih perlu dipertimbangkan. Setelah pemeriksaan kedua,
hanya 7.500 yang tersisa; dan setelah penerimaan data ketiga, tidak
lebih dari 3.750 entri yang perlu diperiksa.
Efisiensi Algoritma
Lanjutan algoritma binary search:

Dengan terus menggunakkan cara tersebut, records target akan


ditemukan dengan maksimal penelusuran 15 entri dari list sebanyak
30.000 records. Jadi, jika setiap penerimaan data membutuhkan
waktu 10 miliseconds, proses untuk menemukan suatu records
hanya membutuhkan waktu 0.15 seconds—Ini berarti akses untuk
records siswa yang diinginkan dilakukan secara instan jika dilihat
dari perspektif seorang registar.
Efisiensi Algoritma
Dapat disimpulkan, bahwa pemilihan algoritma yang tepat akan
berdampak besar bagi suatu aplikasi yang kita buat. Dari contoh ini
juga menunjukkan pentingnya analisis algoritma. Analisis algoritma
yang mencakup studi sumber daya, seperti waktu atau ruang
penyimpanan, yang dibutuhkan algoritma. Aplikasi utama dari studi
tersebut adalah evaluasi manfaat relatif dari algoritma alternatif.
Analisis algoritma biasanya meliputi best-case, worst-case, dan
average-case scenarios.
Efisiensi Algoritma
Secara umum, analisis algoritma pada contoh kasus sebelumnya,
dilakukan dalam konteks yang lebih umum. Artinya, saat
mempertimbangkan algoritma untuk mencari list, kita tidak fokus
pada list dengan panjang tertentu, tetapi mencoba mengidentifikasi
rumus yang akan menunjukkan kinerja algoritma untuk list dengan
panjang sembarang. Tidak sulit untuk menggeneralisasi alasan
sebelumnya ke list dengan panjang sembarang. Khususnya, ketika
diterapkan ke list dengan entri, algoritma sequential search akan
menginterogasi rata-rata n/2 entri.
Efisiensi Algoritma
Sedangkan algoritma binary search akan menginterogasi paling
banyak entri log2n dalam skenario terburuknya. (log2n mewakili
logaritma basis dua dari n. Kecuali dinyatakan lain, ilmuwan
komputer biasanya mengartikan basis dua ketika berbicara tentang
logaritma.)
Efisiensi Algoritma
Mari kita analisis insertion sort algorithm yang sudah dijelaskan
sebelumnya.

Algoritma dimulai dengan memilih list entri kedua untuk menjadi


pivot. Proses berlanjut dengan memilih entri yang berurutan sebagai
pivot hingga mencapai list terakhir. Di dalam best possible case
(kasus terbaik yang memungkinkan), setiap pivot telah berada pada
di tempat yang seharusnya, dan pivot perlu dibandingkan dengan
hanya satu entri sebelum ditemukan. Dengan demikian, pada best
case (kasus terbaik) menerapkan insertion sort untuk list dengan
entri n membutuhkan n-1 sebagai pembanding.
Efisiensi Algoritma
Sedangkan worst-case scenario (skenario terburuk), setiap pivot
harus dibandingkan dengan semua entri yang mendahului, sebelum
tempat yang tepat dapat ditemukan. Ini berlaku ketika original list
ada dalam urutan terbalik. Di kasus ini pivot pertama, dibandingkan
dengan satu entri, pivot kedua dibandingkan dengan 2 entri, dan
seterusnya. Total untuk proses men-sorting list dengan entri n
adalah 1 + 2 + 3 + … + (n - 1) atau (½)(n2 + n).
Efisiensi Algoritma
Efisiensi Algoritma
Pada average-case scenario (skenario rata-rata), kita dapat
mengharapkan setiap pivot dibandingkan dengan setengah dari
entri yang mendahuluinya yaitu sebanyak (¼)(n2 + n) atau setengah
dari worst-case scenario.

Dari hasil ini dapat diketahui bahwa jumlah perbandingan yang


dibuat selama eksekusi algoritma insertion sort memberikan
perkiraan jumlah waktu yang dibutuhkan untuk mengeksekusi
algoritma tersebut.
Efisiensi Algoritma

Gambar tersebut menunjukkan grafik yang mengindikasikan waktu yang


dibutuhkan untuk mengeksekusi algoritma insertion sort seiring
bertambahnya panjang dari list dengan worst-case scenario.
Efisiensi Algoritma
Mari kita terapkan analisis yang sama menggunakkan binary search.
Ingat bahwa penelusuran list dengan entri n menggunakkan
algoritma ini membutuhkan interogasi terhadap maksimal entri log2
n, yang mana akan memberikan rata-rata waktu untuk masing-
masing ukuran list.
Efisiensi Algoritma

Gambar tersebut menunjukkan grafik yang mengindikasikan waktu yang


dibutuhkan untuk mengeksekusi algoritma binary search seiring
bertambahnya panjang dari list dengan worst-case scenario.
Efisiensi Algoritma
Bentuk grafik ditentukan dari komparasi terhadap waktu yang
dibutuhkan suatu algoritma untuk menjalankan tugas dengan
ukuran input data. Hal ini mencerminkan karakteristik efisiensi dari
suatu algoritma, merupakan suatu hal yang umum untuk
mengklasifikasikan suatu algoritma berdasarkan bentuk grafiknya—
umumnya berdasarkan worst-case analysis. Adapun notasi untuk
mengidentifikasi kelas-kelas algoritma adalah big-theta notation (Θ).
Verifikasi Perangkat Lunak
Verifikasi Perangkat Lunak
Ingatlah bahwa fase keempat dalam analisis Polya tentang
pemecahan masalah adalah mengevaluasi solusi untuk akurasi dan
potensinya sebagai alat untuk memecahkan masalah lainnya.
Signifikansi bagian pertama dari fase ini dicontohkan oleh contoh
berikut:
Seorang turis dengan rantai emas tujuh mata harus tinggal di hotel
terpencil selama tujuh malam. Sewa setiap malam seharga satu
mata rantai. Berapa jumlah minimum mata rantai yang harus
dipotong sehingga wisatawan dapat membayar hotel satu mata
rantai per pagi tanpa membayar akomodasi di muka?
Verifikasi Perangkat Lunak
Untuk mengatasi masalah ini, pertama-tama tidak setiap rantai harus
dipotong. Jika kita hanya memotong mata rantai kedua, kita dapat
melepaskan mata rantai pertama dan kedua dari lima mata rantai
lainnya. Mengikuti pemahaman ini, kita diarahkan ke solusi dengan
hanya memotong rantai kedua, keempat, dan keenam dalam sebuah
rantai, sebuah proses yang melepaskan setiap rantai sementara
hanya memotong tiga rantai. Selain itu, setiap pemotongan yang
lebih sedikit meninggalkan dua mata rantai yang terhubung, jadi
dapat disimpulkan bahwa jawaban yang benar untuk masalah ini
adalah tiga.
Verifikasi Perangkat Lunak

Gambar tersebut menjelaskan tentang hal yang dibahas sebelumnya.


Verifikasi Perangkat Lunak

Akan tetapi, setelah mempertimbangkan kembali masalah tersebut,


kita dapat mengamati bahwa ketika hanya rantai ketiga dalam rantai
yang dipotong, kita mendapatkan tiga rantai dengan panjang satu,
dua, dan empat.
Verifikasi Perangkat Lunak

Gambar tersebut menjelaskan tentang penyelesaian dengan memotong


satu mata rantai.
Verifikasi Perangkat Lunak
Dengan potongan-potongan ini kita dapat melakukan:
● Pagi pertama: Beri hotel mata rantai tunggal.
● Pagi kedua: Ambil mata rantai tunggal dan berikan hotel potongan
mata rantai ganda.
● Pagi ketiga: Beri hotel mata tunggal.
● Pagi keempat: Dapatkan kembali tiga mata rantai yang dipegang
oleh hotel dan berikan hotel potongan empat mata rantai.
● Pagi kelima: Beri hotel mata rantai tunggal.
● Pagi keenam: Ambil mata rantai tunggal dan berikan hotel mata
rantai ganda.
● Pagi ketujuh: Beri hotel mata rantai tunggal.
Verifikasi Perangkat Lunak
Akibatnya, solusi pertama, yang dianggap benar, salah. Lalu,
bagaimana kita bisa yakin bahwa solusi baru sudah benar? Adapun
argumennya sebagai berikut: Karena satu mata rantai harus
disediakan ke hotel pada pagi pertama, setidaknya satu mata rantai
rantai harus diputus, dan karena solusi baru ini hanya memerlukan
satu pemutusan, maka harus optimal.
Verifikasi Perangkat Lunak
Diterjemahkan ke dalam lingkungan pemrograman, contoh ini
menekankan perbedaan antara program yang diyakini benar dan
program yang benar. Keduanya belum tentu sama, meskipun
"diketahui" benar masih gagal pada saat-saat kritis karena beberapa
situasi yang tidak terduga. Oleh karena itu, verifikasi perangkat
lunak adalah tugas penting, dan pencarian teknik verifikasi yang
efisien merupakan bidang penelitian aktif dalam ilmu komputer.
Verifikasi Perangkat Lunak
Garis besar penelitian di bidang ini mencoba menerapkan teknik
logika formal untuk membuktikan kebenaran suatu program. Artinya,
tujuannya adalah untuk menerapkan logika formal untuk
membuktikan bahwa algoritma yang diwakili oleh program
melakukan apa yang diinginkannya. Tesis yang mendasari adalah
bahwa dengan mengurangi proses verifikasi menjadi prosedur
formal, seseorang terlindungi dari kesimpulan yang tidak akurat
yang mungkin terkait dengan argumen intuitif, seperti halnya
dengan masalah rantai emas.
Verifikasi Perangkat Lunak
Untuk membuktikkan kebenaran suatu solusi kita dapat memulainya
dengan asumsi dengan kondisi tertentu, yang disebut
preconditions. Tahap selanjutnya dalam pembuktian kebenaran
adalah dengan mempertimbangkan bagaimana konsekuensi dari
preconditions tersebar luas melalui program. Untuk tujuan ini,
peneliti telah menganalisis berbagai struktur program untuk
menentukan bagaimana suatu pernyataan, yang diketahui benar
sebelum struktur dieksekusi, dipengaruhi oleh implementasi
struktur. Untuk contoh sederhana, jika pernyataan spesifik tentang
nilai Y diketahui ada sebelum melaksanakan instruksi
X=Y
Verifikasi Perangkat Lunak
Lanjutan:

Maka pernyataan yang sama dapat dibuat tentang X setelah


instruksi dijalankan. Lebih tepatnya, jika nilai Y bukan 0 sebelum
instruksi dijalankan, maka dapat disimpulkan bahwa nilai X tidak
akan menjadi 0 setelah instruksi dijalankan.

Contoh yang sedikit lebih terlibat terjadi dalam kasus struktur if-else
seperti:
if (kondisi): instruksi A
else: instruksi B
Verifikasi Perangkat Lunak
Mengikuti aturan seperti ini, pembuktian kebenaran dilanjutkan
dengan mengidentifikasi pernyataan, yang disebut assertions, yang
dapat dibuat di berbagai titik dalam program. Hasilnya adalah
kumpulan dari assertions, masing-masing merupakan konsekuensi
dari preconditions program dan urutan instruksi yang mengarah ke
titik dalam program di mana pernyataan tersebut ditetapkan. Jika
pernyataan yang dibuat di akhir program sesuai dengan spesifikasi
keluaran yang diinginkan (yang disebut kondisi akhir), kami
menyimpulkan bahwa program tersebut benar.
Verifikasi Perangkat Lunak

Sebagai contoh, perhatikan struktur while loop yang ditunjukkan


pada gambar di atas
Verifikasi Perangkat Lunak
Misalkan, sebagai konsekuensi dari preconditions yang diberikan pada
titik A, kita dapat menetapkan bahwa pernyataan tertentu benar setiap
kali pengujian penghentian dilakukan (titik B) selama proses berulang.
(Pernyataan pada titik dalam loop yang benar setiap kali titik dalam loop
tercapai dikenal sebagai invariant loop.) Kemudian, jika pengulangan
berhenti, eksekusi berpindah ke titik C, di mana kita dapat
menyimpulkan bahwa kedua loop invariant dan kondisi terminasi
berlaku. Jika pernyataan gabungan ini menyiratkan kondisi akhir yang
diinginkan, bukti kebenaran kami dapat diselesaikan hanya dengan
menunjukkan bahwa komponen inisialisasi dan modifikasi loop pada
akhirnya mengarah pada kondisi terminasi.
Sekian Dan Terima Kasih :)

Anda mungkin juga menyukai