Thursday, January 5, 2023

Implementasi Algoritma Branch & Bound

 

Nama   : Saiful Bahri Si Jabat

Npm    : 21312087

Kelas   : IF 21 B


Implementasi Algoritma Branch & Bound Pada Masalah Knapsack


Gambar 1.1 Implementasi



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

Monday, December 12, 2022

Divide and Conquer_SaifulBahriSiJabat_21312087_IF21B

Nama    : Saiful Bahri Si Jabat

Npm      : 21312087

Kelas    : IF 21 B


Implementasi Algoritma Divide and Conquer Pada Sorting dan Searching 


1.   Implementasi Algoritma Divide and Conquer Merge sort

Beberapa algoritma mengimplementasikan konsep rekursi untuk menyelesaikan permasalahan. Permasalahan utama kemudian dipecah menjadi sub-masalah, kemudian solusi dari sub-masalah akan membimbing menuju solusi permasalahan utama.

Pada setiap tingkatan rekursi, pola tersebut terdiri atas 3 langkah.

1. Divide

    Memilah masalah menjadi sub masalah

2. Conquer

    Selesaikan sub masalah tersebut secara rekursif. Jika sub-masalah tersebut cukup ringkas dan sederhana, pendekatan penyelesaian secara langsung akan lebih efektif

3. Kombinasi

    Mengkombinasikan solusi dari sub-masalah, yang akan membimbing menuju penyelesaian atas permasalahan utama

Seperti yang telah dijelaskan sebelumnya, Merge sort menggunakan pola divide and conquer. Dengan hal ini deskripsi dari algoritma dirumuskan dalam 3 langkahberpola divide-and-conquer. Berikut menjelaskan langkah kerja dari Merge sort.

1. Divide

    Memilah elemen – elemen dari rangkaian data menjadi dua bagian.

2. Conquer

    Conquer setiap bagian dengan memanggil prosedur merge sort secara rekursif

3. Kombinasi

    Mengkombinasikan dua bagian tersebut secara rekursif untuk mendapatkan rangkaian data berurutan

Proses rekursi berhenti jika mencapai elemen dasar. Hal ini terjadi bilamana bagian yang akan diurutkan menyisakan tepat satu elemen. Sisa pengurutan satu elemen tersebut menandakan bahwa bagian tersebut telah terurut sesuai rangkaian.


2.  Implementasi Algoritma Divide and Conquer 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

    Quick sort melakukan proses langsung di dalam array masalah sehingga tidak memerlukan memory tambahan untuk menyimpan submasalah. Merge sort melakukan sebaliknya.

Teknik quick sort sebagai berikut:

· Mempartisi table sehingga diasumsikan pengurutan dari kiri ke kanan

· Elemen T[i] berada di tempat yang benar

· Tidak ada elemen yang lebih besar nilainya di kiri i

· Tidak ada elemen yang nilainya lebih kecil di kanan i

· Partisi tabel (secara implisit juga melakukan pengurutan tabel). Jika belum urut, partisi kembali partisi dari table (rekursif)

· Gabungkan semua partisi.


3. Implementasi Algoritma Divide and Conquer Sequential Sort

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.

Sequential search Dikenal sebagai linear search Mencari key(info yang dicari) pada suatu data tak terurut hingga data di temukan atau data sudah mencapai akhir larik

Syarat menggunakan sekuential search adalah :

• Data tersimpan dalam keadaan terurut

• Pencarian secara ascending atau descending

• Alamat terakhir(P1) dari larik (P) adalah =  0<= P1 <= P-1


4. Implementasi Algoritma Divide and Conquer 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:

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

Range data diketahui

Ada 3 macam array yang terlibat:

Array untuk mengisi bilangan yang belum diurutkan.

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

Array untuk mengisi bilangan yang sudah diurutkan.


5.   Implementasi Algoritma Divide and Conquer 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.


6.   Implementasi Algoritma Divide and Conquer 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.


7.    Implementasi Algoritma Divide and Conquer Linier Searhing

    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.


8.   Implementasi Algoritma Divide and Conquer Binary Searching

    Algoritma pencairan secara linear melakukan pengulangan sebanyak 1 kali untuk kasus terbaik (value sama dengan elemen pertama dalam tabel) dan Nmax kali untuk kasus terburuk. Sehingga algoritma ini mempunyai kompleksitas algoritma O(n).

    Algoritma pencarian biner adalah algoritma untuk mencari sebuah nilai pada tabel teurut dengan cara menghilangkan setengah data pada setiap langkah. Algoritma ini mencari nilai yang dicari dengan tiga langkah yaitu :

• Mencari nilai tengah dari tabel (median).

• Melakukan perbandingan nilai tengah dengan nilai yang dicari untuk menentukan apakah nilai yang dicari ada pada sebelum atau setelah nilai tengah.

• Mencari setengah sisanya dengan cara yang sama.


Wednesday, December 7, 2022

TUGAS11_SAIFULBAHRISIJABAT_21312087_IF21B

     Nama  : Saiful Bahri Si Jabat

     Npm    : 21312087

     Kelas   : IF 21 B

     Matakuliah    : Analisis Dan Strategi Algoritma


SOAL:

    1. Pengertian Sejarah?

    2. Definisi?

    3. Cara Kerja Algoritma Divide and Conquer?



JAWABAN:

Pengertian Sejarah:

     Sejarah merupakan hal yang tidak bisa dilepaskan dari peradaban manusia yang terus berkembang dan berevolusi. Sebagai makhluk yang hidupnya dinamis, manusia akan menciptakan sejarah dan kemudian bermanfaat bagi kehidupan sekarang dan masa datang. 


1. Pengertian Sejarah Secara Etimologi

    Sejarah secara etimologi berasal dari kata bahasa Arab syajaratun yang artinya pohon dan dalam bahasa Arab sendiri sejarah disebut dengan tarikh. Pohon memiliki makna percabangan geneologis suatu kelompok keluarga yang menyerupai pohon yang penuh cabang, ranting sampai akar-akarnya. Kata syajaratun dalam bahasa Arab kemudian berkembang dalam bahasa Melayu menjadi syajarah. 

Sampai akhirnya menjadi istilah sejarah dalam bahasa Indonesia saat ini untuk menggambarkan silsilah atau keturunan. Pengertian kata sejarah sebenarnya lebih sesuai dengan kata historia dalam bahasa Yunani yang artinya keilmuan, ilmu, atau orang pandai. Kemudian dalam bahasa Inggris menjadi kata History dari kata istoria yang artinya belajar dengan cara bertanya. 

Dari kata istoria inilah istilah sejarah kemudian berkembang menjadi sebuah kajian ilmu dan pembelajaran yang sifatnya  kronologis atau dikaji berdasarkan dengan tempo atau urutan waktu. Sejarah merujuk bahasa Jerman dari kata Geschichte dan geschidenis atau historie dalam bahasa Belanda yang artinya kejadian yang dibuat oleh manusia.    


2. Pengertian Sejarah Menurut Para Ahli

    a. H. Wals

    Pengertian sejarah menurut W.H Walsh adalah catatan yang penting dan berarti bagi manusia berupa pencatatan tindakan-tindakan dan pengalaman manusia di masa lampau. Catatan tersebut berisi hal-hal penting sehingga menjadi cerita yang berarti bagi manusia. 

    b. J.V. Bryce

    J.V Bryce berpendapat bahwa sejarah adalah suatu catatan yang berisi pikiran, perkataan, dan hal-hal lainnya yang telah diperbuat oleh manusia di masa lalu.

    c. W.J.S Poerwadarminta

    Pengertian sejarah menurut W.J.S Bryce adalah seluruh kesusastraan lama, asal usul, dan silsilah. Ia juga mengungkapkan bahwa sejarah berkaitan dengan kejadian yang benar-benar terjadi di masa lalu yang kemudian menjadi kajian ilmu ilmu pengetahuan sebagai ceita pembelajaran. 

    d. Norman E. Cantor

    Norman E. Cantor berpendapat bahwa sejarah adalah suatu pembelajaran atau studi tentang apa yang telah dilakukan, dikatakan, dan dipikirkan oleh manusia di masa lalu. 


3. Pengertian Sejarah Sebagai Kisah

    Sebagai kisah, sejarah adalah kejadian- kejadian di masa lalu yang berusaha di bangun kembali. Kemudian banyak orang yang mencona mendefinisiskan dan menafsirkan sesuatu dari ingatan-ingatan di masa lalu. Sejarah tersebut kemudian dihadirkan berdasarkan ingatan individu maupun seseorang sebagai makhluk sosial. Ingatan kejadin tersebut kemudian disusun secara sistematis dan ilmiah berdasarkan fakta pada masa tertentu.

    Fakta yang ada dalam sejarah tersebut ditampilkan dengan tafsiran yang jelas dan terperinci sehingga tidak memberi pendefinisian yang membingungkan atau justru mengalihkan fakta yang sebenarnya terjadi di masa lalu tersebut. Kisah dari ingatan-ingatan itu kemudian dibuat dari berbagai sumber untuk akhirnya ditafsirkan. Penafsiran tersebut kemudian disampaikan kembali kepada generasi selanjutnya yang tidak sempat mengalami atau menyaksikan kisah tersebut. Penyampaian kisah ini biasanya disesuaikan dengan konteks zaman agar lebih mudah memahaminya. 


4. Pengertian Sejarah Sebagai Peristiwa

Sebagai peristiwa, sejarah adalah sebuah fakta yang muncul di masa lalu yang merupakan kejadian nyata dan benar-benar terjadi pada masa tertentu. Sejarah inilah yang menyajikan gambaran peristiwa tersebut secara lebih spesifik. Fakta peristiwa tersebut kemudian disusun secara ilmiah yang didalamnya menggambarkan kejadian pada waktu tertentu dan ditafsirkan, dianalisis secara kritis agar lebih mudah di pahami. 

Sebenarnya manusia tidak bisa sepenuhnya mengingat seluruh kejadian di masa lalu yang pernah dialami, itulah sebabnya banyak peristiwa sejarah yang tidak terungkap seutuhnya. Biasanya untuk merekam sejarah banyak menggunakan tulisan sebagai medianya. Tulisan tersebut dapat menjadi bukti konkret atas sejarah dibandingkan hana ucapan verbal saja. Hasil tulisan sejarah tersebut kemudian dapat dijadikan sumber pengetahuan untuk diteliti, dianalisis, atau dikembangkan lagi.  


Unsur Unsur Sejarah

1. Manusia

Manusia adalah unsur penting dalam lahirnya sebuah sejarah karena sangat menentukan peristiwa sejarah. Manusia memiliki peran penting dalam kemunculan sejarah karena umumnya sejarah bercerita tentang tindakan atau tingkah laku manusia dalam bidang apapun, bukan berdasarkan perspektif binatang ataupun alam.  Hal ini terjadi karena sejarah itu sendiri tercipta memang untuk manusia. 

Tindakan manusia dan segala jalan yang ada pada manusia kemudian menjadi penentu terbentuknya sejarah dalam ruang dan waktu tertentu. Hal ini sesuai dengan pendapat Emst Berheim yang mengungkapkan bahwa manusia adalah objek sejarah. Sejarang akan bergantung pada manusia dan lingkungan yang mengitarinya untuk menentukan sejarah itu berlangsung cepat atau lama. 

2. Waktu

Waktu atau periode menjadi unsur yang tidak kalah pentingnya karena konsep sejarah mengulas tentang kegiatan manusia pada kurun waktu tertentu. Kurun waktu nilah yang menjadi batasan sejarah itu dimulai atau diakhiri secara sistematis dan jelas. Unsur waktu menunjukan bagaimana manusia menggunakan waktu untuk melakukan sesuatu sesuai dengan apa yang mereka inginkan. Jadi waktu tidak bisa dipisahkan dari kesadaran manusia sebagai makhluk hidup yang dinamis. 

Peristiwa yang dialami manusia ini kemudian disajikan dalam sejarah berdasarkan urutan waktu. Hal ini yang menandakan bahwa sejarah memang bersifat kronologis yang lekat dengan periodis atau keterlibatan waktu yang jelas di dalamnya. Mengapa perlu keterlibatan waktu yang jelas? Karena waktu memiliki tiga dimensi yang menentukan kehidupan manusia, yakni masa lalu, sekarang, dan akan datang.  

3. Ruang

Ruang sebagai unsur sejarah yang dimaksud adalah tempat yang merujuk aspek letak geografis suatu kejadian yang dialami manusia. Aktivitas yang dilakukan manusia pada waktu tertentu pasti berada pada ruang tertentu pula. Keterlibatan ruang yang jelas inilah yang akan mempermudah pembaca generasi selanjutnya bisa memahami dengan utuh sebuah peristiwa sejarah yang real terjadi. 

Menurut teori Determinisme Geografis, ruang dan peristiwa memiliki hubungan yang erat karena faktor geografis menjadi penentu jalannya sebuah peristiwa sejarah. Itulah sebabnya sejarah selain bisa dikategorikan berdasarkan waktu, maka bisa pula dikategorikan berdasarkan tempat atau lokasi kejadian sejarah tersebut terjadi. Misalnya sejarah Negara, daerah, benua, sampai sejarah dunia. 

4. Kausalitas

Sejarah yang bersifat deskriptif maka perlu ditampilkan dengan susunan fakta apa, siapa, kapan, dmana, dan bagaimana dalam penafsirannya. Data deskriptif itulah yang akan memacu keingintahuan pada peristiwa sejarah tertentu agar terpenuhi. Contohnya penggunaan pertanyaan bagaimana akan terjawab keterangan- keterangan sebab peristiwa sejarah itu terjadi meskipun hanya dihadirkan dengan cara implisit bukan eksplisit.  


Fungsi Sejarah

1. Fungsi Intrinsik

  • Sejarah sebagai kajian ilmu kemudian terus berkembang melalui perspektif filsafat agar terus tercipta sejarah-sejarah baru. Perkembangan teori sejarah juga berpengaruh pada perkembangan ilmu-ilmu lain, termasuk di dalamnya perkembangan metode sejarah
  • Sejarah sebagai upaya mengenal masa lalu, bersamaan dengan bumbu mitos sejarah kemudian menjadi alat yang tepat untuk memahami masa lalu
  • Sejarah untuk menyatakan pendapat membuat banyak penulis sejarah atau sejarawan menggunakan ilmunya untuk mengungkapkan sesuatu
  • Sejarah dapat menjadi profesi, yakni sebagai penulis atau peneliti sejarah atau yang diakui sebagai sejarawan

2. Fungsi Ekstrinsik

Fungsi ekstrinsik dari sejarah adalah memberikan kebermanfaatan untuk banyak orang melalui perkembangan ilmu lain. Sejarah kemudian masuk ke semua lini kajian ilmu untuk mengungkapkan pengetahuan kepada orang banyak. Misalnya ilmu pendidikan, filsafat, moral, etika, estetika atau seni, sampai ilmu eksakta.


MANFAAT SEJARAH BAGI KEHIDUPAN

1. Peneguh Hati

Setiap manusia memerlukan ketenangan dan keteguhan hati untuk menjalani hidup, maka dengan penguasaan sejarah manusia bisa lebih memaknai apa yang sedang ia lakukan saat itu secara sadar. 

2. Bermanfaat Untuk Pengajaran

Sejarah dapat menjadi pelajaran bagi manusia untuk melakukan sesuatu di masa depan atau sebagai pertimbangan untuk mengambil keputusan. Sejarah secara pribadi dapat dimaknai sebagai pengalaman hidup ruang, waktu, meskipun mungkin bukan dia yang mengalaminya. Sejarah bisa menjadi sumber informasi bagi seseorang untuk mengenal banyak hal yang bisa mempengaruhi jalan hidupnya. 

3. Sebagai Peringatan

Sejarah mewakili peristiwa yang pernah terjadi masa lalu, baik yang sifatnya positif atau negative itu tetap bernama sejarah yang sudah terjadi. Hal tersebut dapat mengingatkan seseorang untuk memetik sinyal dalam situasi tertentu berdasarkan kejadian yang sudah pernah terjadi. 

4. Sebagai Sumber Kebenaran

Setiap manusia pasti membutuhkan kebenaran untuk menjalankan kehidupannya, maka sejarahlah yang membuktikan bahwa seseorang harus memahami sesuatu agar bisa bertahan hidup. Sejarah dapat berguna sebagai pemenuhan kebutuhan intelektual manusia sebagai makhluk berakal dan terus berpikir dinamis. 

5. Bermanfaat Untuk Masa Depan

Sejarah selain menjadi sumber informasi juga dapat menjadi inspirasi dan instruksi untuk menjalani kehidupan di masa datang. Ada pepatah yang mengatakan bahwa sejarah atau masa lalu adalah pelajaran berharga untuk berkembang di masa depan. Jadi seseorang bisa menggunakan pengalamannya untuk menentukan masa depannya. 


Pengertian Definisi

    Definisi adalah sebuah pernyataan terhadap ciri-ciri penting dari suatu hal, biasanya akan lebih kompleks dari arti, makna, atau pengertian dari suatu hal.


Pengertian Definisi Menurut Para Ahli

  1. Menurut Soedjadi

    Konsep berarti sebuah ide abstrak yang memungkinkan bisa di gunakan demi keperluan klasifikasi atau penggolongan yang secara umum dapat di tuangkan pada suatu istilah atau suatu rangkaian kata (lambang bahasa).

  2. Menurut Wikipedia

    Definisi Merupakan sebuah batasan atau arti, bisa juga dimaknai dengan kata, frasa, atau kalimat yang bermakna, keterangan, atau ciri utama dari orang, benda, proses, atau aktivitas.

  3. Menurut Kamus Besar Bahasa Indonesia

    Definisi adalah rumusan mengenai ruang lingkup dan ciri-ciri sebuah konsep yang menjadi bahan utama pembicaraan atau studi.


Tujuan Definisi

Adalah untuk memberi sebuah batasan atau sebuah makna pada sebuah istilah sehingga dapat menghasilkan kesepakatan bagi masyarakat secara global.


Jenis-Jenis Definisi

Berikut dibawah ini macam-macam definisi, yaitu :

  1. Nominal

    Definisi nominal adalah sebuah kerangka definisi yang sangat sederhana dan hanya sementara, karena pada ini menjelaskan arti dari etimologis atau sinonim dengan beberapa konsep yang akan dijelaskan.

  2. Formal

    Definisi formal adalah sebuah kerangka dari terminologis yang berdasarkan dengan logika yang formal dibeberapa unsur sehingga hal ini akan mempunyai struktur pada bentuk fitur yang paling sempurna.

  3. Operasional

    Definisi operasional adalah sebuah kerangka dari sebuah istilah yang menyughukan langkah-langkah khusus yang perlu dilakukan atau menggunakan metode pengukuran dan memberikanhasil yang akan diamati dengan sifat kuantitatif.

  4. Paradigmatis

    Definisi paradigmatis adalah sebuah kerangka yang bertujuan untuk mempengaruhi pola pikir orang-orang berdasarkan dari jenis pendapatan dan nilai tertentu sehingga jenis ini bisa mengatur sesuai dengan definisi.

  5. Secara Luas

    Definisi luas adalah sebuah kerangka yang mempunyai batasan paragraf yang akan diperlukan untuk konsep yang rumit sehingga bisa di diartikan dalam kalimat yang pendek.


Ciri-Ciri Definisi

Berikut dibawah ini ciri ciri dari definisi, yaitu :

  1. Definiendum

    Definiendum adalah suatu unsur istilah atau sebuah kata yang dijabarkan.

  2. Definiens

    Definiens adalah suatu unsur rangkaian kata atau frasa atau kalimat yang fungsinya menguraikan pengertian.


Syarat-Syarat Definisi

  1. Harus menyatakan karakteristik penting dari apa yang akan dijelaskan serta karakteristik khusus atau penting.
  2. Haruslah persamaan makna dengan hal-hal yang memiliki makna, yang berarti bahwa ruang lingkup makna tidak terlalu sempit atau terlalu luas.
  3. Harus menghindari pernyataan yang mengandung istilah yang memiliki makna, yang berarti tidak boleh berbelok, tidak boleh rumit secara langsung atau tidak langsung pada subjek yang didefinisikan.
  4. Itu harus dinyatakan sebanyak mungkin dalam formulasi positif, sebisa mungkin menghindari pernyataan negatif.
  5. Itu harus dinyatakan dengan tepat, singkat dan jelas, dengan perkecualian kata-kata yang kabur dan ambigu, tidak bisa menggunakan bahasa kiasan. Karena, tujuan melakukannya dari suatu istilah adalah untuk memberikan penjelasan dan menghilangkan makna ganda, kemudian menggunakan istilah yang samar atau ambigu dapat menghalangi niat.


Cara Kerja Algoritma Divide and Conquer

    Algoritma Divide and Conquer adalah algoritma pemecahan masalah dengan cara membagi masalah kedalam bagian-bagian kecil, kemudian menyelesaikan masalah tersebut dari bagian yang paling rendah / bawah. Contoh kasus yang akan dibahas kali ini adalah teknik pengurutan data menggunakan Merge Sort.

Langkah pertama adalah memasukkan data-data yang digunakan.
Contoh data adalah sebagai berikut:


Dim randomNumber As New Random
Dim data(19) As Integer
Dim s As String = ""
For i As Integer = 0 To 19
	data(i) = randomNumber.Next(0, 99)
	s = s & data(i) & IIf(i <> 19, ", ", "")
Next


A. Teknik Bubble Sort

Bubble sort adalah teknik pengurutan dengan cara membandingkan semua kemungkinan data,
Teknik pengurutan ini adalah pengurutan yang paling mudah, namun paling tidak efisien

Dim bubbleSort(19) As Integer
For i As Integer = 0 To 19
	bubbleSort(i) = data(i)
Next

Dim totBubbleSort As Integer = 0
Dim tmpdata As Integer = 0
For i As Integer = 0 To 19
	For j As Integer = 0 To 19
		If i <> j And bubbleSort(i) > bubbleSort(j) Then
			tmpdata = bubbleSort(i)
			bubbleSort(i) = bubbleSort(j)
			bubbleSort(j) = tmpdata
		End If
		totBubbleSort += 1
	Next
	totBubbleSort += 1
Next


B. Teknik Merge Sort

Merge sort adalah teknik pengurutan yang lebih efisien
Dalam kasus ini, teknik ini akan dilakukan dengan menggunakan algoritma Divide and Conquer
Pengurutan akan dilakukan di dalam fungsi MergeSort

Dim dataMergeSort(19) As Integer
For i As Integer = 0 To 19
	dataMergeSort(i) = data(i)
Next

MergeSort(dataMergeSort)

Langkah-langkah penggunaan algoritma ini adalah:


1. Tentukan konstanta pembagian data

    Seberapa banyak data akan dibagi pada setiap prosesnya
Diasumsikan dalam kasus ini, data akan dibagi menjadi 2 bagian, yaitu bagian kiri dan kanan
Jadi pada setiap perhitungan nya hanya ada 2 proses, yaitu pengurutan data untuk data bagian kiri dan kanan

Dim mid As Integer = (UBound(data) + 1) / 2



2. Lakukan proses pembagian data pada bagian kiri jika jumlah data nya masih lebih dari 2

Dim mergeSortLeft() As Integer
ReDim mergeSortLeft(mid - 1)
For i As Integer = 0 To mid - 1
	mergeSortLeft(i) = data(i)
Next
totMergeSort += 1
MergeSort(mergeSortLeft)



3. Lakukan proses pembagian data pada bagian kanan jika jumlah data nya masih lebih dari 2

Dim mergeSortRight() As Integer
ReDim mergeSortRight(UBound(data) - mid)
For i As Integer = mid To UBound(data)
	mergeSortRight(i - mid) = data(i)
Next
totMergeSort += 1
MergeSort(mergeSortRight)



4. Jika jumlah datanya 2, maka lakukan proses pengurutan data

If UBound(data) = 1 Then
	Dim tmpdata As Integer = 0
	If data(0) < data(1) Then
		tmpdata = data(0)
		data(0) = data(1)
		data(1) = tmpdata

		totMergeSort += 1
	End If
	Return
End If



5. Setelah data bagian kiri dan kanan sudah diurutkan, maka lakukan pengurutan data secara gabungan

Dim iCount As Integer = 0
Do While UBound(mergeSortLeft) >= 0 Or UBound(mergeSortRight) >= 0
	If UBound(mergeSortLeft) >= 0 And UBound(mergeSortRight) >= 0 Then
		If mergeSortLeft(UBound(mergeSortLeft)) < mergeSortRight(UBound(mergeSortRight)) Then
			data(UBound(data) - iCount) = mergeSortLeft(UBound(mergeSortLeft))
			ReDim Preserve mergeSortLeft(UBound(mergeSortLeft) - 1)
		Else
			data(UBound(data) - iCount) = mergeSortRight(UBound(mergeSortRight))
			ReDim Preserve mergeSortRight(UBound(mergeSortRight) - 1)
		End If
		iCount += 1
		totMergeSort += 1

	ElseIf UBound(mergeSortLeft) >= 0 Then
		data(UBound(data) - iCount) = mergeSortLeft(UBound(mergeSortLeft))
		ReDim Preserve mergeSortLeft(UBound(mergeSortLeft) - 1)
		iCount += 1
		totMergeSort += 1

	ElseIf UBound(mergeSortRight) >= 0 Then
		data(UBound(data) - iCount) = mergeSortRight(UBound(mergeSortRight))
		ReDim Preserve mergeSortRight(UBound(mergeSortRight) - 1)
		iCount += 1
		totMergeSort += 1
	End If
Loop


Hasil Akhir Penggunaan Algoritma:











Implementasi Algoritma Branch & Bound

  Nama    : Saiful Bahri Si Jabat Npm      : 21312087 Kelas      : IF 21 B Implementasi Algoritma Branch & Bound Pada Masalah Knapsack G...