Minggu, 06 Maret 2022

Metodologi Penelitian Ilmu Komputer

 Minat Bidang Penelitian Pemanfaatan IoT dibidang Pertanian


Internet saat ini telah berkembang pesat di dunia, salah satunya di Indonesia. Pada tahun 2021 pengguna internet di Indonesia telah mencapai 202,6 juta, terjadi peningkatan 15% dari tahun sebelumnya. Perkembangan internet yang pesat dapat dimanfaatkan untuk menerapkan Internet of Things (IoT) dalam menunjang perekonomian masyarakat, contohnya seperti Pertanian.

Gagasan penerapan IoT pada sektor pertanian sudah seharusnya untuk direalisasikan karena membawa dampak yang sangat positif untuk para petani. Dalam penerapannya, IoT dapat membantu petani melalui sensor-sensor untuk memantau perkembangan kesuburan tanah, pengendalian hama atau penyakit. Selain itu, petani dapat melakukan penajdwalan penyiraman, pemupukan dan penyemprotan pestisida otomatis dengan memanfaatkan IoT. Diharapkan jika penerapan IoT pada bidang pertanian dapat meningkatkan produktivitas hasil pertanian yang dapat meningkatkan perekonomian masyarakat.


Rabu, 05 Januari 2022

IMPLEMENTASI ALGORITMA BRANCH AND BOUND

Pengertian Algoritma Branch and Bound



Algoritma B&B (Branch and Bound) adalah salah satu algoritma yang digunakan untuk pencarian jalur. Contoh yang dibahas kali ini adalah mengenai pencarian jalur yang melalui semua titik dengan biaya terendah.
Algoritma ini memiliki 2 prinsip, yaitu:

  • Algoritma ini akan melakukan perhitungan secara rekursif, akan memecah masalah kedalam masalah-masalah kecil, sambil tetap menghitung nilai terendah / terbaik. Proses ini dinamakan branching
  • Jika branching diterapkan secara sendirian, maka hasilnya akan tetap mencari setiap kemungkinan yang ada. Untuk meningkatkan performa, algoritma ini akan melakukan pencatatan biaya minimum sebagai bound dalam setiap perhitungan, sehingga untuk calon hasil jawaban yang diperkirakan akan melebihi bound akan dibuang karena tidak mungkin akan mencapai nilai terbaik
Teknik Algoritma Branch and Bound
Algoritma Branch and Bound dapat menggunakan beberapa titik, yaitu :

1. Least Cost Branch and Bound
Teknik ini akan menghitung cost dari setiap node yang ada. Node yang memilki cost terkecil diantara node lain, dianggap memiliki kemungkinan paling besar menuju solusi.
Tahap :
node yang memiliki cost terendah akan dibuka dahulu.
pada sebuah node berlaku b ≤ c(x) ≤ u.
Keterangan : 
b adalah batas bawah.
c(x) adalah cost dari node x.
u adalah batas atas.

2. FIFO Branch and Bound
Merupakan salah satu teknik dari  Algoritma Branch and Bound yang menggunakan bantuan dari Queue untuk proses perhitungan secara First In First Out.
Tahap : 
E-node dimasukkan ke dalam queue, kemudian membuat branch (cabang) selanjutnya.
D-node tiidak dapat digunakan untuk membuat branch selanjutnya.
Mendapatkan partial space tree (pohon) yang dicari

3. LIFO Branch and Bound
Merupakan salah satu teknik dari  Algoritma Branch and Bound yang menggunakan bantuan dari stack untuk proses perhitungan secara Last In First Out.
Tahap :
E-node dimasukkan ke dalam stack, kemudian membuat branch (cabang) selanjutnya.
D-node tiidak dapat digunakan untuk membuat branch selanjutnya.
Mendapatkan partial space tree (pohon) yang dicari
Implementasi Algoritma Branch and Bound pada permasalahan Knapsack Problem

Implementasi Algoritma Branch and Bound pada permasalahan Knapsack Problem


Dengan kapasitas sebesar 16, carilah keuntungan terbesar dari setiap barang tersebut.

Rumus : awal + (P/W)max* daya angkut yang tersisa
maka  : 0+6*16  =96

Diperoleh  96 batas awal atau cost dari simpul awal.

Bangkitkan simpul 1, simpul 2, simpul 3, dan simpul 4. Hitung cost dari tiap simpul tersebut.

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

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

4. 50 + 6*(16-10)=86

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

setelah simpul dibangkitkan, ditemukan bahwa simpul 4 memiliki cost tertinggi, sehingga simpul 4 akan diperluas untuk membuat simpul 6, 7, 8. Kemudian hitung cost dari simpul 6, 7, 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


Nama     : Ilham Baihaqi
NPM      : 20312152
Kelas     : IF20E

Website Teknokrat :

Rabu, 22 Desember 2021

Implementasi Algoritma Divide and Conquer pada Sorting dan Searching

Implementasi Algoritma Divide and Conquer pada Sorting dan Searching

Nama    : Ilham Baihaqi

NPM    : 20312152

Kelas    : IF 20 E

Algoritma Divide and Conquer adalah algoritma yang sangat populer pada di dunia ilmu komputer.  Algoritma Divide and Conquer adalah algoritma yang memiliki prinsip untuk membagi-bagi permasalahan yang terlalu besar menjadi beberapa atau sub-masalah yang lebih kecil sehingga menjadi mudah untuk diselesaikan. sub-sub masalah yang telah dibagi menjadi beberapa bagian yang lebih kecil kemudian akan dicari solusinya, setelah mendapatkan solusinya, solusi dari sub-sub masalah tersebut akan digabung menjadi satu untuk menyelesaikan masalah awal atau masalah utama. 


    Algoritma Sorting atau algoritma pengurutan adalah suatu langkah yang sistematis dan berurutan. atau algoritma untuk meletakkan kumpulan data ke dalam suatu urutan tertentu berdasarkan satu atau beberapa "kunci" pada tiap-tiap elemen.


   Algoritma Searching atau algoritma pencarian adalah algoritma yang menerima suatu argumen "kunci" dan dengan menggunakan suatu langkah-langkah tertentu akan mencari "kunci" tersebut. Setelah proses pencarian dilakukan, akan diperoleh salah satu dari dua kemungkinan, yaitu data berhasil ditemukan, atau data tidak ditemukan.

Divide and Conquer Pada Sorting

1. Selection Sort


    Selection Sort adalah sebuah teknik pengurutan dengan cara mencari nilai tertinggi / terendah pada suatu kumpulan data (array) kemudian menempatkan nilai tersebut pada tempatnya. Algoritma ini dibagi menjadi dua berdasarkan urutan datanya, yaitu : dari kecil ke besar (Ascending), dan dari besar ke kecil (Descending). Algoritma ini pada dasarnya memilih nilai yang terbesar/terkecil, dan menukarkan nilai tersebut dengan nilai disebelah kiri/kanan pada data. Dan kemudian langkah tersebut diulang secara terus menerus hingga data tersusun. Algoritma ini tidak efektif bila digunakan pada array yang jumlah nya besar karena kompleksitas dari algoritma ini adalah O(x2) dimana n adalah jumlah item.


2. Insertion Sort

    Algoritma Insertion Sort adalah sebuah teknik pengurutan dengan cara membandingkan dan mengurutkan dua data pertama pada suatu kumpulan data (array). Algoritma ini pada dasarnya memilah data yang akan diurutkan menjadi dua bagian, data yang belum diurutkan, dan data yang sudah diurutkan. Elemen data pertama diambil dari bagian data yang belum diurutkan dan diletakkan pada posisinya di bagian data yang telah diurutkan. Algoritma ini dapat mengurutkan data secara ascending dan descending. Algoritma ini tidak efektif bila digunakan pada array dengan jumlah besar, karena kompleksitas algoritma ini adalah O() dimana n adalah jumlah item.


3. Quick Sort

    Algoritma Quick Sort adalah salah satu algoritma pengurutan data, algoritma ini menggunakan teknik pemecahan data menjadi beberapa bagian atau partisi, sehingga algoritma ini disebut juga dengan nama partition exchange sort. 
Algoritma ini mengambil salah satu elemen pada suatu data secara acak (tengah) yang disebut dengan pivot lalu menyimpan semua elemen yang lebih kecil disebelah kiri pivot dan elemen yang lebih besar pada sebelah kanan pivot. Langkah tersebut dilakukan secara berulang sampai semua elemen menjadi terurut.





Divide and Conquer Pada Searching


1. Binary Search


    Algoritma Binary Search atau algoritma pencarian Biner, salah satu teknik pencarian yang dilakukan secara berulang kali  membagi setengah dari jumlah data yang dicari sehingga dapat memperkecil lokasi pencarian. Dengan begitu dapat mempercepat waktu pencarian. Jika ditemukan kecocokan pada suatu data dengan data yang dicari maka pencarian akan selesai, jika tidak, pencarian akan terus dilakukan hingga akhir dari bagian data tersebut. Algoritma ini cocok untuk mencari pada jumlah data yang banyak, karena kompleksitas algoritma ini adalah O(log n) dimana n adalah jumlah item. Tetapi sebelum menggunakan algoritma ini, pastikan data sudah terurut. Jika tidak maka pencarian tidak bisa dilakukan.


    

2. Linear Search


    Algoritma Linear Search atau pencarian linear, adalah salah satu teknik dari pencarian data, teknik ini mencari data dengan mengecek semua data secara satu per satu. Apabila ditemukan kecocokan pada data dengan data yang dicari, maka pencarian akan selesai. Jika tidak, pencarian akan terus dilakukan hingga data terakhir. Algoritma ini tidak efektif jika digunakan pada data yang besar karena kompleksitas algoritma ini adalah O(n) dimana n adalah jumlah item. Dan jika data yang dicari berada pada bagian paling akhir dari kumpulan data tersebut (array), maka pencarian tetap harus dilakukan dari yang paling awal, sehingga membutuhkan waktu yang lama.


Jangan Lupa Kunjungi Link Di Bawah :


Rabu, 15 Desember 2021

SEJARAH, DEFINISI DAN CARA KERJA ALGORITMA DIVIDE AND CONQUER

 Nama    : Ilham Baihaqi

Kelas    : IF 20 E

NPM    : 20312152


Sejarah, Definisi dan Cara Kerja Algoritma Divide and Conquer


A. Sejarah Algoritma Divide and Conqueror

Algoritma Divide And Conquer ditemukan oleh seorang ilmuwan Rusia bernama Anatolii Alexeevich Karatsuba pada tahun 1960. Pada mulanya, Anatolii menemukan algoritma yang lebih cepat untuk mengalihkan dua buah bilangan bulat yang besar dengan kompleksitas O(nlog 3).

B. Definisi Algoritma Divide and Conqueror

  Algoritma Divide and Conquer merupakan algoritma yang sangat populer di dunia Ilmu Komputer. Divide and Conquer merupakan algoritma yang berprinsip memecah-mecah permasalahan yang terlalu besar menjadi beberapa bagian kecil sehingga lebih mudah untuk diselesaikan. Langkah-langkah umum algoritma Divide and Conquer :

Divide : Membagi masalah menjadi beberapa upa-masalah yang memiliki kemiripan dengan masalah semula namun berukuran lebih kecil ( idealnya berukuran hampir sama ).

Conquer : Memecahkan ( menyelesaikan ) masing-masing upa-masalah ( secara rekursif ).

Combine : Menggabungkan solusi masing-masing upa-masalah sehingga  membentuk solusi masalah semula.

    Objek masalah yang di bagi adalah masukan (input) atau instances yang berukuran n: tabel (larik), matriks, dan sebagainya, bergantung pada masalahnya. Tiap-tiap upa-masalah mempunyai karakteristik yang sama (the same type) dengan karakteristik masalah asal, sehingga metode Divide and Conquer lebih natural diungkapkan dalam skema rekursif. Sesuai dengan karakteristik pembagian dan pemecahan masalah tersebut, maka algoritma ini dapat berjalan baik pada persoalan yang bertipe rekursif (perulangan dengan memanggil dirinya sendiri). Dengan demikian, algoritma ini dapat diimplementasikan dengan cara iteratif ( perulangan biasa ), karena pada prinsipnya iteratif hampir sama dengan rekursif. Salah satu penggunaan algoritma ini yang paling populer adalah dalam hal pengolahan data yang bertipe array ( elemen larik ). Mengapa ? Karena pengolahan array pada umumnya selalu menggunakan prinsip rekursif atau iteratif. Penggunaan secara spesifik adalah untuk mencari nilai minimal dan maksimal serta untuk mengurutkan elemen array. Dalam hal pengurutan ini ada empat macam algoritma pengurutan yang berdasar pada algoritma Divide and Conquer, yaitu merge sort, insert sort, quick sort, dan selection sort. Merge sort dan Quick sort mempunyai kompleksitas algoritma O(n ²log n). Hal ini lebih baik jika dibandingkan dengan pengurutan biasa dengan menggunakan algoritma brute force.

C. Cara Kerja Algoritma Divide and Conqueror

Divide : artinya membagi masalah menjadi beberapa sub-masalah yang memiliki masalah dengan permasalahan semula namun lebih kecil dari sebelumnya atau sama dengan sebelumnya.

Conquer : artinya menyelesaikan masing-masing sub-masalah secara rekursif.

Combine : artinya menggabungkan solusi dari masing-masing sub-masalah sehingga dapat menyelesaikan masalah utama atau masalah awal.

Algoritma ini akan membagi n input menjadi k subset input yang berbeda (1<k≤n). Dari k subset input yang berbeda akan terdapat k submasalah, setiak submasalah mempunyai solusi masing-masing. Sehingga akan diperoleh subsolusi k. Kemudian, dari subsolusi k akan diperoleh solusi yang optimal atau solusi yang diharapkan.

Jika submasalah masih dianggap terlalu besar, maka metode Divide and Conquer dapat digunakan lagi secara berulang-ulang

Sabtu, 09 Oktober 2021

Praktikum Desain Web - Javascript

Nama    : Ilham Baihaqi

NPM    : 20312152

Kelas    : IF20E


1. The <script> tag / Demo1

<!doctype html> 

<html>


<head>

<meta charset="utf-8">

<title>Untitled Document</title>

</head>


<body>

<h2>JavaScript in Body</h2>

<p id="demo"></p>

<script>

document.getElementById("demo").innerHTML = "My First Javascript";

</script>

</body>

</html>

Hasil :

2. Window Alert

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>

<body>

<p>Click the button to display an alert box.</p>
<button onClick="myFunction()">Try it</button>
<script>
function myFunction(){
alert ("Hello! I am an alert box!");
}
</script>
</body>
</html>
Hasil :


3.  JS-Alert

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<script>
function validateForm() {
var x = documnet.forms["myForm"]["fname"].value;
if (x == ""){
alert ("Name must be filled out");
return false;
}
}
</script>
</head>

<body>
<h1> Js Alert</h1>
<form name="myForm" action="/action_page_post.php" onSubmit="return validateForm()" method="post">
Name: <input type="text" name="fname">
<input type="submit" value="Submit">
</form>
</body>
</html>

Hasil :


4. Validate Input

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>

<body>
<h2>JavaScript Can Validate Input</h2>

<p>Please input a number between 1 and 10:</p>
<input id="numb">
<button type="button" onClick="myFunction()">Submit</button>

<p id="demo"></p>
<script>
function myFunction() {
var x, text;
// Get tge value of the input field with id=numb"
x = document.getElementById("numb").value;
//If x is Not a Number or less than one or greater than 10
if (isNaN(x) || x < 1 || x > 10){
text = "Input not valid";
} else {
text = "Input OK";
}
document.getElementById("demo").innerHTML = text;
}
</script>
</body>
</html>

Hasil :


5. Scroll Top

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<style>
#myBtn {
display: none;
position: fixed;
bottom: 20px;
right: 30px;
z-index: 99;
border: none;
outline: none;
background-color: red;
color: white;
cursor: pointer;
padding: 15px;
border-radius: 10px;
}
#myBtn:hover {
background-color: #555;
}
</style>
</head>

<body>
<button onClick="topFunction()" id="myBtn" title="Go to top">Top</button>

<div style="background-color:black;color:white;padding:30px">Scroll Down</div>
<div style="background-color:lightgrey;padding:30px 30px 2500px">This example demonstrates how to create a "scroll to top" button that becomes visible when the user starts to scroll the page.</div>

<script>
// when the user scrolls down 20px from the top of the document, show the button
window.onscroll = function() {scrollFunction()};
function scrollFunction() {
if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) {
document.getElementById("myBtn").style.display = "block";
} else {
document.getElementById("myBtn").style.display = "none";
}
}

// When the user clicks on the button, scroll to the top of the document
function topFunction() {
document.body.scrollTop = 0;
document.documentElement.scrollTop = 0;
}
</script>
</body>
</html>

Hasil :









Praktikum Desain Web - CSS

                                     Latihan CSS Mata Kuliah Praktikum Desain Web

1. Membuat Alert button 

<!doctype html>

<html>

<head>

<meta charset="utf-8">

<title>Untitled Document</title>

<style>

.btn{

border: none;

color: white;

padding: 14px 28px;

cursor :pointer;

}

.sukses {background-color: #4caf50;} /*Green*/

.sukses:hover{background-color: #46a049;}

.info{background-color: #2196f3;} /*Blue*/

.info:hover {background: #0b7dda;}

.peringatan{background-color: #ff9800;} /*Orange*/

.peringatan:hover{background: #e68a00;}

.bahaya{background-color: #f44336;} /*Red*/

.bahaya:hover{background: #da190b;}

.semula{background-color: #e7e7e7; color: black;} /*Gray*/

.semula:hover{background:#ddd;}

</style>

</head>

<body>

<h1> Tombol Peringatan</h1>

<button class="btn sukses">Sukses</button>

<button class="btn info">Info</button>

<button class="btn peringatan">Peringatan</button>

<button class="btn bahaya">Bahaya</button>

<button class="btn Semula">Semula</button>

</body>

</html>


Hasil :


2. Membuat Tabel Form

<!doctype html>

<html>

<head>

<meta charset="utf-8">

<title>Untitled Document</title>

<style>

input[type=text],select{width: 100%;

padding: 12px 20px;

margin: 8px 0;

display: inline-block;

border: 1px solid #ccc;

border-radius: 4px;

box-sizing: border-box;}

input[type=submit]{width: 100%;

background-color: #4caf50;

color:white;

padding: 14 px 20px;

margin: 8px 0;

border: none;

border-radius: 4px;

cursor: pointer;

}

input[type=submit]:hover{background-color:#45a049;}

div{

border-radius: 5px;

background-color: #f2f2f2;

padding: 20px;

}

</style>

</head>

<body>

<h3>Using CSS to style an HTML Form</h3>

<div>

<form action="/action_page.php">

<label for="fname">First Name</label>

<input type="text" id="fname" name="firstname" placeholder="Your name...">

<label for="lname">Last Name</label>

<input type="text" id="lname" name="lastname" placeholder="Your last name...">

   

<label for="Country"></label>

<select id="country" name="country">

<option value="Australia">Australia</option>

<option value="Russia Federation">Russia Federation</option>

<option value="USA">USA</option>

</select>

<input type="submit"value="submit">

</form>

</div>

</body>

</html>


Hasil :



3. Membuat Table Navigation Bar

<!doctype html>

<html>

<head>

<meta charset="utf-8">

<title>Untitled Document</title>

<style>

body {font-family: arial;}

ul {list-style-type: none;

margin: 0;

padding: 0;

overflow: hidden;

background-color: #333;

   }

li {

float: left;

   }

li a 

   {

display: block;

color: white;

text-align: center;

padding: 14px 16px;

text-decoration: none;

   }

li a:hover:not(.active){background-color: #111}

.active {background-color: #4caf50;}

</style>

</head>

<body>


<ul>

<li><a href="home">Home</a></li>

<li><a href="#news">News</a></li>

<li><a href="contact">Contact</a></li>

<li style="float:right"><a class="active" href="#about">About</a></li>

</ul>

Hasil :


4. Membuat Dropdown Menu

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Dropdown</title>

    <style>

     body { font-family:arial; }

    ul {

      list-style-type: none;

      margin: 0;

      padding: 0;

      overflow: hidden;

      background-color: #333;

    }

    li {

      float: left;

    }

    li a, .dropbtn {

      display: inline-block;

      color: white;

      text-align: center;

      padding: 14px 16px;

      text-decoration: none;

    }

    li a:hover, .dropdown:hover, .dropbtn {

      background-color: red;

    }

    li.dropdown {

      display: inline-block;

    }

    .dropdown-content {

      display: none;

      position: absolute;

      background-color: #f9f9f9;

      min-width: 160px;

      box-shadow: 0px 8px 16px 0px rgba(0,0,0,0,2);

      z-index: 1;

    }

    .dropdown-content a {

      color: black;

      padding: 12px 16px;

      text-decoration: none;

      display: block;

      text-align: left;

    }

    .dropdown-content a:hover {background-color: #f1f1f1}

    .dropdown:hover .dropdown-content {

      display: block;

}

    </style>

</head>

<body>


    <ul>

        <li><a href="#home">Home</a></li>

        <li><a href="#news">News</a></li>

        <li class="dropdown">

            <a href="javascript:void(0)" class="dropbtn">Dropdown</a>

            <div class="dropdown-content">

                <a href="#">Link 1</a>

                <a href="#">Link 2</a>

                <a href="#">Link 3</a>

            </div>

        </li>

    </ul>

    

    <h3>Dropdown menu inside a navigation bar</h3>

    <p>hover over the dropdown link to see the dropdown menu </p>

</body>

</html>

Hasil :



Selasa, 05 Oktober 2021

Graph problems

Graf adalah konstruksi matematis abstrak yang digunakan untuk memodelkan masalah dunia nyata dengan membagi masalah menjadi satu set node yang terhubung. Kami menyebut setiap node sebagai simpul dan setiap koneksi sebagai tepi. Misalnya, peta kereta bawah tanah masng-masing titik mewakili stasiun, dan masing-masing garis mewakili rute antara dua stasiun

- Pengelompokan graf dapat didasarkan pada ada tidaknya sisi ganda atau sisi kalang, pada jumlah simpul,atau berdasarkan orientasi arah pada sisi.

  a. Berdasarkan ada tidaknya gelang atau sisi ganda pada suatu graph, secara umum  graf digolongkan menjadi dua jenis :

        1. Graf sederhana (simple graph)Graf yang tidak mengandung gelung maupun sisi ganda  dinamakan graph sederhana. Jaringan komputer merupakan contoh aplikasi graf sederhana.

      2. Graf tak-sederhana (unsimple graph/multigraph)Graf tak sederhana dibagi menjadi 2,yaitu graf ganda dan graf semu. Graf ganda ialah graf yang mengandung sisi ganda. Graf semu ialah graf yang mengandung gelang.

b. Berdasarkan jumlah simpul pada suatu graph, maka secara umum graph dapat digolongkan menjadi dua jenis:

       1. Graf Berhingga (Limited Graph)Graf berhingga adalah graph yang jumlah simpulnya, n, berhingga.

       2.Graf Tak-Berhingga (Unlimited Graph)Graf yang jumlah simpulnya, n, tidak berhingga             banyaknya disebut graph tak-berhingga.

 c. Berdasarkan orientasi arah pada sisi, maka secara umum graph dibedakan atas 2 jenis:

     1. Graph Tak-Berarah (Undirected Graph) Graph yang sisinya tidak mempunyai orientasi arah disebut graph tak-berarah.

     2. Graph Berhingga (Directed Graph) Graph yang setiap sisinya diberikan orientasi arah disebut sebagai graph berarah..

 

MASALAH GRAF

1.     Tingkat kerumitan yang cukup tinggi, meskipun isi dan teorinya terlihat sederhana 

2.     Harus menemukan rute terpendek (contoh kasus dalam kehidupan sehari-hari: peta/gps)

SOLUSI PEMECAHAN MASALAH GRAF

Setelah memiliki beberapa masalah yang belum terpecahkan maka untuk menemukan solusi yang tepat maka digunakanlah metode Algoritma Greedy. Karena kemungkinan akan memperoleh hasil yang cukup baik.

* Algoritma Greedy

Algoritma Greedy adalah jenis algoritma yang menggunakan langkah pendekatan penyelesaian masalah dengan cara membuat pilihan optimasi yang memungkinkan memiliki nilai yang paling mendekati nilai maksimal

Kelebihan dan Kekurangan dari Algoritma Greedy

  • Kekurangan : tidak akan mendapat nilai maksimum
  • Kelebihan : dapat memberikan solusi dalam waktu yang cepat dan memiliki nilai yang mendekati nilai maksimum

 

Source : https://tugasanalgo4blog.wordpress.com/2016/10/07/graph-problems/

                https://livebook.manning.com/book/classic-computer-science-problems-in-java/chapter-4/v-4/#:~:text=A%20graph%20is%20an%20abstract,of%20the%20connections%20an%20edge.

Minggu, 04 April 2021

Proses Design dan Life Cycle Basis Data - Tugas Rangkuman Sistem Basis Data

Design and Life Cycle Database


A) Life Cycle 

        Daur Hidup (Life Cycle) yang Umum dari Aplikasi Basis Data :

    • Systems Definition
    • Database Design
    • Implementation
    • Loading/Data Convertion
    • Konversi Aplikasi
    • Testing & Validasi
    • Operations
    • Control & Maintenance  

       Daur Hidup (Life Cycle) dari Aplikasi Basis Data :

             1) Definisi Sistem

    • ruang lingkup basis data
    • pemakai
    • aplikasi

            2) Design

    • logical design à ER/EER
    • physical design untuk suatu DBMS

            3) Implementasi

    • Membuat basis data
    • Membuat program aplikasi

            4) Loading/ Konversi Data

    • memasukkan data ke dalam basis data
    • mengkonversi file yang sudah ada ke dalam format basis data dan kemudian memasukkannya dalam basis data 

            5) Konversi Aplikasi

    • Semua aplikasi dari sistem sebelumnya dikonversikan ke dalam sistem basis data.

            6) Testing dan Validasi

    • Sistem yang baru harus ditest dan divalidasi (diperiksa keabsahannya).

             7) Operasi

    • Pengoperasian basis data dan aplikasinya.

            8) Monitoring dan Maintenance:

    • Selama operasi, sistem dimonitor dan diperlihara. Baik data maupun program aplikasi masih dapat terus tumbuh dan berkembang.

B) Database Design

    1) Proses Design Sistem Basis Data

        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 operasi komputer
    • Program-program aplikasi Pemrogram, dll.

        Keenam phase dalam proses design tidak perlu dilaksanakan secara mutlak, mungkin ada             umpan balik antar phase dan dalam masing-masing phase







Sistem Operasi : Process Synchronization

Sistem Operasi : Process Synchronization

 

PENGERTIAN SINKRONISASI

 Sinkronisasi merupakan suatu proses pengaturan jalannya beberapa proses pada waktu yang bersamaan untuk menyamakan waktu dan data supaya tidak terjadi inconsitensi (ketidak konsistenan) data akibat adanya akses data secara konkuren agar hasilnya bagus dan sesuai dengan apa yang diharapkan. Disini sinkronisasi diperlukan agar data tersebut tetap konsisten.
 Shared memory merupakan solusi ke masalah bounded-butter yang mengijinkan paling banyak n-1 materi dalam buffer pada waktu yang sama. Suatu solusi, jika semua N buffer digunakan tidaklah sederhana. Dimisalkan kita memodifikasi producer-consumer code dengan menambahkan suatu variable counter, dimulai dari 0 dan masing-masing waktu tambahan dari suatu item baru diberikan kepada buffer. Sinkronisasi merupakan “issue” penting dalam rancangan/implementasi OS (shared resources, data, dan multitasking).

TUJUAN SINKRONISASI

Tujuan dari sinkronisasi itu sendiri ialah untuk menghindari terjadinya inkonsistensi data karena pengaksesan oleh beberapa proses yang berbeda serta untuk mengatur urutan jalannya proses-proses sehinga dapat dapat berjalan dengan baik dan sesuai dengan apa yang diharapkan.

Sama seperti yang kita ketahui bahwa hidup saling berkaitan satu sama lain. Begitu juga sinkronisasi pada system operasi. Jika hal ini tidak ada penopang dalam menjalanka suatu system, maka akan menemui suatu kendala yang berakibat ketidak konsistenan pada data, sehingga data tidak menjadi konkrun.

 

Manfaat Sinkronisasi

Bermanfaat untuk menyimpan data, baik sementara atau permanen sehingga memudahkan pekerjaan.

Jadi dengan menggunakan system pekerjaan ini anda akan lebih terbantu dan lebih efektif karena bias menghemat waktu.

 

MASALAH DALAM SINKRONISASI BESERTA SOLUSINYA


 1. Race Condition
 Race Condition adalah situasi di mana beberapa proses mengakses dan memanipulasi data bersama pada saat besamaan. Nilai akhir dari data bersama tersebut tergantung pada proses yang terakhir selesai. Untuk mencegah race condition, proses-proses yang berjalan besamaan harus di disinkronisasi.
 Dalam beberapa sistem operasi, proses-proses yang berjalan bersamaan mungkin untuk membagi beberapa penyimpanan umum, masing-masing dapat melakukan proses baca (read) dan proses tulis (write). Penyimpanan bersama (shared storage) mungkin berada di memori utama atau berupa sebuah berkas bersama, lokasi dari memori bersama tidak merubah kealamian dari komunikasi atau masalah yang muncul. Untuk mengetahui bagaimana komunikasi antar proses bekerja, mari kita simak sebuah contoh sederhana, sebuah print spooler. Ketika sebuah proses ingin mencetak sebuah berkas, proses tersebut memasukkan nama berkas ke dalam sebuah spooler direktori yang khusus. Proses yang lain, printer daemon, secara periodik memeriksa untuk mengetahui jika ada banyak berkas yang akan dicetak, dan jika ada berkas yang sudah dicetak dihilangkan nama berkasnya dari direktori.


     2. Critical Section
        Kunci untuk mencegah masalah ini dan di situasi yang lain yang melibatkan shared memori, shared berkas, and shared sumber daya yang lain adalah menemukan beberapa jalan untuk mencegah lebih dari satu proses untuk melakukan proses writing dan reading kepada shared data pada saat yang sama. Dengan kata lain kita memutuhkan mutual exclusion, sebuah jalan yang menjamin jika sebuah proses sedang menggunakan shared berkas, proses lain dikeluarkan dari pekerjaan yang sama. Kesulitan yang terjadi karena proses 2 mulai menggunakan variabel bersama sebelum proses 1 menyelesaikan tugasnya.
     Masalah menghindari race conditions dapat juga diformulasikan secara abstrak. Bagian dari waktu, sebuah proses sedang sibuk melakukan perhitungan internal dan hal lain yang tidak menggiring ke kondisi race conditions. Bagaimana pun setiap kali sebuah proses mengakses shared memory atau shared berkas atau melakukan sesuatu yang kritis akan menggiring kepada race conditions. Bagian dari program dimana shaed memory diakses disebut Critical Section atau Critical Region.
Walau pun dapat mencegah race conditions, tapi tidak cukup untuk melakukan kerjasama antar proses secara pararel dengan baik dan efisien dalam menggunakan shared data. Kita butuh 4 kondisi agar menghasilkan solusi yang baik:
• Tidak ada dua proses secara bersamaan masuk ke dalam citical section.
• Tidak ada asumsi mengenai kecepatan atau jumlah cpu.
• Tidak ada proses yang berjalan di luar critical secion yang dapat mengeblok proses lain.
• Tidak ada proses yang menunggu selamamya untuk masuk critical section.
Critical Section adalah sebuah segmen kode di mana sebuah proses yang mana sumber daya bersama diakses. Terdiri dari:


1) Entry Section: kode yang digunakan untuk masuk ke dalam critical section
2) Critical Section: Kode di mana hanya ada satu proses yang dapat dieksekusi pada satu waktu
3) Exit Section: akhir dari critical section, mengizinkan proses lain
4) Remainder Section: kode istirahat setelah masuk ke critical section.

3. Solusi ke Masalah Critical-Section
Ada bebrapa Solusi untuk mengatasi masalah Critical Section, yaitu:
• Mutual exclution
Jika proses pi sedang mengeksekusi critical section-nya maka tidak ada proses lain yang dapat mengeksekusi dalam critical section mereka.


• Progress
Jika tidak ada proses yang sedang dieksekusi dalam critical section  dan ada beberapa proses yang ingin masuk ke critical section mereka, maka pemilihan proses yang akan masuk ke critical section berikutnya tidak bias ditunda.


• Bounded Waiting
Suatu keterikatan harus ada pada sejumlah proses yang diijinkan masuk ke critical section mereka, setelah adanya proses yang meminta masuk ke critical section dan sebelum  permintaan itu diterima.
a. Asumsikan bahwa tiap proses mengeksekusi pada nonzero speed.
b. Tidak ada asumsi mengenai kecepatan relative dan n proses.

Cara-cara memecahkan masalah
• Hanya dua proses, Po dan P1
• Struktur umum dari proses adalah Pi (proses lain Pj)

 4. Bakery Algorithm
Critical section untuk n proses:
a). Sebelum memasuki critical Section-nya, proses menerima nomor pemilik nomor terkecil memasuki critical section.
b). Jika proses Pi dan Pj menerima nomor yang sama, jika i < j, maka Pi dilayani duluan, lainnya Pj dilayani duluan (if i< j, then Pi is served first; else Pj is served first).
c). Skema penomoran selalu menghasilkan angka –angka yang disebutkan satu per satu, yaitu 1,2,3,3,3,3,4,5….

5. Semaphore
Semaphore adalah pendekatan yang diajukan oleh Djikstra, dengan prinsip bahwa dua proses atau lebih dapat bekerja sama dengan menggunakan penanda-penanda sederhana. Seperti proses dapat dipaksa berhenti pada suatu saat, sampai proses mendapatkan penanda tertentu itu. Sembarang kebutuhan koordinasi kompleks dapat dipenuhi dengan struktur penanda yang cocok untuk kebutuhan itu.Variabel khusus untuk penanda ini disebut semaphore.


Semaphore mempunyai dua sifat, yaitu:
a. Semaphore dapat diinisialisasi dengan nilai non-negatif.
b. Terdapat dua operasi terhadap semaphore, yaitu Down dan Up. Usulan asli yang disampaikan Djikstra adalah operasi P dan V.


• Operasi Down
Operasi ini menurunkan nilai semaphore, jika nilai semaphore menjadi non-positif maka proses yang mengeksekusinya diblocked. Operasi Down adalah atomic, tidak dapat diinterupsi sebelum diselesaikan. Menurunkan nilai, memeriksa nilai, menempatkan proses pada antrian dan memblocked sebagai instruksi tunggal. Sejak dimulai, tidak ada proses lain yang dapat mengakses semaphore sampai operasi selesai atau diblocked.


• Operasi Up
Operasi Up menaikkan nilai semaphore. Jika satu proses atau lebih diblocked pada semaphore itu tidak dapat menyelesaikan operasi Down, maka salah satu dipilih oleh system dan menyelesaikan operasi Down-nya. Urutan proses yang dipilih tidak ditentukan oleh Djikstra, dapat dipilih secara acak. Adanya semaphore mempermudah persoalan mutual exclusion. Skema penyelesaian mutual exclusion mempunyai bagian sebagai berikut:
Sebelum masuk critical section, proses melakukan Down. Bila berhasil maka proses masuk ke critical section. Bila tidak berhasil maka proses di-blocked atas semaphore itu. Proses yang diblocked akan dapat melanjutkan kembali bila proses yang ada di critical section keluar dan melakukan opersai up sehingga menjadikan proses yang diblocked ready dan melanjutkan sehingga opersi Down-nya berhasil.



6. Problem Klasik pada Sinkronisasi
Ada tiga hal yang selalu menjadi masalah pada proses sinkronisasi:
a. Problem Bounded buffer.
b. Problem Reades and Writer.
c. Problem Dining Philosophers.

 7. Monitors
 Solusi sinkronisasi ini dikemukakan oleh Hoare pada tahun 1974. Monitor adalah kumpulan prosedur, variabel dan struktur data di satu modul atau paket khusus. Proses dapat memanggil prosedur-prosedur kapan pun diinginkan. Tapi proses tidak dapat mengakses struktur data internal dalam monitor secara langsung. Hanya lewat prosedur-prosedur yang dideklarasikan minitor untuk mengakses struktur internal.


Properti-properti monitor adalah sebagai berikut:
a). Variabel-variabel data lokal, hanya dapat diakses oleh prosedur-prosedur dalam monitor dan tidak oleh prosedur di luar monitor.


b). Hanya satu proses yang dapat aktif di monitor pada satu saat. Kompilator harus mengimplementasi ini(mutual exclusion).


c). Terdapat cara agar proses yang tidak dapat berlangsung di-blocked. Menambahkan variabel-variabel kondisi, dengan dua operasi, yaitu Wait dan Signal.


d). Wait: Ketika prosedur monitor tidak dapat berkanjut (misal producer menemui buffer penuh) menyebabkan proses pemanggil diblocked dan mengizinkan proses lain masuk monitor.


e). Signal: Proses membangunkan partner-nya yang sedang diblocked dengan signal pada variabel kondisi yang sedang ditunggu partnernya.


f). Versi Hoare: Setelah signal, membangunkan proses baru agar berjalan dan menunda proses lain.


g). Versi Brinch Hansen: Setelah melakukan signal, proses segera keluar dari monitor.Dengan memaksakan disiplin hanya satu proses pada satu saat yang berjalan pada monitor, monitor menyediakan fasilitas mutual exclusion. Variabel-variabel data dalam monitor hanya dapat diakses oleh satu proses pada satu saat. Struktur data bersama dapat dilindungi dengan menempatkannya dalam monitor. Jika data pada monitor merepresentasikan sumber daya, maka monitor menyediakan fasilitas mutual exclusion dalam mengakses sumber daya itu.

 

 

KESIMPULAN

 Sinkronisasi adalah proses pengaturan jalannya beberapa proses pada saat yang bersamaan. Tujuan utama sinkronisasi adalah menghindari terjadinya inkonsistensi data karena pengaksesan oleh beberapa proses yang berbeda (mutualexclusion) serta untuk mengatur urutan jalannya proses-proses sehingga dapat berjalan dengan lancar dan terhindar dari deadlock atau starvation.
Sinkronisasi umumnya dilakukan dengan bantuan perangkat sinkronisasi.Beberapa perangkat sinkronisasi, yaitu : TestAndSet(), Semafor, dan Monitor.