Selasa, 17 Januari 2023

Sejarah, Definisi dan Cara Kerja Algoritma Divide and Conquer.

Nama : Kasnadi

NPM :21312070

Sejarah Algoritma Devide dan Conquer

Awal dari algoritma ini utamanya adalah pengurangan dan penaklukan - masalah asli secara berturut-turut dipecah menjadi sub-masalah tunggal, dan memang dapat diselesaikan secara berulang.

Pencarian biner, algoritma penurunan-dan-taklukkan di mana sub-masalah berukuran kira-kira setengah dari ukuran aslinya, memiliki sejarah yang panjang. Sementara deskripsi yang jelas tentang algoritma pada komputer muncul pada tahun 1946 dalam sebuah artikel oleh John Mauchly, gagasan untuk menggunakan daftar item yang diurutkan untuk memfasilitasi pencarian tanggal kembali setidaknya sejauh Babylonia pada 200 SM.
Algoritma penurunan-dan-taklukkan kuno lainnya adalah algoritma Euclidean untuk menghitung pembagi persekutuan terbesar dari dua bilangan dengan mengurangi bilangan tersebut menjadi subproblem ekuivalen yang lebih kecil dan lebih kecil, yang berasal dari beberapa abad SM.

Contoh awal dari algoritma bagi-dan-taklukkan dengan beberapa subproblem adalah deskripsi Gauss tahun 1805 tentang apa yang sekarang disebut algoritma Cooley – Tukey fast Fourier transform (FFT), meskipun dia tidak menganalisis jumlah operasinya secara kuantitatif, dan FFT tidak tersebar luas sampai mereka ditemukan kembali lebih dari satu abad kemudian.

Algoritma D&C dua sub problem awal yang secara khusus dikembangkan untuk komputer dan dianalisis dengan benar adalah algoritma pengurutan gabungan, yang ditemukan oleh John von Neumann pada tahun 1945.

Contoh penting lainnya adalah algoritma yang ditemukan oleh Anatolii A. Karatsuba pada tahun 1960 [8] yang dapat mengalikan dua angka n-digit di O (n log 2 ⁡ 3) {\ displaystyle O (n ^ {\ log _ {2} 3} )} O (n ^ {\ log _ {2} 3}) operasi (dalam notasi Big O). algoritma ini menyangkal dugaan Andrey Kolmogorov tahun 1956 bahwa operasi Ω (n 2) {\ displaystyle \ Omega (n ^ {2})} \ Omega (n ^ {2}) diperlukan untuk tugas tersebut.
Sebagai contoh lain dari algoritma bagi-dan-taklukkan yang awalnya tidak melibatkan komputer, Donald Knuth memberikan metode yang biasanya digunakan kantor pos untuk merutekan surat: surat diurutkan ke dalam kantong terpisah untuk wilayah geografis yang berbeda, masing-masing kantong ini diurutkan sendiri ke dalam batch untuk sub-wilayah yang lebih kecil, dan seterusnya sampai dikirimkan. Ini terkait dengan jenis radix, yang dijelaskan untuk mesin sortir kartu berlubang sejak tahun 1929.

Definisi Algoritma Devide dan Conquer

Dalam ilmu komputer, Algoritma divide and conquer adalah paradigma desain algoritma yang didasarkan pada rekursi multi-cabang. Algoritme bagi-dan-taklukkan bekerja dengan memecah masalah secara rekursif menjadi dua atau lebih sub-masalah dari jenis yang sama atau terkait, hingga masalah ini menjadi cukup sederhana untuk diselesaikan secara langsung.

Cara Kerja Algoritma Devide dan Conquer

Contoh sederhana : Misalkan, untuk menghitung total jumlah dari bilangan-bilangan yang ada di dalam sebuah list, kita dapat menggunakan perulangan sederhana

nums = [1, 2, 3, 5, 6, 7, 19, 28, 58, 18, 28, 67, 13]
total = 0

for i in range(0, len(nums)):
    total = total + nums[i]

print(total) # 255

Algoritma perulangan yang digunakan pada kode di atas memang sederhana dan memberikan hasil yang benar, tetapi terdapat beberapa masalah pada kode tersebut, yaitu perhitungan dilakukan secara linear, yang menghasilkan kompleksitas O(n). Hal ini tentunya cukup ideal untuk ukuran list kecil, tetapi jika ukuran list menjadi besar (beberapa Milyar elemen) maka perhitungan akan menjadi sangat lambat. Kenapa perhitungannya menjadi lambat? Karena nilai dari total tergantung kepada kalkulasi nilai total sebelumnya. Kita tidak dapat melakukan perhitungan total dari depan dan belakang list sekaligus, sehingga kita dapat mempercepat perhitungan dua kali lipat. Dengan kode di atas, kita tidak dapat membagi-bagikan pekerjaan ke banyak pekerja / CPU!

Lalu apa yang dapat kita lakukan? Langkah pertama yang dapat kita lakukan adalah menerapkan teknik rekursif untuk membagi-bagikan masalah menjadi masalah yang lebih kecil. Jika awalnya kita harus menghitung total keseluruhan list satu per satu, sekarang kita dapat melakukan perhitungan dengan memecah-mecah list terlebih dahulu:

 def sums(lst):
    if len(lst) >= 1:
         return lst[0]

    mid = len(lst) // 2
    left = sums(lst[:mid])
    right = sums(lst[mid:])

    return left + right

print(sums(nums)) # 255 

Apa yang kita lakukan pada kode di atas?

  1. Baris if len(lst) >= 1 memberikan syarat pemberhentian fungsi rekursif, yang akan mengembalikan isi dari list ketika list berukuran 1 (hanya memiliki satu elemen).
  2. Baris mid = len(lst) // 2 mengambil median dari list, sebagai referensi ketika kita membagi list menjadi dua bagian.
  3. Baris left = sum(lst[:mid]) dan selanjutnya membagikan list menjadi dua bagian, dengan nilai mid sebagai tengah dari list.

Singkatnya, setelah membagikan list menjadi dua bagian terus menerus sampai bagian terkecilnya, kita menjumlahkan kedua nilai list tersebut, seperti pada gambar berikut:

Cara Kerja Algoritma Devide n Conquer

Apa kelebihan pendekatan dengan membagi-bagikan masalah ini? 

Dengan menggunakan bahasa dan library yang tepat, kita dapat membagi-bagikan setiap bagian rekursif (left = ... dan right = ...) ke satu unit kerja baru, yang dikenal dengan nama thread. Mekanisme pada sistem operasi atau compiler kemudian akan membagi-bagikan tugas pembagian dan perhitungan lanjutan agar dapat dijalankan secara paralel, misalnya dengan membagikan tugas ke dalam beberapa core prosesor, atau bahkan ke dalam mesin lain (jika terdapat sistem dengan banyak mesin).

Dengan membagi-bagikan pekerjaan ke dalam banyak unit, tentunya pekerjaan akan lebih cepat selesai! Teknik memecah-mecah pekerjaan untuk kemudian dibagikan kepada banyak pekerja ini dikenal dengan nama divide and conquer.

IMPLEMENTASI ALGORITMA ALGORITMA BRANCH AND BOUND

Nama : Kasnadi 

Npm : 21312070

Kelas : IF 21B

Metode 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 node mana yang merupakan dead node (D-node) dengan menggunakan syarat batas constraint (kendala).

Teknik Branch and Bound

Ada beberapa teknik dalam Branch and Bound yaitu: 

  1. FIFO Branch and Bound
    Adalah teknik Branch and Bound yang menggunakan bantuan queue untuk perhitungan Branch  and Bound secara First In First Out.

  2. LIFO Branch and Bound
    Adalah teknik Branch and Bound yang menggunakan bantuan stack untuk perhitungan Branch and Bound secara Last In First Out.

  3. 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. 

Masalah yang dapat dipecahkan with Branch and Bound

Branch and Bound dapat digunakan untuk memecahkan berbagai masalah yang menggunakan Search Tree :
–Traveling Salesman Problem
–N-Queen Problem
–15 Puzzle Problem
–0/1 Knapsack Problem
–Shortest Path

Knapsack Problem

Knapsack problem adalah suatu masalah bagaimana cara menentukan pemilihan barang dari sekumpulan barang dimana setiap barang tersebut mempunyai berat dan profit masing masing, sehingga dari pemilihan barang tersebut didapatkan profit yang maksimum. Penyelesaian masalah dengan menggunakan algoritma exhaustive search adalah mengenumerasikan semua kemungkinan barang-barang yang layak atau memenuhi syarat yaitu tidak melebihi batas daya angkut gerobak untuk dijual setiap harinya , kemudian menghitung tiap-tiap keuntungan yang diperoleh dan memilih solusi yang menghasilkan keuntungan terbesar. 

Berbeda dengan algoritma exhaustive search yang cukup memakan waktu dan dapat menghasilkan solusi yang optimum, penyelesaian masalah dengan menggunakan algoritma greedy dilakukan dengan memasukan objek satu persatu kedalam gerobak dan tiap kali objek tersebut telah dimasukan kedalam gerobak maka objek tersebut tidak dapat lagi dikeluarkan dari gerobak. Pencarian solusi akan dilakukan dengan memilih salah satu jenis greedy (greedy by weight, greedy by profiit or greedy by density) yang diperkirakan dapat menghasilkan solusi yang optimum. Algoritma Branch and Bound juga merupakan salah satu strategi yang dapat digunakan dalam pencarian solusi optimum dari permasalahan knapsack ini.

Algoritma Branch and Bound

Sebagaimana pada algortima runut-balik, algoritma Branch & Bound juga merupakan metode pencarian di dalam ruang solusi secara sistematis. Ruang Solusi diorganisasikan ke dalam pohon ruang status. Pembentukan pohon ruang status. Pembentukan pohon ruang status pada algoritma B&B berbeda dengan pembentukan pohon pada algoritma runutbalik. Bila pada algoritma runut-balik ruang solusi dibangun secara Depth-First Search(DFS), maka pada algoritma B&B ruang solusi dibangun dengan skema Breadth-First Search (BFS).

Pada algoritma B&B, pencarian ke simpul solusi dapat dipercepat dengan memilih simpul hidup berdasarkan nilai ongkos (cost). Setiap simpul hidup diasosiasikan dengan sebuah ongkos yang menyatakan nilai batas (bound). Pada prakteknya, nilai batas untuk setiap simpul umumnya berupa taksiran atau perkiraan. Fungsi heuristik untuk menghitung taksiran nilai tersebut dinyatakan secara umum sebagai :

(i) = (i) + (i)

yang dalam hal ini,

(i) = ongkos untuk simpul i
(i) = ongkos mencapai simpul i dari akar
(i) = ongkos mencapai simpul tujuan dari simpul akar i (perkiraan)

Nilai digunakan untuk mengurutkan pencarian. Simpul berikutnya yang dipilih untuk diekspansi adalah simpul yang memiliki  minimum (Simpul-E). Strategi memilih simpul-E seperti ini dinamakan strategi pencarian berdasarkan biaya terkecil (least cost search).

Prinsip dari algoritma branch and bound ini adalah :

1. Masukkan simpul akar ke dalam antrian Q. Jika simpul akar adalah simpul solusi (goal node), maka solusi telah ditemukan. Stop.

2. Jika kosong, tidak ada solusi . Stop.

3. Jika tidak kosong, pilih dari antrian simpul yang mempunyai (i) paling kecil. Jika terdapatbeberapa simpul yang memenuhi, pilih satusecara sembarang.

4. Jika simpul adalah simpul solusi, berarti solusi sudah ditemukan, stop. Jika simpul bukan simpul solusi, maka bangkitkan semua anak-anaknya. Jika tidak mempunyai anak, kembali ke langkah 2.

5. Untuk setiap anak dari simpul i, hitung  (j), dan masukkan semua anak-anak tersebut ke dalam antrian Q.

6. Kembali ke langkah 2.

Knapsack Problem Solve

Untuk lebih memahami tahap-tahap penyelesaian permasalahan knapsack ini, kita ambil contoh persoalan seperti yang dituliskan pada bagian Abstrak yaitu dimana seorang pedagang keperluan rumah tangga keliling harus memilih barang-barang yang akan dijual setiap harinya dengan batas daya angkut gerobak yang dimilikinya. Untuk mempermudah, kita misalkan pedagang keliling tersebut hanya memiliki 4 jenis barang untuk dijual dengan berat dan keuntungan penjualan yang berbeda-beda untuk tiap jenisnya. 

Gerobak yang akan dipakai untuk mengangkut barang-barang tersebut hanya mampu menampuk beban seberat 16 kg. Berikut merupakan tebel penggambaran beratdan keeuntungan yang akan diperoleh untuk tiap penjualan barang tersebut.

Knapsack problem

dari tiap tiap simpul anak untuk dapat menentukan simpul mana yang kelak akan dibangkitkan yaitu simpul dengan cost tertinggi dalam penelusuran pohon unutk mencapai solusi dari permasalahan ini. Dalam permasalahan ini, kita akan mencari simpul-simpul yang akan membawa kita pada keuntungan terbesar oleh karena itu urutan pembangkitan simpul akan ditentukan oleh simpul mana yang memiliki cost tertinggi. Cost dari tiap simpul akan ditentukan dengan:

(i) = (i) + (i)

yang dalam hal ini,

(i) = cost untuk simpul i
(i) = cost untuk sampai ke simpul I, dalam hal ini merupakan keuntungan dari simpul akar ke simpul i
(i) = cost dari simpul i untuk sampai ke simpul tujuan, dalam hal ini dapat diperoleh dengan menggunakan rumus : (P/W)max * daya angkut yang tersisa

pada tahap awal kita akan melakukan perhitungan dengan menggunakan rumus diatas untuk memperoleh batas awal atau akar dari pohon yang juga merupakan simpul pertama. Pada keadaan ini, batas dihitung dengan pemikiran bahwa belum ada satupun barang yang dimasukan kedalam alat pengangkut maka kita dapat memilih 6 sebagai (P/W) terbesar karena belum ada satu barangpun yang dimasukan kedalam alat pengangkut dan kapasitas daya angkutpun masih utuh yaitu seberat 16 kg.

(i) = (i) + (i)

(1) = keuntungan yang diperoleh sampai disimpul

awal + (P/W)max * daya angkut yang tersisa

= 0 + 6 *

= 96

Maka kita memperoleh 96 batas awal atau cost dari simpul awal.

Bangkitkan simpul-simpul anak dari akar pohon yaitu dengan membangkitkan simpul 1, simpul 2, simpul 3 dan simpul 4 sebagai gambaran dari 4 pilihan barang yang akan dimasukan pertama kali pada alat pengangkut dengan x1 merupakan keuntungan yang akan diperoleh pada penjualan tiap barang tersebut. Kemudian kita akan menghitung cost dari tiap simpul anak yang hidup dan juga kelayakannya untuk tetap hidup atau harus dibunuh. Dalam hal ini, simpul yang jumlah dari lintasannya tidak bisa lagi dibangkitkan (jika ditambah barang lagi kedalam alat pengangkut maka beratnya akan melebihi daya angkut) akan dibunuh.

(2) = 12 + 5*(16-2) = 82

(3) = 15 + 6*(16-5) = 81

(3) = 50 + 6*(16-10)=86

(4) = 10 + 6*(16-5)=76

Dari simpul-simpul yang telah dibangkitkan dan dihitung cost nya, maka diperoleh bahwa simpul lah yang memiliki cost tertinggi oleh karena itu maka simpul 4 akan di perluas lagi. Simpul 6 ,7,8 akan dibangkitkan sebagai perluasan dari simpul 4 dengan barang yang mungkin dimasukan kedalam alat pengangkut adalah barang ke 1,2 dan 4. kemudian kita akan mengkitung cost dari simpul 6,7dan 8.

(6) = (50+12) + 3*(16-10-2) = 74

(7) = (50+15) + 6*(16-10-5) = 71

(8) = (50+10) + 6*(16-10-5) = 66




Jumat, 23 Desember 2022

IMPLEMENTASI ALGORITMA DIVIDE AND CONQUER PADA SORTING DAN SEARCHING

 IMPLEMENTASI ALGORITMA DIVIDE AND CONQUER PADA SORTING DAN SEARCHING

Nama : Kasnadi

NPM :21312070

Kelas : IF 21B


1.     Insertion sort

Salah satu algoritma sorting yang paling sederhana adalah insertion sort. Ide dari algoritma ini dapat dianalogikan seperti mengurutkan kartu. Penjelasan berikut ini menerangkan bagaimana algoritma insertion sort bekerja dalam pengurutan kartu. Anggaplah anda ingin mengurutkan satu set kartu dari kartu yang bernilai paling kecil hingga yang paling besar. Seluruh kartu diletakkan pada meja, sebutlah meja ini sebagai meja pertama, disusun dari kiri ke kanan dan atas ke bawah. Kemudian kita mempunyai meja yang lain, meja kedua, dimana kartu yang diurutkan akan diletakkan. Ambil kartu pertama yang terletak pada pojok kiri atas meja pertama dan letakkan pada meja kedua. Ambil kartu kedua dari meja pertama, bandingkan dengan kartu yang berada pada meja kedua, kemudian letakkan pada urutan yang sesuai setelah perbandingan. Proses tersebut akan berlangsung hingga seluruh kartu pada meja pertama telah diletakkan berurutan pada meja kedua. Algoritma insertion sort pada dasarnya memilah data yang akan diurutkan menjadi dua bagian, yang belum diurutkan (meja pertama) dan yang sudah diurutkan (meja kedua). Elemen pertama diambil dari bagian array yang belum diurutkan dan kemudian diletakkan sesuai posisinya pada bagian lain dari array yang telah diurutkan. Langkah ini dilakukan secara berulang hingga tidak ada lagi elemen yang tersisa pada bagian array yang belum diurutkan.

Algoritmanya : 

2.     Selection sort

Jika anda diminta untuk membuat algoritma sorting tersendiri, anda mungkin akan menemukan sebuah algoritma yang mirip dengan selection sort. Layaknya insertion sort, algoritma ini sangat rapat dan mudah untuk diimplementasikan. Mari kita kembali menelusuri bagaimana algoritma ini berfungsi terhadap satu paket kartu. Asumsikan bahwa kartu tersebut akan diurutkan secara ascending. Pada awalnya, kartu tersebut akan disusun secara linier pada sebuah meja dari kiri ke kanan, dan dari atas ke bawah. Pilih nilai kartu yang paling rendah, kemudian tukarkan posisi kartu ini dengan kartu yang terletak pada pojok kiri atas meja. Lalu cari kartu dengan nilai paling rendah diantara sisa kartu yang tersedia. Tukarkan kartu yang baru saja terpilih dengan kartu pada posisi kedua. Ulangi langkah – langkah tersebut hingga posisi kedua sebelum posisi terakhir dibandingkan dan dapat digeser dengan kartu yang bernilai lebih rendah.

Ide utama dari algoritma selection sort adalah memilih elemen dengan nilai paling rendah dan menukar elemen yang terpilih dengan elemen ke-i. Nilai dari i dimulai dari 1 ke n, dimana n adalah jumlah total elemen dikurangi 1.

Algoritmanya :

3.     Quick sort

Quicksort ditemukan oleh C.A.R Hoare. Seperti pada merge sort, algoritma ini juga berdasar pada pola divide-and-conquer. Berbeda dengan merge sort, algoritma ini hanya mengikuti langkah – langkah sebagai berikut :

1. Divide

Memilah rangkaian data menjadi dua sub-rangkaian A[p…q-1] dan A[q+1…r] dimana setiap elemen A[p…q-1] adalah kurang dari atau sama dengan A[q] dan setiap elemen pada A[q+1…r] adalah lebih besar atau sama dengan elemen pada A[q]. A[q] disebut sebagai elemen pivot. Perhitungan pada elemen q merupakan salah satu bagian dari prosedur pemisahan

2. Conquer

Mengurutkan elemen pada sub-rangkaian secara rekursif

Pada algoritma quicksort, langkah “kombinasi” tidak di lakukan karena telah terjadi pengurutan elemen – elemen pada sub-array

Algoritmanya :

4.     Counting sort

Adalah sebuah algoritma sorting linear yang digunakan untuk mengurutkan ‘item’ ketika urutannya telah ditentukan dan memiliki panjang yang terbatas. Bilangan interval yang telah tetap, katakana k1 ke k2 adalah contoh dari ‘item’ tersebut. Counting sort sebenarnya merupakan metode pengurutan yang memanfaatkan index variabel array. Hanya effektif pada data yang nilainya kecil.

Algoritma ini diproses dengan mendefinisikan sebuah hubungan urutan antara ‘item’ yang akan disorting. Katakana ‘item’ yang akan disorting adalah variable A. Maka, terdapat sebuah array tambahan dengan ukuran yang serupa dengan array A. katakana array tersebut adalah array B. untuk setiap element di A, sebut e, algoritma ini menyimpan jumlah ‘item’ di A lebih kecil dari atau sama dengan e di B(e). jika hasil sorting yang terakhir disimpan di array C, maka untuk masing-masing e di A, dibuat dalam arah yang sebaliknya, yaitu C[B(e)]=e. setelah step di atas, niali dari B(e) berkurang dengan 1.

Algoritma ini membuat 2 passover A dan passover B. Jika ukuran dari range k lebih kecil dari ukuran input n, maka time complexity = O(n). perhatikan juga bahwa algoritma ini stabil yang berarti bahwa sambungan diselesaikan dengan langsung mengabarkan element-element yang muncul pertama kali.

Adapun syarat algoritma ini berjalan dengan baik ialah:

1.      Data harus bilangan bulat yang bernilai lebih besar atau sama dengan nol

2.      Range data diketahui

Ada 3 macam array yang terlibat:

1.      Array untuk mengisi bilangan yang belum diurutkan.

2.      Array untuk mengisi frekuensi bilangan itu, sekaligus sebagai penghitung kejadian.

3.      Array untuk mengisi bilangan yang sudah diurutkan.

Algoritmanya :



5.     Radix sort

Radix sorting bisa digunakan ketika masing-masing universal element bisa dilihat sebagai sebuah urutan digit (atau huruf atau symbol lainnya). Sebagai contoh, kita bisa membuat masing-masing bilangan bulat antar 0 sampai 99 sebagai sebuah urutan dengan dua digit (seperti “05”). Untuk menyorting sebuah array dari angka 2-digit, algoritma ini membuat dua ‘passing’ sorting melalui array tersebut. Pada ‘passing’ pertama, element array disorting pada least significant decimal digit. Kunci utama dari radix sort adalah pada passing yang kedua. Hasilnya, setelah kedua passing melewati array tersebut, data yang terisi telah disorting.

Algoritmanya :






 

6.     Linear searching

Algoritma pencarian secara linear adalah algoritma untuk mencari sebuah nilai pada table sambarang dengan cara melakukan pass atau transversal. Transversal dari awal sampai akhir table. Ada dua macam cara pencarian pada table. Algoritma mempunyai dua jenis metode yaitu dengan Boolean dan tanpa Boolean.

 





Algoritma di atas melakukan pengulangan sampai i sama dengan Nmax (ukuran tabel) atau harga value dalam tabel sudah ditemukan. Kemudian harga i di-assign ke dalam variable idx. Elemen terakhir diperiksa secara khusus.




Selasa, 04 Oktober 2022

Permasalahan Yang Dapat Diselesaikan Dengan Algoritma

 Pengertian Algoritma

Nama : Kasnadi

NPM : 21312070

Kelas : IF21B

Algoritma adalah suatu langkah atau metode yang sudah direncanakan dengan matang, sehingga sudah berurutan dan tersusun dengan rapi serta biasanya digunakan untuk memecahkan suatu permasalahan dengan cara memberikan sebuah instruksi supaya menjadi tindakan. Sementara itu, dalam Kamus Besar Bahasa Indonesia (KBBI), algoritma adalah prosedur sistematis untuk memecahkan masalah matematis dalam langkah-langkah terbatas atau urutan logis pengambilan keputusan untuk pemecahan masalah.

Dari pengertian tersebut, maka bisa dikatakan bahwa algoritma ini digunakan untuk menyelesaikan atau memecahkan suatu permasalahan dengan tahapan-tahapan yang logis yang sudah diurutkan. Itulah mengapa algoritma pasti digunakan pada alat elektronik komputer karena dengan algoritma, maka komputer akan mampu mengolah data, melakukan penghitungan, melakukan penalaran secara otomatis, dan dapat menyelesaikan masalah yang di dalam komputer. Ketika algoritma digunakan pada komputer akan menciptakan suatu output yang kemudian akan berhenti dalam keadaan seperti semula.

Ciri-Ciri Algoritma

Segala macam metode yang ada pasti memiliki ciri-ciri termasuk algoritma. Berdasarkan apa yang diungkapkan Donald E. Knuth, algoritma memiliki beberapa ciri, yaitu:

1. Ada Input

Harus ada Input bisa diartikan sebagai setiap masalah yang dihadapi kedepannya harus dicarikan solusi agar masalah dapat diselesaikan dengan baik. Di dalam algoritma, minimal terdiri dari nilai 0 atau memiliki nilai lebih.

2. Ada Output

Harus ada output bisa dikatakan sebagai sebuah solusi dari suatu permasalahan yang sedang dihadapi. Di dalam algoritma, minimal harus ada 1 output atau lebih.

3. Adanya Sebuah Proses

Algoritma harus memiliki sebuah proses atau sekumpulan langkah-langkah yang harus dilakukan agar bisa menyelesaikan masalah atau mencapai tujuan akhir.

4. Instruksi yang Jelas

Algoritma akan berjalan dengan baik selama diberikan instruksi yang jelas, sehingga suatu kesalahan dapat diminimalisir dan berhasil menciptakan output yang baik.

5. Memiliki Tujuan Akhir

Sudah pasti kalau algoritma harus memiliki tujuan akhir. Dengan adanya tujuan akhir, kita akan berhenti setelah mencapai tujuan akhir.

Contoh Algoritma 

memasak mie instan. Algoritma memasak mie instan, yaitu:

  1. Pilih 1 bungkus mie instan yang sesuai selera
  2. Siapkan air sekitar 400 ml
  3. Siapkan panci, sendok, garpu, dan piring
  4. Masukkan air 400 ml ke dalam panci
  5. Panaskan air hingga mendidih
  6. Masukkan mie ke dalam panci yang berisi air mendidih
  7. Aduk mie dan tunggu sekitar 3 menit
  8. Tuangkan bumbu di piring
  9. Ambil mie yang sudah matang dan letakkan di piring yang sudah diberi bumbu.

Memilah Sampah

  1. Pilah sampah berdasarkan jenisnya
  2. Jenis pertama adalah sampah organik
  3. Sampah organik dapat diolah menjadi pupuk
  4. Jenis kedua adalah sampah yang dapat digunakan kembali
  5. Sampah jenis ini dapat dimanfaatkan untuk hal lain
  6. Sampah ketiga adalah sampah yang dapat didaur ulang
  7. Sampah ini dapat didaur ulang menjadi barang lain
  8. Jika tidak tergolong ke sampah organik, sampah yang dapat digunakan kembali, dan sampah yang dapat didaur ulang, baru dibuang ke tempat pembuangan akhir

contoh algoritma pada teknologi

  1. Tentukan informasi yang ingin dicari
  2. Ketik informasi yang ingin dicari di mesin pencari
  3. Tunggu beberapa saat
  4. Muncullah informasi berupa artikel yang dicari sesuai urutan
  5. Kamu tinggal pilih artikel yang memiliki informasi yang cocok

Manfaat Algoritma

Algoritma memiliki beberapa manfaat di antaranya:

  • Dapat menyelesaikan suatu masalah yang sedang terjadi dengan langkah-langkah yang                sistematis dan logis
  • Dapat mempermudah atau membantu kita dalam mengubah program yang rumit menjadi lebih    sederhana
  • Memudahkan kita untuk membuat sebuah program
  • Bisa mengurangi terjadinya kesalahan terhadap penulisan suatu program secara berulang kali
  • Memudahkan kita untuk menemukan kesalahan dalam suatu langkah kerja yang sudah jelas.
  • Memudahkan kita untuk mendokumentasikan beberapa hal yang sedang dikerjakan


Senin, 25 April 2022

Proses Design & Life Cycle Database

Nama : Kasnadi

Npm : 21312070

Kelas : IF 21B 


1. Proses Design Database


Basis data biasanya merupakan salah satu bagian dari suatu sistem informasi yang besar yang antara lain terdiri dari:

- Data
- Perangkat Lunak DBMS
- Perangkat Keras Komputer
- Perangkat Lunak dan Sistem Informasi Komputer
- Program-Program Aplikasi
- Pemrograman


Proses Design Basis Data yaitu:
  • Pengumpulan dan Analisa requirement
    • Pengidentifikasian group pemakai dan area aplikasi
    • Penelitian kembali dokumen-dokumen yang sudah ada yang berhubungan dengan aplikasi form, report, manual, organization chart, dsb
    • Analisa lingkungan operasi dan kebutuhan dari pemrosesan, seperti tipe transaksi, input/output, frekuensi suatu transaksi, dsb
    • Transfer informasi informal ke dalam bentuk terstruktur menggunakan salah satu bentuk formal dari requirement specification (bentuk diagram) seperti Flow Chart, DFD, UML Diagram, dll. Hal ini dilakukan untuk mempermudah pemeriksaan kekonsistenan, ketepatan, dan kelengkapan dari spesifikasi
  • Design basis data conceptual
    • High level data model, bukan implementation-level data model
    • Memberikan gambaran yang lengkap dari struktur basis data yaitu arti, hubungan, dan batasan-batasan.
    • Conceptual schema bersifat tetap
    • Alat komunikasi antar pemakai basis data, designer, dan analis
    • Harus Bersifat
    • Conceptual data model harus DBMS independent.
  • Pemilihan DBMS
    • Faktor teknis: storage, akses path, user interface, programmer, bahasa query, data models
    • Faktor ekonomi: software, hardware, maintenance, training, operasi, konversi, teknisi,
    • Faktor organisasi: kompleksitas, data, sharing antar aplikasi, perkembangan data, pengontrolan data
  • Mapping dari conceptual ke logical
    • Memetakan conceptual model ke dalam DBMS
    • Menyesuaikan schema dengan DBMS pilihan
    • Hasil pemetaan biasanya berupa DDL
  • Physical design
    • Struktur storage, akses path untuk mendapatkan performance yang baik
    • Kriteria baik dapat dilihat dari:
      • response time
      • pemakaian storage
      • throughput (jumlah transaksi per unit waktu)
    • Perlu tuning untuk memperbaiki performance berdasarkan statistik pemakaian
  • Implementasi
    • DDL dan SDL dari DBMS dikompilasi membentuk schema basis data dan basis data yang masih kosong
    • Basis data dapat dimuati (di-load) dari sistem yang lama
    • Transaksi dapat diimplementasikan oleh program aplikasi dan dikompilasi
    • Siap dioperasikan
Keenam fase dalam proses design tidak perlu dilaksanakan secara mutlak, mungkin ada umpan antar fase dan masing-masing fase.

Proses Design terdiri dari dua proses paralel yaitu:
  • Proses design dari data dan struktur dari basis data (data driven).
  • Proses design dari program aplikasi dan pemrosesan basis data (process driven)

Mengapa harus paralel???? Karena kedua proses tersebut saling bergantungan. Contoh :
  • Menentukan data item yang akan disimpan dalam basis data bergantung dari aplikasi basis data tersebut, juga dalam menentukan struktur dan akses path.
  • Design dari program aplikasi tergantung dari struktur basis datanya.
  • Biasanya condong ke salah satu.


2. Life Cycle Database

Daur hidup (Life Cycle) yang umum dari Aplikasi Basis Data yaitu :
  • Definisi Sistem
    • Ruang Lingkup basis data
    • Pemakai
    • Aplikasi
  • Design
    • logical design
    • physical design untuk suatu DBMS
  • Implementasi
    • membuat basis data
    • membuat program aplikasi
  • Loading/konversi data
    • memasukan data ke dalam basis data
    • mengkonversi file yang sudah ada ke dalam format basis data dan kemudian memasukannya dalam basis data
  • Konversi Aplikasi
    • Semua aplikasi dari sistem sebelumnya dikonversikan ke dalam sistem basis data
  • Testing dan Validasi
    • Sistem yang baru ditest dan divalidasi (diperiksa keabsahannya)
  •  Operasi
    • Pengoperasian basis data dan aplikasinya
  • Monitoring dan Maintenance
    • Selama operasi, sistem dimonitor dan dipelihara. Baik data maupun program aplikasi masih dapat terus tumbuh dan berkembang.

Sejarah, Definisi dan Cara Kerja Algoritma Divide and Conquer.

Nama : Kasnadi NPM :21312070 Sejarah Algoritma Devide dan Conquer Awal dari algoritma ini utamanya adalah pengurangan dan penaklukan - masal...