Ujian Tengah Semester Struktur Data dan Algoritma Fakultas Ilmu Komputer, Universitas Indonesia 9 November 2006 Bagian A (total 75 point) Petunjuk: Jawablah ke‐25 pertanyaan berikut ini dan isikan jawaban anda pada lembar jawaban yang disediakan sesuai dengan nomor balon pada pertanyaan tersebut. Pada pertanyaan dengan jawaban pilihan ganda, jawab dengan nomor pilihannya. Setiap jawaban benar bernilai 3. Jawaban salah (termasuk pilihan ganda) bernilai 0. Jika method xx() memiliki kompleksitas waktu O(1), tuliskan kompleksitas waktu dari method‐ method berikut ini. void method1(int n) { void method2(int n) { void method3(int n) { for (int i=0; i
0) { for (int j=0; j
Insertion sort pada data yang sudah terurut menaik hanya akan melakukan iterasi luar saja yaitu O(n) sementara lainnya O(n2). Jawaban A. 95 orang yang menjawab benar Manakah sifat heapsort (pengurutan menaik) yang benar mengenai kompleksitas waktunya? (A) Worse case terjadi pada kasus data terurut menaik (B) Worse case terjadi pada kasus data terurut menurun (C) Worse case terjadi pada kasus data terurut acak (D) Semua kasus di atas sama saja Algoritma heapsort adalah melakukan heapify untuk kondisi apapun dari data dan kemudian satu demi satu diurutkan dan heap akan direheapify sehingga untuk semua kasus sama sana. Jawaban D. 51 orang yang menjawab benar Pada data 5, 4, 3, 2, 1 (terurut terbalik), dilakukan pengurutan menaik dengan bubble‐sort. • Selesai iterasi/pass pertama urutan data menjadi? Soal ini tidak menunjukkan arah pergeseran (walaupun di sebagian besar buku teks adalah ke kanan), jawaban dengan asumsi ke kiri (hasilnya 4, 3, 2, 1, 5) maupun ke kanan (1, 5, 4, 3, 2, 1) adalah benar. 89 orang yang menjawab benar Diberikan array berisi data sbb: 54, 68, 86, 42, 35, 46, 88, 25, 19, 75. • Jika array dipandang sebagai suatu complete binary tree (yang direpresentasikan dalam array tersebut), maka preorder traversal pada tree menghasilkan urutan? 54, 68, 42, 25, 19, 35, 75, 86, 46, 88 71 orang yang menjawab benar • Jika akan dilakukan heapsort pada array tersebut, setelah dilakukan operasi heapify (tahap pembentukan heaptree) dari algoritma heapsort, maka isi array adalah? Ada dua varian jawaban (karena tidak disebutkan pengurutan menaik/menurun) 19, 25, 46, 42, 35, 86, 88, 68, 54, 75 (untuk pengurutan menurun) 88, 75, 86, 42, 68, 46, 54, 25, 19, 35 (untuk pengurutan menaik) 34 orang yang menjawab benar • Setelah diperoleh 2 data terurut di kanan serta terjadi reheapify pada heaptree tersisa, maka isi array (seluruhnya) adalah? 35, 42, 46, 54, 75, 86, 88, 68, 25, 19 (untuk pengurutan menurun) 75, 68, 54, 42, 19, 46, 35, 25, 86, 88 (untuk pengurutan menaik) 15 orang yang menjawab benar Sejumlah data disusun ke dalam binary search tree yang mula‐mula kosong dengan urutan sbb: 43, 37, 64, 56, 94, 52, 46, 11, 53, 45. • Tinggi dari tree tersebut adalah?
5 83 orang yang menjawab benar •
Leaf node dengan depth terbesar adalah node yang berisi harga? 45 85 orang yang menjawab benar
Sejumlah data disusun ke dalam AVL tree yang mula‐mula kosong dengan urutan sbb: 43, 37, 64, 56, 94, 52, 46, 11, 53, 45. • Rotasi pertama terjadi pada penyisipan data manakah? 52 92 orang yang menjawab benar • Jumlah leaf node adalah? 4 72 orang yang menjawab benar • Harga pada root adalah adalah? 52 56 orang yang menjawab benar • Jika dihapus 53, maka apakah yang terjadi? (A) DRR, (B) SRR, (C) DLR, (D) SLR, (E) Tidak terjadi rotasi D (SLR) 30 orang yang menjawab benar Sejumlah data unik disusun ke dalam AVL yang mula‐mula adalah kosong, • Jika data berjumlah 10 maka harga‐harga tinggi AVL tree tsb yang mungkin adalah? 3 78 orang yang menjawab benar • Jika data berjumlah 100 maka harga‐harga tinggi AVL tree tsb yang mungkin adalah? 6 , 7, 8 50 orang yang menjawab benar • Jika leaf yang terbentuk berjumlah 100 maka harga‐harga tinggi AVL tree tersebut yang mungkin adalah 7, 8, 9, 10 35 orang yang menjawab benar Jika sejumlah data disusun ke dalam 2‐3 tree yang mula‐mula kosong. • Jika data berjumlah 10 maka harga tinggi 2‐3 tree tersebut yang mungkin adalah? 2 57 orang yang menjawab benar
•
Jika data berjumlah 100 maka harga tinggi 2‐3 tree tersebut yang mungkin adalah? 4 atau 5 15 orang yang menjawab benar
Sejumlah data disusun ke dalam 2‐3 tree yang mula‐mula kosong dengan urutan sbb: 43, 37, 64, 56, 94, 52, 46, 11 • Root node berisi harga (harga‐harga)? 52 57 orang yang menjawab benar • Harga 64 berada pada node‐2 atau node‐3? Node 2 82 orang yang menjawab benar • Harga 11 berada pada leaf node atau internal node? Leaf node 99 orang yang menjawab benar • Jika dilakukan penghapusan 94 maka tinggi 2‐3 tree menjadi? 1 48 orang yang menjawab benar • Setelah penghapusan 94 tsb root kemudian berisi harga (harga‐harga)? 43 dan 52 23 orang yang menjawab benar Bagian B (Total 25 point) Petunjuk: Jawaban bersifat essay, jawab dengan singkat, jelas namun dengan tulisan rapi untuk memudahkan pemeriksaan pada lembar jawaban yang disediakan. Berikut ini suatu class node untuk doubly linked‐list next class DLLNode { Object data; prev DLLNode prev, next; …. } Suatu class doubly linked list tersusun oleh node‐node DLLNode tersebut tanpa dummy node di awalnya (sentinel). Node pertama direferensi oleh variabel dengan nama head dan node terakhir direferensi oleh variabel dengan nama tail sbb. Class DoublyLinkedList { DLLNode head, tail; …. }
Suatu method dalam class DoublyLinkedList untuk dapat menghapus suatu elemen dalam doubly linked list tersebut akan disusun dengan diketahui node yang akan dihapus ditunjuk oleh variabel dengan nama current. current head …. …. tail 1. (Nilai 8) Tuliskan deretan perintah (hanya deretan perintah!) untuk menghapuskan node current tsb untuk kasus dimana (pasti!) current bukan head maupun tail dan linked‐list tidak kosong (deretan perintah tidak perlu melakukan pemeriksaan untuk kasus‐kasus lain!). current.prev.next = current.next; current.next.prev = current.prev; 2. (Nilai 17) Dapatkan seluruh kasus (sesedikit mungkin, namun menyeluruh) yang bisa terjadi selain kasus di atas, serta deretan perintah (seperti no 1 di atas) penghapusan terkait dengan masing‐masing kasus tersebut (misalnya kasus current == head, kasus kosong, dlsb). if (head == null) { //kasus losong … // tidak melakukan apa‐apa } else if (head == tail) { // kasus 1 node If (head == current) { head = tail = null; } } else if (head == current) { // current ada di awal head = head.next; head.prev = null; } else if (tail == current) { // current ada di akhir tail = tail.prev; tail.next = null; } else { // kasus no 1 di atas current.prev.next = current.next; current.next.prev = current.prev; }
Catatan: Untuk kedua jawaban tsb, node yang ditunjuk current tidak di apa‐apakan, hanya “dikeluarkan” dari linked‐list. Selanjutnya bisa saja node yang ditunjuk current dihilangkan dengan menambahkan perintah memberi harga null pada variabel current atau memindahkan current pada node lain dalam linked list..