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) { for (int i=0; i<n; i++) for (int j=0; j<n; j+=n/5) xx();
}
void method2(int n) { if (n<=0) xx();
else method2(n – n/5);
}
void method3(int n) { if (n > 0) {
for (int t = 0; t < n; t++) xx();
method3(n/2);
} }
• method1(n)?
Walaupun dua for‐loop dengan iterator dari 0 hingga n, for‐loop dalam beriterasi dalam jumlah iterasi yang konstan (tidak bergantung harga n) yaitu sekitar 5 kali sehingga method memiliki kompleksitas O(n).
23 orang yang menjawab benar
• method2(n)?
Dalam soal ini ada salah ketik (seharusnya tertulis “if (n <= 1) xx();” ) sehingga dengan soal tsb jika dijalankan akan loop tanpa akhir (saat harga n = 1 maka pemanggilan method2(1) akan dilakukan terus menerus sehingga jika anda menjawab tak berhingga anda benar. Jika anda asumsikan bahwa (n‐n/5) dilakukan secara bilangan real maka setelah di casting dengan integer menjadi 0, akan berhenti di n = 0 dengan kompleksitas O(log n). (Kedua jawaban adalah benar).
36 orang yang menjawab benar
• method3(n)?
Sepintas seperti O(n log n) tetapi jumlah pemanggilan xx() dilakukan sebanyak n + n/2 + n/4 + ... = 2n, jadi merupakan O(n)
29 orang yang menjawab benar
Manakah sifat insertion sort (pengurutan menaik) yang benar mengenai kompleksitas waktunya?
(A) Best case terjadi pada kasus data terurut menaik (B) Best case terjadi pada kasus data terurut menurun (C) Best case terjadi pada kasus data terurut acak (D) Semua kasus di atas sama saja
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.
•
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
class DLLNode { Object data;
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;
….
prev
next
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.
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;
}
…. ….
current head
tail
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..