Kamis, 27 Oktober 2016

Linux Mint



Linux Mint adalah distribusi linux yang berbasis Ubuntu dengan tujuan membuat distribusi linux yang komplit “out-of-the-box”, diantaranya adalah browser plugins, support multimedia yang lebih lengkap, java dan lain sebagainya. Linux Mint sendiri kompitebel dengan repositoris.
Linux Mint adalah salah satu dari paket kejutan dari tahun lalu. Awalnya diluncurkan sebagai varian dari Ubuntu dengan codec media terintegrasi, maka kini telah berkembang menjadi salah satu yang paling user-friendly distribusi di pasar lengkap dengan desktop dan menu custom, beberapa peralatan konfigurasi unik, yang berbasis web antarmuka instalasi paket, dan sejumlah edisi yang berbeda. Mungkin yang paling penting, ini adalah salah satu proyek di mana para pengembang dan pengguna berada dalam interaksi yang konstan, sehingga dramatis, pengguna-didorong melakukan perbaikan dengan setiap rilis baru. DistroWatch telah berbicara kepada para pendiri dan pemimpin pengembang Linux Mint, Clement Lefebvre, tentang sejarah distribusi.
Linux Mint adalah sebuah distro Linux Live CD yang diturunkan dari distro Ubuntu, dengan tujuan untuk memproduksi sebuah distro dengan desktop yang elegan, up to date, dan nyaman digunakan, Linux Mint didesain untuk berjalan out-of-the-box dengan semua fasilitas yang telah terinstall didalamnya. Versi distro ini adalah versi 4.0 dengan kode Daryna. Mint 4.0 diturnkan dari Ubuntu Feisty Fawn, jadi semua paket aplikasi Ubuntu Feisty kompatibel dan bias diinstall di Linux Mint 4.0 ini. Kesan pertama pada booting awal, logo Linux Mint sudah berganti berbeda dari rilis sebelumnya. Masuk ke desktop, Mint masih memiliki pola dan corak warna yang sama yaitu paduan warna hijau dan biru. Distro ini telah dilengkapi dengan berbagai aplikasi yang siap pakai diantaranya :
1.      OpenOffice  2.2 (Write, calc, Presentation, Database)
2.      GIMP Image Editor
3.      Mozilla Firefox dan Thunderbird
4.      Pidgin 2.0.0 dan XChat
5.      Java Runtime Environment 6.0
6.      Amarok, Totem Media Player, dan Mplayer

Makalah Sorting



BAB I
PENDAHULUAN

Divide and Conquer (D&C) adalah algoritma pemrograman  yang  melakukan  pemecahan  masalah menjadi  dua  sub-masalah  secara  rekursif  sampai  setiap sub-masalah  cukup  sederhana  untuk  diselesaikan  secara langsung.  Tiap  solusi  dari  masing-masing  sub-masalah akan digabungkan untuk mendapatkan solusi dari masalah utama  tersebut.  Algoritma  D&C  menjadi  basis  dari algoritma-algoritma efisien untuk masalah-masalah seperti sorting  (quick  sort,  merge  sort) dan  transformasi  diskrit Fourier.
Dasar dari algoritma ini dikemukakan pertama kali oleh Anatolii  Karatsuba Alexeevich  pada  tahun  1960  sebagai algoritma  perkalian  dua  buah  angka  n-digit  dengan kompleksitas     algoritma O(n.2log3).  Algoritma ini sekarang  dikenal  dengan  nama  Algoritma  Karatsuba, membuktikan  bahwa  ada  algoritma  perkalian  yang  lebih cepat  dari  O(n2)  [Kolmogorov,  1956].  Buah  pikiran Kolmogorov dan penemuan Karatsuba kemudian membantu merintis penelitian performa algoritma.
Algoritma  Divide  and  Conquer  secara  natural diimplementasikan  secara  rekursif  sebagai  pemanggilan prosedur dalam dirinya sendiri. Sub-masalah-sub-masalah akan  dikerjakan  dalam  procedure-call  stack.  Setiap  sub-masalah  yang merupakan  hasil  pembagian  dari  masalah utama  biasanya  dibagi  tanpa  menimbulkan  overlapping sehingga  tidak  ada  pengerjaan  redundan.  Semuanya  akan dimasukkan ke dalam stack dan dikerjakan mulai dari submasalah terkecil. Tetapi, selain pengimplementasian rekursif,    dengan  metode  lain  sub-masalah  yang  dibentuk dapat juga  disimpan  dalam  struktur  data  yang  dibuat sendiri  seperti stack,     queue,  dan priority  queue. Pengimplementasian non-rekursif ini menambah kebebasan dalam pemilihan sub-masalah mana yang akan dipecahkan  berikutnya.  Konsep  ini  dikembangkan  dalam algoritma-algoritma  seperti Breadth  First  Search  dan  optimalisasi Branch and Bound.
Terdapat dua metode sorting paling umum yang dipakai dalam implementasi algoritma Divide and Conquer,  yaitu quick  sort  dan  merge  sort  (di  luar  kedua  ini  masih  ada metode  lain  seperti (insertion  sort).  Keduanya  berfungsiuntuk  mengurutkan  sebuah  array  berisi  nilai-nilai  yang acak  dengan  cara  mengurutkan  sebagian  dari array terlebih dahulu sebelum mengurutkan semua array secara keseluruhan.Pembahasan  mendalam  akan  menjelaskan  lebih,  tetapipada saat ini yang akan dibahas adalah metode sorting merge sort dan heap sort.





BAB II
PEMBAHASAN

2.1.  Merge Sort
Merge sort merupakan algoritma pengurutan dalam ilmu komputer yang dirancang untuk memenuhi kebutuhan pengurutan atas suatu rangkaian data yang tidak memungkinkan untuk ditampung dalam memori komputer karena jumlahnya yang terlalu besar. Algoritma ini ditemukan oleh John von Neumann pada tahun 1945. (id.wikipedia.org)
Algoritma pengurutan data merge sort dilakukan dengan menggunakan cara divide and conquer yaitu dengan memecah kemudian menyelesaikan setiap bagian kemudian menggabungkannya kembali. Pertama data dipecah menjadi 2 bagian dimana bagian pertama merupakan setengah (jika data genap) atau setengah minus satu (jika data ganjil) dari seluruh data, kemudian dilakukan pemecahan kembali untuk masing-masing blok sampai hanya terdiri dari satu data tiap blok.
Setelah itu digabungkan kembali dengan membandingkan pada blok yang sama apakah data pertama lebih besar daripada data ke-tengah+1, jika ya maka data ke-tengah+1 dipindah sebagai data pertama, kemudian data ke-pertama sampai ke-tengah digeser menjadi data ke-dua sampai ke-tengah+1, demikian seterusnya sampai menjadi satu blok utuh seperti awalnya. Sehingga metode merge sort merupakan metode yang membutuhkan fungsi rekursi untuk penyelesaiannya.
Dengan hal ini deskripsi dari algoritma dirumuskan dalam 3 langkah berpola 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 secararekursif
3.      Kombinasi
Mengkombinasikan dua bagian tersebut secara rekursif untuk mendapatkanrangkaian 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.1.1.   Contoh 1
Contoh penerapan atas sebuah larik/array sebagai data sumber yang akan diurutkan {3, 9, 4, 1, 5, 2} adalah sebagai berikut:
·         pertama kali larik tersebut dibagi menjadi dua bagian, {3, 9, 4} dan {1, 5, 2}
·         Kedua larik kemudian diurutkan secara terpisah sehingga menjadi {3, 4, 9} dan {1, 2, 5}
·         Sebuah larik baru dibentuk yang sebagai penggabungan dari kedua larik tersebut {1}, sementara nilai-nilai dalam masing larik {3, 4, 9} dan {2, 5} (nilai 1 dalam elemen larik ke dua telah dipindahkan ke larik baru)
·         langkah berikutnya adalah penggabungan dari masing-masing larik ke dalam larik baru yang dibuat sebelumnya.
·         {1, 2} <-> {3, 4, 9} dan {5}
·         {1, 2, 3} <-> {4, 9} dan {5}
·         {1, 2, 3, 4} <-> {9} dan {5}
·         {1, 2, 3, 4, 5} <-> {9} dan {null}
·         {1, 2, 3, 4, 5, 9} <-> {null} dan {null}

2.1.2.   Contoh 2

Inputan datanya adalah sebagai berikut:
7
2
6
5


Membagi rangkaian menjadi dua bagian:
7
2

6
5
Kedua bagian tersebut bisa dinamai A dan B

Membagi A menjadi dua bagian:
7

2

Membandingkannya kemudian dikombinasikan:
2
7
7 dan 2 kemudian tukar posisi karena 2 < 7

Membagi B menjadi dua bagian:
6

5

Membandingkannya kemudian dikombinasikan:
5
6
6 dan 5 kemudian tukar posisi karena  5 < 6

Membandingkan A dan B
2
7
5
6
Kemudian dilakukan proses membandingkan lagi antara angka di A dengan B.

Pembandingan biasanya dimulai dari angka terdepan di masing-masing bagian.

Mengkombinasikan A dengan B.
2
5
6
7
Sehingga menjadi: 2<5 span="">


2.2.  Heap Sort
2.2.1.   Pengertian Heap
Pohon heap adalah struktur data yang berbentuk pohon yang memenuhi sifat-sifat heap yaitu jika B adalah anak dari A, maka nilai yang tersimpan di simpul A lebih besar atau sama dengan nilai yang tersimpan di simpul B. Hal ini mengakibatkan elemen dengan nilai terbesar selalu berada pada posisi akar, dan heap ini disebut max heap. (Bila perbandingannya diterbalikkan yaitu elemen terkecilnya selalu berada di simpul akar, heap ini disebut adalah min heap). Karena itulah, heap biasa dipakai untuk mengimplementasikan priority queue. Operasi-operasi yang digunakan untuk heap adalah Heap Sort
Heap Sort adalah sebuah algoritma pengurutan yang paling lambat dari algoritma yang memiliki kompleksitas O(n log n). Tetapi tidak seperti algoritma Merge Sort dan Quick Sort, algoritma Heap Sort tidak memerlukan rekursif yang besar atau menggunakan banyak tabel (array). Oleh karena itu, Heap Sort adalah pilihan yang baik untuk sebuah kumpulan data yang besar.
Algoritma ini bekerja dengan menentukan elemen terbesar (atau terkecil) dari sebuah daftar elemen, dan diletakkan pada akhir (atau awal) dari daftar tersebut. Heap sort menyelesaikan sebuah pengurutan menggunakan struktur data yang disebut heap.
Algoritma ini dimulai dengan membangun sebuah array heap dengan membangun tumpukan dari kumpulan data, lalu memindahkan data terbesar ke bagian belakang dari sebuah tabel hasil. Setelah itu, array heap dibangun kembali, kemudian mengambil elemen terbesar untuk diletakkan di sebelah item yang telah dipindahkan tadi. Hal ini diulang sampai array heap habis.
Jadi secara umum, algoritma ini memerlukan dua buah tabel; satu tabel untuk menyimpan heap, dan satu tabel lainnya untuk menyimpan hasil. Walaupun lebih lambat dari Merge Sort atau Quick Sort, algoritma ini cocok untuk digunakan pada data yang berukuran besar.
Perbandingan kompleksitas jenis-jenis heap

Tabel 1. Perbandingan macam-macam heap

1.      Algoritma Heapify
Algoritma Heapify adalah membangun sebuah heap dari bawah ke atas, secara berturut-turut berubah ke bawah untuk membangun heap. Permasalahan pertama yang harus kita pertimbangkan dalam melakukan operasi heapify adalah dari bagian mana kita harus memulai. Bila kita mencoba operasi heapify dari akar maka akan terjadi operasi runut-naik seperti algoritma bubble sort yang akan menyebabkan kompleksitas waktu yang ada akan berlipat ganda. Sebuah versi lain adalah membangun heap secara atas-bawah dan berganti-ganti ke atas untuk secara konseptual lebih sederhana untuk ditangani. Versi ini mulai dengan sebuah heap kosong dan secara berturut-turut memasukkan data. Versi lainnya lagi adalah dengan membentuk pohon heap-pohon heap mulai dari subtree-subtree yang paling bawah. Jika subtree-subtree suatu simpul sudah membentuk heap maka pohon dari simpul tersebut mudah dijadikan pohon heap dengan mengalirkannya ke bawah. Setelah diuji, maka ide yang paling efisien adalah versi yang terakhir, yang kompleksitas algoritmanya pada kasus terburuk adalah O(n), sedangkan versi membentuk heap tree-heap tree dari atas ke bawah kompleksitas nya O(n log n).
Jadi, algoritma utama heapify adalah melakukan iterasi mulai dari internal simpul paling kanan bawah(pada representasi larik, adalah elemen yang berada di indeks paling besar) hingga akar, kemudian kearah kiri dan naik ke level di atasnya, dan seterusnya hingga mencapai akar (sebagai larik [0..N-1]). Oleh karena itu, iterasi dilakukan mulai dari j= N/2 dan berkurang satu-satu hingga mencapai j=0. Pada simpul internal tersebut, pemeriksaan hanya dilakukan pada simpul anaknya langsung (tidak pada level-level lain di bawahnya). Pada saat iterasi berada di level yang lebih tinggi, subtreesubtree selalu sudah membentuk heap. Jadi, kasus yang paling buruk adalah restrukturisasi hanya akan mengalirkan simpul tersebut kearah bawah. Dengan demikian, heapify versi ini melakukan sebanyak N/2 kali iterasi, dan pada kasus yang paling buruk akan melakukan iterasi sebanyak ²log(N) kali.

2.      Algoritma Remove
Algoritma remove ini menukar akar (yang berisi nilai maksimum) dari heap dengan elemen terakhir. Secara logika, simpul yang berada paling kanabawah dipindahkan ke akar untuk menggantikan simpul akar yang akan diambil.

3.      Algoritma Reheapify
Algoritma reheapify ini melakukan pembuatan ulang heap dari atas ke bawah seperti halnya iterasi terakhir dari algoritma metoda heapify. Perbedaan antara metode heapify dengan metode reheapify ada pada iterasi yang dilakukan oleh kedua algoritma tersebut. Algoritma metode reheapify ini hanya melakukan iterasi terakhir dari algoritma heapify. Hal ini disebabkan baik subtree kiri maupun subtree kanannya sudah merupakan heap, sehingga tidak perlu dilakukan iterasi lengkap seperti algoritma heapify. Dan setelah reheapify maka simpul yang akan diiterasikan berikutnya akan berkurang satu.

2.2.2.   Penerapan Algoritma Pengurutan Heap Sort

Salah satu contoh penerapan algoritma pengurutan (sorting algorithm) heap sort adalah sebagai berikut: Misalkan terdapat suatu array bilangan bulat yang terdiri dari sepuluh buah anggota dengan nilai data 11, 9, 8, 27, 16, 25, 12, 13, 34, dan 43. Kita akan mengurutkan data diatas dengan menggunakan heapsort. Pertama-tama, array di atas dapat dipandang sebagai suatu Complete Binary Tree (CBT) sebagai berikut:
Selanjutnya algoritma metoda heapify dilakukan dengan iterasi dari subtree node ke-4, ke-3, dan seterusnya berturut-turut hingga mencapai root (akar). Iterasi dilakukan mulai dari node ke-4 karena N/2 dalam contoh di atas adalah 5. Dan elemen kelima dari array memiliki nilai indeks 4 sebab indeks array biasanya diawali dari 0. Penerapan algoritma metoda heapify terhadap Complete Binary Tree (CBT) pada contoh di atas menghasilkan operasi-operasi pertukaran sebagai berikut:
1.      Subtree node ke-4: pertukaran 16 dengan 43
2.      Subtree node ke-3: pertukaran 27 dengan 34
3.      Subtree node ke-2: pertukaran 8 dengan 25
4.      Subtree node ke-1: pertukaran 9 dengan 43, lalu pertukaran 9 dengan 16
5.      Subtree node ke-0: pertukaran 11 dengan 43, lalu pertukaran 11 dengan 34, serta akhirnya pertukaran 11 dengan 27 Perubahan-perubahan (pertukaran) tersebut dapat digambarkan sebagai berikut:


Semua perubahan di atas terjadi dalam array yang bersangkutan, sehingga pada akhirnya diperoleh tree terakhir yang merupakan heap tree. Sementara itu, dalam iterasi yang melakukan/menerapkan algoritma metoda remove( ) dan algoritma metoda reheapify() akan terjadi pemrosesan berikut:

1.      Setelah 43 di-remove dan 9 menggantikan posisi yang ditinggalkan oleh 43, maka terjadi reheapify: penukaran 9 dengan 34, 9 dengan 27, dan 9 dengan 13.


dan data yang telah terurut adalah 43.

2.      Setelah 34 di-remove dan 11 menggantikan posisi yang ditinggalkan oleh 34, maka terjadi reheapify: penukaran 11 dengan 27, dan 11 dengan 16.
dan data yang telah terurut adalah 34, 43.

3.      Setelah 27 di-remove dan 9 menggantikan posisi yang ditinggalkan oleh 27, maka terjadi reheapify: penukaran 9 dengan 25, dan 9 dengan 12.

dan data yang telah terurut adalah 27, 34, 43.

4.      Demikian seterusnya dilakukan algoritma metoda remove dan algoritma metoda reheapify hingga tidak ada lagi node yang tersisa. Dan pada akhirnya akan didapatkan hasil data yang telah terurut adalah 8, 9, 11, 12, 13, 16, 25, 27, 34, 43.






BAB III
PENUTUP
3.1.Kesimpulan
Merge Sort adalah metode pengurutan data dengan cara data dibagi menjadi subkumpulan - subkumpulan yang kemudian subkumpulan tersebut diurutkan secara terpisah, dan kemudian digabungkan kembali dengan metode merging.
Algoritma pengurutan heap sort dapat digunakan untuk menyelesaikan masalah-masalah pengurutan dalam membangun suatu program aplikasi dengan mangkus.
Keunggulan algoritma pengurutan heap sort terletak pada kompleksitas waktu asimptotiknya yang sangat baik.
Meskipun lebih lambat dari algoritma pengurutan data yang lain, algoritma heap sort memiliki kelebihan ketika menangani data dalam skala yang besar/massive. Karena algoritma ini memiliki kelebihan tidak menggunakan banyak tabel, tetapi hanya satu tabel yang dipakai untuk menyimpan hasil dari pengurutan tersebut.