Buku Rancangan Pengajaran IKI20100 Struktur Data dan Algoritma Fakultas Ilmu Komputer Universitas Indonesia 1. INFORMASI UMUM Nama Kuliah : Kode Kuliah : Beban Kuliah : Implementasi SKS : Buku Acuan Utama : Pengajar : Jadwal Kelas: Asisten : Ruang Konsultasi : Struktur Data dan Algoritma IKI 10400 4 SKS (Satuan Kredit Semester) 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 Mark Allen Weiss, Data Structures and Problem. Solving Using Java (3rd edition), Addison Wesley, 2006. Suryana Setiawan, Ruang 3215, [email protected] Tisha Melia, Ruang 1232, [email protected] Kelas A: Selasa, 13.00-14.40 di 2.2304 Kamis, 13.00-14.40 di 2.2304 Kelas B: Selasa, 08.00-09.40 di 2.2404 Kamis, 08.00-09.40 di 2.2404 Kelas C: Selasa, 13.00-14.40 di 2.2404 Kamis, 13.00-14.40 di 2.2404 Kelas D: Selasa, 08.00-09.40 di 2.2303 Kamis, 08.00-09.40 di 2.2303 tim asisten dengan koordinator Ricky Suryadharma ([email protected]) Lab Babe, Gedung A Lantai 1 Ruang: 1110 2. TUJUAN PEMBELAJARAN Deskripsi Mata Kuliah: Matakuliah ini mengajarkan teknik-teknik dasar untuk abstraksi data, algoritmaalgoritma akses dan manipulasi struktur-struktur abstraksi tersebut; serta pengantar analisis kompleksitas pemakaian storage dan waktu dalam eksekusi algoritma-algoritma tersebut. Tujuan Perkuliahan: a) b) c) d) Mahasiswa memahami pentingnya representasi data. Mahasiswa dapat memilih struktur data yang tepat untuk permasalahan yang diberikan. Mahasiswa memahami perbedaan kinerja algoritma. 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. 3. MATERI PEMELAJARAN No 1-3 Pokok Bahasan Review Java dan DPBO (Topik saat e-learning) 4 Analisa Algoritma 5 Rekursif (review) 5 Sorting (partly review) Subpokok bahasan Tipe dan Variabel Flow Control Array Eksepsi Class dan Object Inheritance Abstract Class dan Interface Polymorphism Pengertian ADT Pemisahan spesifikasi 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 Pengertian Analisa Algoritma Cara Mengukur Algoritma Notasi Perbandingan Orde Fungsi Contoh: Max. Contiguous Subsequence Sum Algoritma Logaritme dan contoh Pengertian rekursif Model eksekusi algoritma rekursif Aturan Rekursif Pembuktian dengan induksi Efisiensi pada rekursif algoritma Contoh: Fibonacci Divide and conquer Backtracking Contoh: Maze, N-Queen Problem, MCSS Pengertian umum sorting, ide dasar algoritma, contoh eksekusi, analisa dari metode sorting: Bubble sort, Selection sort, insertion Rujukan Buku teks Bab: 1,2,3,4, dan 6 Tugas/WS/Q Tugas#0: Coba Submission Buku teks Bab: 5 Worksheet#1: mengukur performance keempat algoritma CSS Buku teks Bab: 7 Quiz#1: Pilihan berganda dan/atau jawaban singkat: analisis algoritma, rekursif dan sorting Buku teks Bab: 8 Tugas#1: Penggunaan Generics dengan obyektif menguasai generics dan collections 6 7 9 10 sort, shell sort, merge sort, quick sort (fokus pada insertion & quicksort) Implementasi: ArrayList List, Stack & Linked-list Based Stack, Queue Queue: Double ended queue Trees Pengertian Tree Rekursif pada tree Tree traversal (inorder, preorder, postorder, levelorder) Aplikasi Tree: Huffman Code Tutorial Pra UTS & UTS Binary Search Pengertian dan motivasi Binary Search Tree Tree (insert & delete) AVL Tree (insert) Binary Search AVL Tree (delete) Tree (2) B Tree 11 Graf 1112 Graf (2) 13 Binary Heap 14 Hash Table 15 16 Review UAS Representasi graf Algoritma pada graf: BFS, DFS Minimum Spanning Tree (Kruskal, Prim) Shortest path (Dijkstra, Floyd-Warshall) Maximum Flow (netflow) Pengertian dan motivasi Implementasi Binary Heap Priority Queue Heapsort Pengertian dan motivasi Hash Function Linear Probing Quadratic probing Analisa perbandingan Buku teks Bab: 15,16,17 Buku teks Bab: 12,18 Tugas#2: stack URL Buku teks Bab: 19 Worksheet#3: melengkapi method BST Quiz#2: pen & paper quiz on AVL tree & B+Tree Worksheet#4: BFS/DFS Tugas# 3:graph problem Buku teks Bab: 19 Buku teks Bab: 14 Buku teks Bab: 14 Buku teks Bab: 21 Buku teks Bab: 17 Worksheet#2: tree traversal. Worksheet#5: antrian berprioritas sederhana Quiz#3: implementasi hash table Worksheet: Worksheet/Latihan dapat berbentuk latihan pemrograman yang dikerjakan pada waktu tutorial dan dikumpulkan saat tutorial berakhir. Latihan dapat juga berbentuk tertulis (melengkapi lembar kerja) yang dikerjakan pada waktu kuliah dan dikumpulkan setelah kuliah berakhir. Selama pengerjaan latihan, mahasiswa dapat bertanya dan berdiskusi kepada dosen, tutor atau teman. Namun pengerjaan/penulisan tetap dilakukan secara individu. Quiz: 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 system online grader pada mesin ranau.cs.ui.ac.id. Setiap peserta kuliah akan diberikan account khusus. 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. Tugas: 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. Pada tugas pemrograman tertentu selain memiliki komponen penilaian seperti kuis, mahasiswa juga dilatih untuk membuat dokumentasi program dalam berkas terpisah (bukan bagian dari penulisan komentar didalam program). Aturan Umum Penilaian Kuis atau Tugas Pemrograman: Automatic Grader score : 50% White box review: 25% Komentar dan dokumentasi : 25% Aturan anti-plagiarism dalam pemrograman: - - Mahasiswa diperbolehkan diskusi dan tukar ide (garis besar algoritma) tetapi coding dilakukan secara individu. Mengutip source code hanya boleh dari textbook, slide, template atau materi yang diberikan (source code hasil kerja orang lain selain dari sumber yang disebutkan di atas, sama sekali tidak boleh disalin ke dalam source code anda). Yang melanggar aturan di atas baik pelaku penyontekan maupun pemberi contekan (kesempatan mencontek) akan dikenakan hukuman dengan pemberian nilai 0 untuk tugas/quiz/worksheet tersebut., dan jika dilakukan lebih dari satu kali akan mendapat sanksi ketidaklulusan di kuliah ini. 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. 2. 3. 4. 5. Internet (I) Presentasi Multimedia (M) Perangkat Lunak Simulasi dan Animasi (SA) White board, beamer (WB) Diktat dan Lembar Kerja (LK) Tutor: Akan disediakan seorang tutor untuk setiap kelompok tutorial yang terdiri dari 20 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. EVALUASI HASIL PEMELAJARAN Bentuk/jenis instrumen: 1. 2. 3. 4. Latihan – Individu (5 kali) Kuis– Individu (3 kali) Tugas Pemrograman – Individu (3 kali) Ujian Tertulis – Individu (2 kali, UTS dan UAS) Masing-masing penilaian untuk tiap instrumen dalam skala 0-100. Pemetaan menjadi nilai huruf secara tentative akan mengikuti acuan umum tabel berikut: Nilai Huruf Rentang Nilai Keterangan Huruf A AB+ B BC+ C CD E .. Rentang Nilai 85 ≤ .. 80 – 84 75 -79 70 -74 65 – 69 60 – 64 55 - 59 Batas Lulus 50 - 54 Tidak Lulus 40 - 49 Tidak Lulus ≤ 39 Tidak Lulus Persentase kontribusi nilai: Lima Worksheet @ 2% 10% Tiga Kuis @ 5% 15.00% Tiga Tugas Pemrograman @ 10% 30.00% Ujian Tengah Semester 20.00% Ujian Akhir Semester 25.00% 6 TATA TERTIB PERKULIAHAN Kehadiran: 1. Kuliah: Minimal kehadiran mengikuti aturan yang berlaku. (75% minimum kehadiran tatap muka di kelas) Bila sakit atau berhalangan hadir kuliah, harus disertai surat dan penjelasan dan pemberitahuan sebelum kuliah dimulai. Peserta yang persentasi kehadiran-nya kurang, tidak diperkenankan mengikuti ujian akhir semester. 2. Tutorial: kehadiran mengikuti tutorial akan dicatat, dan akan menjadi pertimbangan pemberian nilai bonus untuk nilai yang diperbatasan. 3. Worksheet/Quiz: mahasiswa harus mengikuti pengerjaan worksheet/quiz di lab yang telah ditentukan, keikutsertaan dari tempat lain selain lab tersebut pengerjaan worksheet/quiz ybs tidak akan dinilai. 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. 7 CONTOH SOAL 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: 6. Jumlah data 7. Tinggi tree 8. 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 -