Modul-8 : Algoritma dan Struktur Data

Slides:



Advertisements
Presentasi serupa
Pencarian ( Searching)
Advertisements

Desain Dan Analisis Algoritma
Algoritma dan Struktur Data
Aryo Pinandito, ST, M.MT - PTIIK UB
STRUKTUR DATA (3) sorting array
Design and Analysis of Algorithm Recursive Algorithm Analysis
Sorting (Pengurutan).
1 Algoritma Bahasa Pemrograman dan Bab 1.1. Pengertian Algoritma.
STRUKTUR DATA sorting array
Bahan Kuliah IF3051 Strategi Algoritma Oleh: Rinaldi Munir
Design and Analysis of ALGORITHM (Session 3)
Pertemuan 3 LINKED LIST (PART 2) Struktur Data Departemen Ilmu Komputer FMIPA-IPB 2009.
2. Introduction to Algorithm and Programming
Pertemuan – 14 Sorting (Bab 8) Informatics Engineering Department
Quick Sort dan Merge Sort
Program Studi Ekstensi DTE FTUI Slides©2007
Algoritma dan Struktur Data
Source: Sorting Algorithms source:
Z Bekti - Rita - Sevenhot Struktur Data & Algoritma 2009.
K-Map Using different rules and properties in Boolean algebra can simplify Boolean equations May involve many of rules / properties during simplification.
TEKNIK PENGINTEGRALAN
R ESPONSI UAS DAA MIT SKI IT Telkom. Q UICKSORT ( D IVIDE AND C ONQUER ) Cara2nya,, Pilih Anggota secara random (misal ambil yang ketengah) sebutlah anggota.
1 DATA STRUCTURE “ STACK” SHINTA P STMIK MDP APRIL 2011.
11. STRATEGI PARTISI DAN DIVIDE & CONQUER 11.1 Partisi Strategi Divide & Conquer Divide & Conquer M-ary 11.2 Contoh Divide & Conquer Sortir dengan Bucket.
BLACK BOX TESTING.
1 Pertemuan 02 Ukuran Pemusatan dan Lokasi Matakuliah: I Statistika Tahun: 2008 Versi: Revisi.
1 Diselesaikan Oleh KOMPUTER Langkah-langkah harus tersusun secara LOGIS dan Efisien agar dapat menyelesaikan tugas dengan benar dan efisien. ALGORITMA.
Sorting 2007/2008 – Ganjil – Minggu 5.
1 Pertemuan 9 DIVIDE And CONQUER Matakuliah: T0034/Perancangan & Analisis Algoritma Tahun: 2005 Versi: R1/0.
Pertemuan-2 Kriteria kebaikan suatu algoritme Correctness
Pertemuan 10 DIVIDE And CONQUER Lanjutan ….
1 Pertemuan 10 Fungsi Kepekatan Khusus Matakuliah: I0134 – Metode Statistika Tahun: 2007.
Bina Nusantara Mata Kuliah: K0194-Pemodelan Matematika Terapan Tahun : 2008 Aplikasi Model Markov Pertemuan 22:
12-CRS-0106 REVISED 8 FEB 2013 CSG523/ Desain dan Analisis Algoritma Divide and Conquer Intelligence, Computing, Multimedia (ICM)
1 Pertemuan 12 B-Tree Matakuliah: T0534/Struktur Data Tahun: 2005 Versi: September 2005.
Binary Search Tree. Sebuah node di Binary Search Tree memiliki path yang unik dari root menurut aturan ordering – Sebuah Node, mempunyai subtree kiri.
Jartel, Sukiswo Sukiswo
Tugas Kelompok 6 Teknik Sort.
MATERI PERKULIAHAN ANALISIS ALGORITMA
STATISTIKA CHATPER 4 (Perhitungan Dispersi (Sebaran))
Fondasi Pemrograman & Struktur Data
KUG1A3 Algoritma& Pemrograman
CSG523/ Desain dan Analisis Algoritma
Bahan Kuliah IF2211 Strategi Algoritma Oleh: Rinaldi Munir
Dynamic Array and Linked List
Design and Analysis Algorithm
Modul 5 Algoritma & Struktur Data
CSG523/ Desain dan Analisis Algoritma
Pengujian Hipotesis (I) Pertemuan 11
Matakuliah : I0014 / Biostatistika Tahun : 2005 Versi : V1 / R1
Faktor analisa algoritma
STRUKTUR DATA (3) sorting array
Pertemuan 24 Teknik Searching
Teknik Informatika - Universitas Muhammadiyah Malang (UMM)
Analisis dan Perancangan Algoritma Kuliah 4 : Asymptotic pd Kasus
STRUKTUR DATA sorting array
Modul 6 : Analisis Algoritma dan Struktur Data
Algorithms and Programming Searching
Pendugaan Parameter (II) Pertemuan 10
BINARY SEARCH Tim Algoritma Pemrograman Teknik Informatika
REAL NUMBERS EKSPONENT NUMBERS.
Nama : Siti Hajar Unit : B Nim : No.Hp : 0852 – 2000 – 3786.
Strategi Algoritma Kuliah 3 : Algoritma Efisien
STRUKTUR DATA (3) sorting array
Master data Management
An assessment of Pedestrian Ways in Unsyiah
STRUKTUR DATA (3) sorting array
Sorting.
Aplikasi Graph Minimum Spaning Tree Shortest Path.
Algoritma & Pemrograman 1 Achmad Fitro The Power of PowerPoint – thepopp.com Chapter 4.
Transcript presentasi:

Modul-8 : Algoritma dan Struktur Data Sorting Algorithms Modul-8 : Algoritma dan Struktur Data

Heap-Sort Binary heap digunakan sebagai struktur data dalam algoritma Heap-Sort Sebagaimana diketahui, ketika suatu Heap dibangun maka kunci utamanya adalah: node atas selalu mengandung elemen lebih besar dari kedua node dibawahnya Apabila elemen berikutnya ternyata lebih besar dari elemen root, maka harus di “swap” dan lakukan: proses “heapify” lagi Root dari suatu Heap sort mengandung elemen terbesar dari semua elemen dalam Heap

Proses Heap-Sort dapat dijelaskan sbb: Representasikan Heap dengan n elemen dalam sebuah array A[n] Elemen root tempatkan pada A[1] Elemen A[2i] adalah node kiri dibawah A[i] Elemen A[2i+1] adalah node kanan dibawah A[i] Contoh: array A=[16 14 10 8 7 9 3 2 4 1] mewakili binary-heap sbb: Ambil nilai root (terbesar) A[1..n-1] dan pertukarkan dengan elemen terakhir dalam array, A[n] Bentuk Heap dari (n-1) elemen, dari A[1] hingga A[n-1] Ulangi langkah 6 dimana indeks terakhir berkurang setiap langkah.

1 2 3 4 5 6 7 8 8 9 10 14 10 8 7 9 3 2 4 16 16

1 2 3 4 5 6 7 8 8 9 10 14 10 9 8 7 4 3 2 16 16

MAX-HEAPIFY(A, i) 1 l ← LEFT(i) 2 r ← RIGHT(i) 3 if l ≤ heap-size[A] and A[l] > A[i] 4 then largest ← l 5 else largest ← i 6 if r ≤ heap-size[A] and A[r] > A[largest] 7 then largest ← r 8 if largest ≠ i 9 then exchange A[i] ↔ A[largest] 10 MAX-HEAPIFY(A, largest)

BUILD-MAX-HEAP(A) 1 heap-size[A] ← length[A] 2 for i ← ⌊length[A]/2⌋ downto 1 3 do MAX-HEAPIFY(A, i)

HEAPSORT(A) 1 BUILD-MAX-HEAP(A) 2 for i ← length[A] downto 2 3 do exchange A[1] ↔ A[i] 4 heap-size[A] ← heap-size[A] - 1 5 MAX-HEAPIFY(A, 1)

Analisis: Prosedur Heapify(i,j) adalah pembentukan binary heap dengan kompleksitas O(log n) Kemudian prosedur ini dipanggil n kali (Build-Max- Heap) sehingga secara keseluruhan kompleksitas adalah O(n log n)

Quick-Sort Quick-sort adalah teknik pengurutan data yang memiliki kerumitan rata-rata O(n log n) tetapi dalam “worst-case” bisa mencapai O(n2) Teknik Quick-sort berbasis teknik divide- and-conquer, sbb: Divide : array A[p..r] dibagi menjadi A[p..q] dan A[q+1 ..r] sehingga setiap elemen A[p..q] lebih kecil dari atau sama dengan setiap elemen A[q+1..r] Conquer : subarray A[p..q] dan A[q+1..r] juga di- sort menurut Quick-Sort Combine : pada akhirnya A[p..r] akan ber-urutan

QuickSort(A,p,r) if (p < r) then q  Partisi(A,p,r); QuickSort(A,p,q); QuickSort(A,q+1,r); Partisi(A,p,r) x  A[p]; i  (p-1); j  (r+1); while (true) { repeat (j j -1) until (A[j] <= x) repeat (i  i+1) until (A[i] >= x) if (i < j) then Swap(A[i], A[j]) else Return (j) }

Analisis: Worst-case : terjadi apabila partisi memberikan q=(n-1), atau subarray pertama = A[1..n-1] dan subarray kedua hanya 1 elemen A[n] T(n) = T(n-1) + (n), jadi T(1) = (1) Solusinya = Average-case : karena mengikuti divide-and- conquer maka: T(n) = 2 T(n/2) + (n) sehingga solusi-nya adalah O(n log n)

Radix Sort Radix sort biasa digunakan pada basis data yang akan di-urutkan melalui kunci yang berantai, misalnya akan diurutkan menurut tanggal lahir, maka harus dilakukan sort 3 langkah, pertama menurut tahun, kemudian menurut bulan, dan terakhir menurut tanggal Pada sortir angka, maka radix sort diterapkan pada setiap digit RADIX-SORT(A, d) 1 for i ← 1 to d 2 do use a stable sort to sort array A on digit i Copyright @2007, Suarga

The analysis of the running time depends on the stable sort used as the intermediate sorting algorithm. When each digit is in the range 0 to k-1 (so that it can take on k possible values), and k is not too large, counting sort is the obvious choice. Each pass over n d-digit numbers then takes time Θ(n + k). There are d passes, so the total time for radix sort is Θ(d(n + k)). Copyright @2007, Suarga

Counting Sort Counting sort assumes that each of the n input elements is an integer in the range 0 to k, for some integer k. When k = O(n), the sort runs in Θ(n) time. In the code for counting sort, we assume that the input is an array A[1 n], and thus length[A] = n. We require two other arrays: the array B[1 n] holds the sorted output, and the array C[0 k] provides temporary working storage. Copyright @2007, Suarga

5 ▹ C[i] now contains the number of elements equal to i. COUNTING-SORT(A, B, k) 1 for i ← 0 to k 2 do C[i] ← 0 3 for j ← 1 to length[A] 4 do C[A[j]] ← C[A[j]] + 1 5 ▹ C[i] now contains the number of elements equal to i. 6 for i ← 1 to k 7 do C[i] ← C[i] + C[i - 1] 8 ▹ C[i] now contains the number of elements less than or equal to i. 9 for j ← length[A] downto 1 10 do B[C[A[j]]] ← A[j] 11 C[A[j]] ← C[A[j]] - 1 Copyright @2007, Suarga

The operation of COUNTING-SORT on an input array A[1 8], where each element of A is a nonnegative integer no larger than k = 5. (a) The array A and the auxiliary array C after line 4. (b) The array C after line 7. (c)-(e) The output array B and the auxiliary array C after one, two, and three iterations of the loop in lines 9-11, respectively. Only the lightly shaded elements of array B have been filled in. (f) The final sorted output array B. Copyright @2007, Suarga

How much time does counting sort require How much time does counting sort require? The for loop of lines 1-2 takes time Θ(k), the for loop of lines 3-4 takes time Θ(n), the for loop of lines 6-7 takes time Θ(k), and the for loop of lines 9-11 takes time Θ(n). Thus, the overall time is Θ(k+n). In practice, we usually use counting sort when we have k = O(n), in which case the running time is Θ(n). Copyright @2007, Suarga

Bucket Sort Bucket sort runs in linear time when the input is drawn from a uniform distribution. Like counting sort, bucket sort is fast because it assumes something about the input. bucket sort assumes that the input is generated by a random process that distributes elements uniformly over the interval [0, 1). Copyright @2007, Suarga

The idea of bucket sort is to divide the interval [0, 1) into n equal-sized subintervals, or buckets, and then distribute the n input numbers into the buckets. Our code for bucket sort assumes that the input is an n-element array A and that each element A[i] in the array satisfies 0 ≤ A[i] < 1. The code requires an auxiliary array B[0 n - 1] of linked lists (buckets) and assumes that there is a mechanism for maintaining such lists. Copyright @2007, Suarga

BUCKET-SORT(A) 1 n ← length[A] 2 for i ← 1 to n 3 do insert A[i] into list B[⌊n A[i]⌋] 4 for i ← 0 to n - 1 5 do sort list B[i] with insertion sort 6 concatenate the lists B[0], B[1], . . ., B[n - 1] together in order Copyright @2007, Suarga

The operation of BUCKET-SORT. (a) The input array A[1 10] The operation of BUCKET-SORT. (a) The input array A[1 10]. (b) The array B[0 9] of sorted lists (buckets) after line 5 of the algorithm. Bucket i holds values in the half-open interval [i/10, (i + 1)/10). The sorted output consists of a concatenation in order of the lists B[0], B[1], . . ., B[9]. Copyright @2007, Suarga

the running time of bucket sort is we conclude that the expected time for bucket sort is Θ(n) + n · O(2 - 1/n) = Θ(n). Copyright @2007, Suarga