BRP_SDA_2013_2014_Term_2_v1

19
Buku Rancangan Pengajaran IKI10400 Struktur Data dan Algoritma Fakultas Ilmu Komputer Universitas Indonesia Februari 2014

description

dibaca-dibaca

Transcript of BRP_SDA_2013_2014_Term_2_v1

Page 1: BRP_SDA_2013_2014_Term_2_v1

Buku Rancangan Pengajaran

IKI10400

Struktur Data dan Algoritma

Fakultas Ilmu Komputer

Universitas Indonesia

Februari 2014

Page 2: BRP_SDA_2013_2014_Term_2_v1

Sekapur Sirih:

Buku Rancangan Pengajaran (BRP) ini untuk digunakan sebagai acuan dalam

proses belajar mengajar dilingkungan Fakultas Ilmu Komputer Universitas

Indonesia. BRP ini memberikan gambaran perkuliahan yang harus

dipersiapkan oleh pengasuh dan akan dilalui mahasiswa.

BRP – IKI10400 – Struktur Data dan Algoritma

Tahun Ajaran : 2013/2014 Term 2

Pengajar : Arief Ramadhan

Bayu Distiawan

Denny

Gilang Kusuma Jati

Hadaiq Rolis

Buku Rancangan Pengajaran (BRP) Struktur Data dan Algoritma ini

dikembangkan terus menerus oleh para pengajar kuliah Struktur Data dan

Algoritma di Fakultas Ilmu Komputer Universitas Indonesia.

Depok, Februari 2014

Page 3: BRP_SDA_2013_2014_Term_2_v1

Bagian 1

INFORMASI UMUM

Nama Kuliah : Struktur Data dan Algoritma

Kode Kuliah : CSF1600400

Beban Kuliah : 4 SKS (Satuan Kredit Semester)

Implementasi SKS :

4 x 50 menit per pekan kuliah tatap muka

4 x 50 menit per pekan belajar mandiri

4 x 50 menit per pekan praktikum & tutorial

2 x 50 menit per pekan asistensi teori

Buku Acuan Utama : Mark Allen Weiss, Data Structures and Problem Solving

Using Java (4rd edition), Addison Wesley, 2010.

Pengajar :

Arief Ramadhan

Ruang 3308 – [email protected]

Bayu Distiawan

Ruang 3301 – [email protected]

Denny

Ruang 1238 – [email protected]

Gilang Kusuma Jati

Ruang 3311 – [email protected]

Hadaiq Rolis

Ruang 3311 – [email protected]

Jadwal Kelas : Sesuai dengan jadwal di SIAK-NG

Page 4: BRP_SDA_2013_2014_Term_2_v1

Bagian 2

TUJUAN PEMBELAJARAN

Deskripsi Mata Kuliah:

Mata kuliah ini mengajarkan teknik-teknik dasar untuk abstraksi data,

algoritma-algoritma akses dan manipulasi struktur-struktur abstraksi tersebut;

serta pengantar analisis kompleksitas pemakaian storage dan waktu dalam

eksekusi algoritma-algoritma tersebut.

Tujuan Perkuliahan:

a) Mahasiswa memahami pentingnya representasi data.

b) Mahasiswa dapat memilih struktur data yang tepat untuk

permasalahan yang diberikan.

c) Mahasiswa memahami perbedaan kinerja algoritma.

d) Mahasiswa mengenal dan memahami Struktur data yang umum seperti

list, stack, queue, tree, hash table dan graph.

e) Mahasiswa memahami algoritma dasar dari permasalahan “searching”

dan “sorting”

f) Mahasiswa mengenal dan memahami variasi struktur data dari struktur

data yang dasar. Misalnya variasi struktur data tree yaitu AVL Tree,

dan B-Tree.

g) Mahasiswa dapat mengimplementasikan struktur data yang

dibutuhkannya.

h) Mahasiswa memahami dan dapat mengimplementasikan algoritma

sesuai dengan struktur data yang digunakan.

Page 5: BRP_SDA_2013_2014_Term_2_v1

Bagian 3

MATERI PEMELAJARAN

No Pokok Bahasan Subpokok bahasan Rujukan

1 Review Java dan OOP Type dan Variable

Flow Control

Array

Exception

Class dan Object

Inheritance

Abstract Class dan Interface

Polymorphism

Buku teks

Bab: 1,2,3,4

2 Analisa Algoritma Pengertian Analisa Algoritma

Cara Mengukur Algoritma

Notasi

Perbandingan Orde Fungsi

Contoh: Max. Contiguous Subsequence

Sum.

Algoritma Logaritme dan contoh.

Buku teks

Bab: 5

3 ADT dan Java Collection (+ Generics)

Pengertian ADT

Pemisahan specifikasi dan implementasi

Pengenalan ADT: list, stack, queue, map, set dan priority queue.

Pengertian collections

Application Programming Interface (API)

Generic di Java

Penggunaan Java Collection API

Iterator

Contoh menggunakan API

Buku teks

Bab: 6

4 Rekursif Pengertian rekursif

Model eksekusi algoritma rekursif

Aturan Rekursif

Pembuktian dengan induksi

Efisiensi pada rekursif algoritma

Contoh: Fibonacci

Tail Recursion

Divide and conquer

Backtracking

Dynamic Programming

Contoh: Maze, N-Queen Problem, MCSS

Buku teks

Bab: 7

5 Sorting Pengertian umum sorting, ide dasar,

algoritma, contoh eksekusi, analisa dari

Buku teks

Page 6: BRP_SDA_2013_2014_Term_2_v1

metode sorting:

Buble sort, Selection sort, insertion sort, shell sort, merge sort, quick sort.

Bab: 8

6 Implementation: List,

Stack & Queue

ArrayList

Double ended queue

Linked-list Based Stack, Queue

Buku teks

Bab:

15,16,17

7 Trees Pengertian Tree

Rekursif pada tree

tree traversal

Aplikasi Tree: Huffman Code

Buku teks

Bab: 12,18

8 Graph Representasi graph

Algoritma pada graph: Minimum Spanning Tree,

Shortest path

Buku teks

Bab: 14

9 Binary Search Tree Pengertian dan motivasi Binary Search Tree

Red-Black Tree

AVL Tree

B Tree

Buku teks

Bab: 19

10 Binary Heap Pengertian dan motivasi

Implementasi Binary Heap

Priority Queue

Heapsort

Buku teks

Bab: 21

11 Hash Table Pengertian dan motivasi

Hash Function

Linear Probing

Quadratic probing

Analisa perbandingan

Buku teks

Bab: 17

Tema Tugas Pemrograman:

Tugas 01 – Penggunaan ADT *

Tugas 02 – Tree/Graph *

* Tema tugas masih bersifat tentative, dapat berubah sesuai kebutuhan.

Latihan:

Latihan akan berbentuk latihan pemrograman yang akan dikerjakan pada

waktu tutorial dan dikumpulkan saat tutorial berakhir. Selama pengerjaan

latihan, mahasiswa dapat bertanya dan berdiskusi kepada dosen, tutor atau

teman. Namun pengerjaan/penulisan tetap dilakukan secara individu. Pada

setiap akhir sesi tutorial, akan dilangsungkan kuis pemrograman kecil yang

Page 7: BRP_SDA_2013_2014_Term_2_v1

berhubungan dengan materi tutorial. Kuis ini dikerjakan secara individu. Nilai

akhir setiap latihan merupakan gabungan dari nilai tutorial dan kuis.

Kuis Pemrograman:

Kuis pemrograman dijadwalkan pada waktu tutorial. Mahasiswa akan

diberikan sebuah permasalahan pemrograman yang harus dapat diselesaikan

sendiri dalam waktu dua jam. Selama pengerjaan kuis, mahasiswa dapat

melihat buku, dokumentasi dan lain-lain, namun tidak diperkenankan

bertanya atau berdiskusi dengan siapa pun. Pengumpulan kuis pemrograman

dilakukan terhadap sistem online grader pada mesin scele.cs.ui.ac.id. Untuk

kuis tertentu, setelah batas waktu berakhir mahasiswa yang tertarik masih

dapat melakukan submission untuk latihan dan evaluasi diri. Walaupun

evaluasi kebenaran program dapat dilakukan secara otomatis (menggunakan

online grader) penilaian terhadap kuis pemrograman juga memperhatikan

komponen lain yaitu: Kerapihan penulisan program (termasuk penamaan

variable), efisiensi algoritma, kesesuaian struktur data yang digunakan, dan

kejelasan komentar program.

Kuis Online:

Kuis online merupakan kuis yang akan dilakukan menggunakan SCeLE. Kuis

ini berupa pilihan berganda untuk memperdalam pemahaman mahasiswa

mengenai materi yang telah diajarkan di kelas. Kuis online akan dilakukan

setiap minggu, mahasiswa dapat mengerjakan kuis ini dalam rentang satu

minggu, serta dapat mengulang kuis berkali-kali hingga mendapatkan hasil

yang memuaskan.

Tugas Pemrograman:

Tugas Pemrograman dapat dikerjakan dalam rentang waktu beberapa hari

secara individu. Mahasiswa akan diberikan permasalahan pemrograman yang

relatif lebih besar dari kuis pemrograman. Selama pengerjaan mahasiswa

dapat bertanya dan berdiskusi dengan orang lain namun

Page 8: BRP_SDA_2013_2014_Term_2_v1

pengerjaan/penulisan pada tetap dilakukan secara individu dan dituliskan

dengan kalimat sendiri.

Aturan Umum Penilaian Kuis atau Tugas Pemrograman:

Kebenaran program : 20% - 40%

Efisiensi Algoritma : 10% - 20%

Ketepatan Struktur data : 10% - 20%

Kerapihan Penulisan Program : 10% - 20%

Komentar dan Dokumentasi : 20% - 40%

Page 9: BRP_SDA_2013_2014_Term_2_v1

Bagian 4

SATUAN ACARA PERKULIAHAN

Metode pemelajaran:

Belajar yang dilaksanakan dalam perkuliahan ini melalui tatap mukan yang

dilengkapi dengan praktikum dan belajar mandiri.

1. Tatap Muka (TM)

Perkuliahan interaktif atau tatap muka dilakukan di kelas secara langsung.

dalam perkuliahan ini metode yang dilakukan antara lain:

a. Ceramah; dosen menjelaskan mengenai materi tertentu. Dan

metode ini dapat dikombinasikan dengan tanya jawab secara

langsung.

b. Diskusi kelas; mahasiswa membahas topik-topik tertentu yang ada

dalam materi dengan sebelumnya melakukan belajar mandiri dan

diskusi kelompok kecil (melalui SCeLE). Diskusi kelas ini dapat

dilakukan secara online melalui fasilitas SceLE dengan pengarahan

dosen dan tutor.

2. Belajar Mandiri (BM )

Belajar mandiri atau self-learning dilakukan tidak secara langsung bertatap

muka melainkan dengan memanfaatkan fasilitas belajar elektronik SCeLE.

Dengan SCeLE, pemelajaran akan melibatkan kegiatan-kegiatan sebagai

berikut:

a. Akses materi (A); mahasiswa dapat mengakses materi langsung

yang telah disediakan di SceLE dan di buku acuan.

b. Diskusi (D); mahasiswa dapat melakukan diskusi materi dan studi

kasus dalam bentuk aktifitas forum yang ada di SCeLE.

c. Chat (C); mahasiswa dapat pula berkomunikasi dengan pengajar

dan teman-teman sekelas dalam kurun waktu yang telah

ditentukan.

3. Praktikum dan Tutorial (PT)

Page 10: BRP_SDA_2013_2014_Term_2_v1

Praktikum dan Tutorial dilakukan mahasiswa dipandu oleh Tutor. Mahasiswa

akan mempraktikan materi yang dipelajari nya dan bentuk latihan atau tugas

pemrograman. Tutor akan membantu mahasiswa menghadapi permasalahan

nyata yang dihadapi ketika mempraktikan materi yang telah diberikan.

Media Instruksional

1. Internet (I)

2. Presentasi Multimedia (M)

3. Perangkat Lunak Simulasi dan Animasi (SA)

4. White board, beamer (WB)

5. Diktat dan Lembar Kerja (LK)

Tutor:

Akan disediakan seorang tutor untuk setiap kelompok tutorial yang terdiri dari

15 peserta kuliah. Peran Tutor adalah:

1. Memandu sesi tutorial membahas soal-soal atau mengulang materi

perkuliahan untuk mempersiapkan peserta menghadapi ujian.

2. Membantu kesulitan yang dihadapi oleh peserta ketika mengerjakan

latihan. Membahas latihan setelah

3. Memeriksa tugas & quiz (baik programming maupun tertulis) untuk

anggota kelompok tutorialnya.

4. Membantu menjawab pertanyaan mahasiswa mengenai kuliah Struktur

Data & Algoritma di SCeLE, termasuk mengenai tools dan bahasa

pemrograman yang digunakan.

5. Membantu persiapan teknis worksheet, quiz, ataupun tugas

pemrograman.

Page 11: BRP_SDA_2013_2014_Term_2_v1

Matriks Kegiatan Perkuliahan (masih dapat berubah)

Minggu Materi kuliah Sesi Tutorial * Tugas prog

1 Java + OOP review Lab1

2 Analisis algoritma Lab2

3 Konsep ADT, Java Collections API + Java Generics Lab3

4 Pemrograman rekursif Klinik Tugas 1

TUGAS 1 5 Pemrograman rekursif Lab4

6 Algoritma sorting & analisisnya Kuis1

7 Implementasi ADT linier: List, Stack, Queue Review UTS

UTS

8 ADT Tree: konsep, implementasi, tree traversal -

9 ADT Tree: Binary Search Tree, AVL tree Lab5

10 ADT Tree: B-Tree, Red-Black Tree Kuis2

TUGAS 2 11 ADT Tree: Binary Heap, application: Huffman code Klinik Tugas 2

12 Graph representation Lab6

13 Graph algorithms lab7

14 Hashtables Kuis3

UAS

Topik Lab:

1. Lab1: Java Review

2. Lab2: Java Review

3. Lab3: Analisis Algoritma

4. Lab4: Rekutsif, ADT, Collections

5. Kuis1: Analisis algoritma s.d. rekursif (Mini UTS di Lab)

6. Lab5: Sorting, Linked List, Stack, Queue

7. Kuis2: Sorting, Linked List, Stack, Queue

8. Lab6: Binary Tree, BST, Heap, Huffman

9. Lab7: Graph Representation

10. Kuis3: Binary Tree, BST, Heap, Graph Representation, BFS, DFS

* Mahasiswa akan mendapatkan dua jadwal lab setiap minggunya. Satu jadwal untuk pengerjaan di

Lab computer, satu jadwal untuk pembahasan di kelas.

Page 12: BRP_SDA_2013_2014_Term_2_v1

Bagian 5

EVALUASI HASIL PEMELAJARAN

Bentuk/jenis instrumen:

1. Lab dan Kuis Singkat – Individu (7 kali)

2. Kuis Pemrograman – Individu (3 kali)

3. Tugas Pemrograman – Individu (2 kali)

4. Kuis Online – Individu (14 kali)

5. Ujian Tertulis – Individu (2 kali, UTS dan UAS)

Masing-masing penilaian untuk tiap instrumen dalam skala 0-100.

Pemetaan menjadi nilai huruf mengikuti acuan umum tabel berikut:

Nilai Huruf Rentang Nilai Keterangan

A 85 ≤ ..

A- 80 - 84

B+ 75 -79

B 70 -74

B- 65 - 69

C+ 60 - 64

C 55 - 59 Batas Lulus

D 54 - 40 Tidak Lulus

E .. ≤ 39 Tidak Lulus

Persentase kontribusi nilai:

Lab @ 2% + 1% bila lengkap 15.00%

Tiga Kuis Pemrograman 12.00%

14 Kuis Online 3%

Dua Tugas Pemrograman @ 10% 20.00%

Ujian Tengah Semester 25.00%

Ujian Akhir Semester 25.00%

Page 13: BRP_SDA_2013_2014_Term_2_v1

Bagian 6

TATA TERTIB PERKULIAHAN

Kehadiran:

Minimal kehadiran mengikuti aturan yang berlaku. Bila sakit atau berhalangan

hadir kuliah, harus disertai surat dan penjelasan.

Keterlambatan:

Keterlambatan hadir saat kuliah mengikuti aturan yang berlaku. Seluruh kuis,

latihan dan tugas wajib dikerjakan dikumpulkan pada waktunya.

Pengumpulan yang terlambat tidak dinilai. Evaluasi latihan, kuis atau tugas

diharapkan dapat diberikan kepada mahasiswa dalam waktu 2 pekan.

Kejujuran Akademis:

Seluruh mahasiswa harus memahami dan menerapkan kejujuran akademis.

Pelanggaran seperti mencontek, plagiat dalam skala apapun akan ditindak

tegas dan tercatat dalam daftar pelanggaran akademis.

Tim pengajar berhak memberikan nilai nol atau nilai E apabila ditemukan

tindak plagiarism terhadap semua bentuk evaluasi (latihan, kuis, tugas,

maupun ujian). Mahasiswa diperbolehkan berdiskusi satu dengan yang lain,

namun tugas harus dikerjakan sendiri (tidak diperkenankan menuliskan

kolaborator namun hasil tugas sama persis, hanya mengganti nama variable,

letak method, dsb).

Page 14: BRP_SDA_2013_2014_Term_2_v1

Bagian 7

CONTOH SOAL EVALUASI

Contoh Latihan:

IKI20100 2008/2009 (Gasal): Struktur Data & Algoritma

Fakultas Ilmu Komputer, Universitas Indonesia

Worksheet 03 23 Oktober 2008

Template : WS03_Tree.java

Submission : WS03_Tree.java (melalui ranau.cs.ui.ac.id)

Deskripsi : Pada worksheet ini anda akan berlatih untuk membuat program rekursif pada tree. Sebagai latihan kita

akan mencoba membuat program yang dapat memberikan informasi sebuah tree. Informasi yang

diinginkan adalah:

1. Jumlah data

2. Tinggi tree

3. Jumlah data pada tiap level tinggi dimulai dari root (level 0).

Contoh, untuk tree berikut:

output yang diharapkan adalah:

9

3

1

2

4

2

Baris pertama berisi angka 9 yang menyatakan ada 9 data pada tree tersebut. Baris kedua, berisi angka

3 menyatakan tinggi tree tersebut adalah 3 (root berada pada tinggi 0). Sebanyak tinggi + 1 baris

selanjutnya, adalah banyaknya data pada tiap level dimulai dari root yang berada pada level 0, yaitu ada

1 elemen, pada level 1 ada 2 elemen, pada level 2 ada 4, dan pada level 3 ada 2 elemen.

Informasi mengenai bentuk dan isi sebuah tree dinyatakan dalam formal XML. XML (eXtensible

Markup Language) adalah sebuah format standar untuk menyimpan informasi yang kini sangat banyak

Page 15: BRP_SDA_2013_2014_Term_2_v1

digunakan di industri, dan bisa dikatakan merupakan contoh baik pengaplikasian struktur data tree yang

sudah kita pelajari di kuliah. Pada contoh diatas isi file XML adalah sebagai berikut:

<?xml version='1.0'?>

<root data="salak">

<left data="rambutan">

<left data="jeruk">

<right data="manggis"/>

</left>

<right data="apel"/>

</left>

<right data="durian">

<left data="mangga">

<left data="nangka"/>

</left>

<right data="pisang"/>

</right>

</root>

Untuk membantu anda, telah disediakan class yang sudah mendefinisikan struktur data binary node dan

binary tree, serta cara untuk membaca XML (dari input maupun dari file) dan membuat binary tree dari

dokumen XML tersebut. Anda tak perlu mengubah class tersebut.

Template program : WS03_Tree.java Telah disediakan template program dengan nama file WS03_Tree.java. Anda hanya perlu melengkapi

dan memperbaiki bagian program yang kosong saja. Bagian tersebut telah ditandai dengan tulisan:

/////////////////////////////

// PERBAIKI METHOD INI //

/////////////////////////////

Ada 4 method yang perlu anda lengkapi dan perbaiki, termasuk signature dari method nya bila perlu.

Method tersebut tidak perlu terlalu panjang isinya, tambahan antara 3-9 baris pada tiap methodnya

sudah cukup.

Anda dapat mencoba program anda dengan menjalankan perintah:

java WS03_Tree < binarytree1.xml

Sebelum program ini anda perbaiki outputnya hanyalah:

9

Silahkan perbaiki sehingga outputnya seperti yang diharapkan, dan submit dengan nama file yang sama

ke ranau.cs.ui.ac.id.

- Selamat Berlatih -

Page 16: BRP_SDA_2013_2014_Term_2_v1

Contoh Kuis Pemrograman:

IKI20100/IKI80110P – Struktur Data & Algoritma

2008/09 Semester Ganjil

Kuis Pemrograman 1: SIPERBAN

Kamis, 11 September 2008 (90 menit)

Musim hujan sudah mendekat, dan Jakarta kembali terancam tradisi tahunan: banjir! Untungnya,

pemerintah berusaha mengantisipasi ancaman tersebut. Namun demikian, untuk membuat perencanaan

yang matang, mereka harus mengetahui keadaan dan kebutuhan saluran pengaliran air. Bantuan anda

dibutuhkan untuk membuat SIPERBAN (SIstem PERencanaan anti-BANjir). Salah satu informasi

yang penting adalah mengetahui debit air pada pos pemantauan berbagai pintu air di sekitar Jakarta.

Untungnya, informasi debit air dari tahun-tahun sebelumnya bisa dipelajari. Secara umum, catatan

informasi debit air dinyatakan sebagai deretan bilangan bulat yang menyatakan selisih permukaan air

(dalam millimeter) dari waktu pencatatan sebelumnya (pencatatan diambil setiap jam). Pencatatan

dimulai relatif terhadap suatu titik normal yang ditandai dengan 0.

Sebagai contohnya, deret berikut:

-15 26 -4 5 -7 13 -21

20

menyatakan bahwa pada waktu pencatatan pertama, yakni mulai dari titik normal, permukaan air turun

15mm, lalu naik 26mm, lalu turun 4mm, dan seterusnya. Untuk mempersiapkan infrastruktur

menghadapi musim hujan yang akan datang, kita perlu menghitung berapakah jumlah peningkatan

debit air yang terbesar yang dapat terjadi pada suatu kurun waktu. Contohnya, untuk data di atas,

peningkatan debit air terbesar senilai 33mm terjadi antara jam ke-2 sampai dengan jam ke-6 (lihat data

yang digarisbawahi).

Buatlah sebuah program yang menerima input berupa informasi debit air seperti di atas, dan

kembalikanlah jumlah peningkatan debit air yang terbesar. Jika informasi debit air yang diterima

senantiasa bernilai negatif (artinya, permukaan air terus menurun), kembalikan nol. Format data berupa

n+1 buah baris, masing-masing berisi sebuah integer. Integer pada baris pertama berisi nilai n, lalu n

baris berikutnya berisi informasi debit air.

Namakan program anda Siperban.java. Semua input dan output program anda harus

menggunakan standard input dan standard output seperti pada worksheet 1. Pada source code program

anda, tuliskanlah:

Informasi class dan method mengikuti aturan javadoc,

komentar serinci mungkin yang menjelaskan cara kerja program anda!

Cantumkan juga dalam komentar analisa berapakah running time program yang anda submit

menggunakan notasi Big-Oh, dan

jelaskan secara singkat mengapa demikian!

Selamat bekerja!

Page 17: BRP_SDA_2013_2014_Term_2_v1

Contoh Ujian Tengah Semester:

Penting: Cakupan Materi Ujian Tengah semester bisa berbeda dari contoh tahun sebelumnya.

Hal ini disesuaikan dengan cakupan materi yang sudah diberikan diperkuliahan.

UJIAN TENGAH SEMESTER – KODE A

IKI20100 – STRUKTUR DATA DAN ALGORITMA - 2008

FAKULTAS ILMU KOMPUTER – UNIVERSITAS INDONESIA

Rabu, 22 Oktober 2008, Jam: 08.00 – 09.40 (100 menit)

Sifat ujian: Tutup Buku

Kerjakan soal-soal berikut pada lembar jawaban. Anda boleh saja mengerjakan yang anda anggap

mudah terlebih dahulu. Tulislah kode ujian di pojok kanan atas halaman pertama lembar jawaban!

1. Anda telah berhasil membuat sebuah program yang menyelesaikan sebuah permasalahan

dengan menerapkan teknik divide and conquer. Dalam program anda, pada setiap

pemanggilan rekursif, input selalu dibagi empat bagian yang relatif sama besar. Proses

pembagian input memiliki kompleksitas O(1). Hasil dari pemanggilan rekursif keempat

bagian tersebut nantinya digabung menjadi satu. Proses penggabungannya juga memiliki

kompleksitas O(1). Penyelesaian base case, pada saat masalahnya sudah sedemikian kecilnya

sehingga tidak perlu lagi pemanggilan rekursif, juga memiliki kompleksitas O(1).

a) Tentukan kompleksitas program anda! Berikan sedikit penjelasan, lengkap dengan asumsi

apa saja yang anda ambil.

b) Hasil uji coba dengan input berukuran 64 membutuhkan waktu 10 detik. Pada kondisi

sesungguhnya, ukuran input dapat berkisar antara 10.000 hingga 20.000, hitunglah

perkiraan waktu yang dibutuhkan pada kondisi sesungguhnya!

2. Amati definisi method-method berikut:

public static void methodA (int n)

{

for (int ii = 0; ii < n; ii++)

panggilA (ii);

}

public static int methodB (int n)

{

int sum = 0;

for (int ii = -n; ii < n; ii++)

for (int jj = 0; jj < 100; jj++)

sum++;

return sum;

}

public static int methodC (int n)

{

int sum = 0;

methodA (n);

for (int ii = -n; ii < n; ii++)

for (int jj = 0; jj < 100; jj++)

sum++;

return sum;

}

Jika diketahui bahwa kompleksitas method panggilA(int n) adalah O(n), tulislah

kompleksitas methodA, methodB, dan methodC dalam big-Oh notation!

3. Anda diberikan sekumpulan titik-titik P = p1, p2, p3 … pn yang terletak pada garis lingkar

sebuah lingkaran. Lingkaran tersebut memiliki pusat p0 pada posisi koordinat (0, 0). Setiap

titik diwakili oleh sebuah instance class Titik, dengan definisi sebagai berikut:

Page 18: BRP_SDA_2013_2014_Term_2_v1

public class Titik

{

public double x;

public double y;

}

a) Buatlah sebuah method yang menentukan apakah ada dua buah titik dalam P yang bila

ditarik garis akan membentuk garis diameter lingkaran (dengan kata lain, kedua titik

tersebut, ditambah p0, terletak pada satu garis lurus). Ia mengembalikan true jika ada, dan

false jika tidak. Method anda harus memiliki signature sebagai berikut:

public boolean adaPasanganSegaris(Set<Titik> P)

b) Tentukan kompleksitas dari implementasi yang anda buat di atas. Berikan sedikit

penjelasan, lengkap dengan asumsi apa saja yang anda ambil.

4. Jelaskan dengan singkat arti dari istilah-istilah berikut:

a) Dynamic binding

b) Abstract data type

c) Repeated halving principle

d) Inductive case

e) Big-omega notation

5. Amati definisi parsial class Kata berikut:

public class Kata

{

String ejaan; // mis: "kucing", "berlari", "lucu"

String tipeKata; // mis: "benda", "kerja", "sifat"

int frekuensi; // mis: 412, 1599, 685

}

Anda terlibat sebuah tim yang mengembangkan sebuah kamus bahasa Indonesia, dan telah

ditentukan sebelumnya bahwa masing-masing kata akan direpresentasikan oleh sebuah object

Kata. Agar kamus tertata rapi, diharapkan data tersebut selalu tersimpan terurut berdasarkan

ejaan, kemudian tipeKata, dan kemudian frekuensi, di mana kata dengan frekuensi

yang terbesar didahulukan. Anda hanya bertanggungjawab mengimplementasikan class Kata.

Aplikasi kamusnya sebenarnya dikembangkan oleh rekan-rekan anda, dan anda tidak tahu

persis detailnya, tetapi anda sudah dikabarkan bahwa mereka akan menggunakan fasilitas

struktur data TreeSet yang tersedia dalam Java Collections Framework. Anda juga tahu

bahwa untuk memanfaatkan fasilitas ini, class Kata anda harus meng-implementasikan

interface Comparable!

Tulislah definisi class Kata yang anda rasa memenuhi deskripsi di atas. Setidaknya anda

perlu sertakan definisi constructor yang layak, serta implementasi method equals dan

compareTo. Jelaskan pula alasan modifikasi ataupun penambahan yang anda lakukan!

6. Anda diminta untuk mengimplementasikan algoritma binary search untuk mencari posisi

sebuah String pada sebuah ADT List<String> sesuai dengan interface List pada Java

Collections Framework.

a) Lengkapi definisi implementasi algoritma dengan signature di bawah ini. Anda boleh

berasumsi bahwa isi list sudah terurut, nilai data bukan null. Method ini harus

mengembalikan posisi kemunculan data (kalau muncul lebih dari sekali, anda bebas

mengembalikan yang mana saja) atau -1 jika data tersebut tidak muncul.

int binarySearch(List<String> list, String data)

Page 19: BRP_SDA_2013_2014_Term_2_v1

b) Menurut anda, implementing class mana yang lebih cocok digunakan: LinkedList atau

ArrayList? Jelaskan jawaban anda!

7. Perhatikan program berikut. Seharusnya program ini melakukan operasi sorting pada array,

namun implementasinya masih ada yang salah.

public static void sortError(int a[])

{

int min=0;

for (int i = 0; i < a.length; i++)

{

for (int j = i + 1; j < a.length; j++)

if (a[j] < a[i])

min = j;

int temp = a[min];

a[min] = a[i];

a[i] = temp;

}

}

a) Perbaiki program tersebut sehingga dapat melakukan sorting dengan benar. Tugas anda

adalah memperbaiki, bukan menggantikan dengan metode sorting yang lain. Usahakan

melakukan perubahan yang seminimal mungkin.

b) Tentukan algoritma sorting apakah yang digunakan dan bagaimana kompleksitas waktu

algoritma tersebut.

c) Bila anda hanya memperhatikan pertukaran elemen yang terjadi pada algoritma di atas,

bagaimanakah kompleksitasnya?

Selamat bekerja!