BRP_SDA_2013_2014_Term_2_v1
description
Transcript of BRP_SDA_2013_2014_Term_2_v1
Buku Rancangan Pengajaran
IKI10400
Struktur Data dan Algoritma
Fakultas Ilmu Komputer
Universitas Indonesia
Februari 2014
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
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
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.
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
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
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
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%
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)
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.
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.
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%
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).
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
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 -
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!
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:
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)
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!