 |
 |
| |
|
Search Engine |
|
Manfaatkan Google untuk memperoleh sejumlah informasi
yang Anda inginkan dalam hansmichael.com.
|
|
| Kutipan |
Kita telah menjadi produk dari suatu budaya yang tidak mengembangkan ketrampilan daya ingat. (Renungan Harian, 22 Oktober 2009)
Times Magazine
|
|
|
Tokoh Hari Ini
|
|
Blaise Pascal
Blaise Pascal lahir pada 19 Juni 1623 di Rouen, Perancis. Ia meninggal dunia pada tahun 1666 di Perancis.
Pascal adalah ahli matematika, fisika, penulis prosa, dan dikenal sebagai salah satu filsuf Kristen abad pertengahan. Pascal menemukan mesin penjumlah yang mengatur penambahan carry antar digit dan segitiga Pascal yang memuat koefisien-koefisien deret binomial. Ia juga penemu roda gerobak sampai roda rolet. Pascal juga meletakkan dasar bagi teori modern probabilitas: hukum Pascal untuk Tekanan. Menariknya, walaupun ia ahli dalam berbagai bidang sains, pemikiran religiusnya sebagai filsuf Kristen menekankan doktrin yang lebih mengutamakan pengalaman dengan Tuhan lebih melalui hati daripada melalui nalar.
|
|
|
|
|
Algoritma dan Pemrograman 2 (IC314)
Contoh Soal
| 1. |
Algoritma Backtracking : "Habis
Dibagi". Angka-angka 1,2,3,4,5,6,7,8,9
dapat disusun dalam suatu urutan tertentu. Kesembilan angka harus
dipergunakan semua dengan kata lain tidak boleh dipakai
lebih dari satu kali, sehingga :
-
bilangan yang terbentuk oleh dua angka yang pertama
habis dibagi 2
-
bilangan yang terbentuk oleh tiga angka yang
pertama habis dibagi 3
-
bilangan yang terbentuk oleh empat angka yang
pertama habis dibagi 4
-
dan demikian seterusnya sampai sembilan angka
Perlu diketahui bahwa satu-satunya bilangan dalam range
100000000 s.d. 999999999 yang memenuhi sifat ini adalah 381654729.
Untuk mendapatkan susunan bilangan yang benar, harus
dilakukan trial-error untuk memeriksa apakah semua susunan digit mulai
dari 2,3,4,..... 9 memenuhi syarat tersebut di atas atau tidak. Hal ini
dapat diatasi dengan menggunakan metode backtracking.
-
Untuk mengatasi masalah ini tulislah terlebih dahulu
sebuah fungsi boolean (outputnya hanya true atau false):
FUNCTION habis(bil[], jumlevel).
Fungsi ini akan memeriksa apakah susunan
digit sebanyak jumlevel
yang tersimpan dalam vektor bil[]
memenuhi syarat, artinya untuk semua nilai i=2,3,4,.....jumlevel, apakah
bilangan yang terbentuk oleh i angka pertama habis dibagi oleh
i ? Contoh:
-
Jika bil[]
berisi 1, 2, 6 dan leveldigit=3
; maka output fungsi ini true
karena 12 mod 2 = 0, dan 126 mod 3 = 0.
-
Jika bil[ ]
berisi 2, 4, 3, 6, 5 dan leveldigit=5
; maka output fungsi ini juga true
karena 24 mod 2, 243 mod 3, 2436 mod 4; dan 24365 mod 5 semuanya
menghasilkan angka 0 (habis dibagi).
-
Jika bil[ ]
berisi 2, 4, 3, 8 dan leveldigit=4
; maka output fungsi ini false
karena walaupun 24 mod 2=0; 243 mod 3=0; tetapi 2438 mod
4 <> 0.
-
Tulis abstraksi algoritma backtracking untuk
mendapatkan susunan bilangan yang habis dibagi.
Bantuan untuk mempermudah pekerjaan Anda: Abstraksi
dan algoritma detil yang dibuat harus menggunakan vektor bil[]
sebanyak 9 elemen untuk menampung hasilnya. Sebagai contoh bila
algoritma ini akan menghasilkan bilangan 381654729, maka vektor bil[]
akan berisi 3,8,1,6,5,4,7,2,9.
Selain itu gunakan pula FUNCTION
habis(bil[], jumlevel).
-
Dari abstraksi yang telah dibuat, kembangkan untuk menulis algoritma
(detil) backtrackingnya, dengan nama PROCEDURE
cobadigit(ke), dimana ke
adalah levelnya, mulai dari 1 sampai 9.
-
Tulis pula algoritma (lengkap) utama pemanggilnya, lengkap
dengan inisialisasi vektor bil[]
dan pencetakan hasilnya.
|
| 2. |
Subgoal yang Recursive: "The
Dashes and Stars Banner". Bendera
negara UNITED STATES OF AlphanuMERICA tersusun
dari sejumlah karakter dashes (-) dan stars (*) yang disusun silih
berganti dalam beberapa baris seperti tampilan berikut ini, sehingga
bendera ini sering disebut "The Dashes and Stars Banner":
----------------****************
k dashes diikuti k stars
--------********--------********
k/2 dashes diikuti k/2 stars
----****----****----****----****
... demikian seterusnya
--**--**--**--**--**--**--**--**
... digandakan dan dibagi 2
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
sampai panjangnya 1.
Berbasis konsep subgoal, tulis recursive procedure
DrawFlag(k), yang akan mencetak bendera negara tersebut mulai dengan k-dashes
dan k-stars. Diasumsikan nilai k selalu 2n untuk n=0,1,2,..... Validitas
k tidak perlu diperiksa lagi. |
| 3. |
Recursive: "Fungsi
Satu Baris Saja....." Perhatikan
subalgoritma function satu baris di bawah ini:
FUNCTION
max3 ( a, b, c)
1.
max3 <----- max(a, max(b, c))
2.
RETURN
-
Tulislah subalgoritma function max,
sehingga FUNCTION max3
dapat dipakai untuk mendapatkan nilai maksimal dari 3 buah bilangan
integer a, b, dan c? Sebagai contoh max(12, 17, 9) akan menghasilkan 17;
sedangkan max(14, 16, 18) akan menghasilkan 18.
Dengan memanfaatkan jawaban nomor (a). tulislah subalgoritma fungsi
untuk mendapatkan nilai maksimal dari 5 buah bilangan integer, dengan
nama max5.
Sebagai contoh max5(2, 17, 29, 18, 26) akan menghasilkan
29; sedangkan max5(74, 71, 50, 76, 88) akan menghasilkan 88.
|
| 4. |
State-Space Search : "Batu Hitam dan Batu Putih".
Terdapat sebuah kotak kayu dengan 5 (lima)
lubang. Sebuah lubang hanya dapat terdiri dari sebuah batu atau kosong.
Pada keadaan awal, 2 batu hitam diletakkan di lubang ujung kiri kotak,
sedangkan 2 batu putih diletakkan di lubang ujung kanan kotak. Sementara
sebuah lubang yang tepat di tengah kotak dibiarkan kosong.
Posisi batu hitam dan batu putih ingin
ditukar, sehingga 2 batu hitam diletakkan di lubang ujung kanan
kotak, sedangkan 2 batu putih diletakkan di lubang ujung kiri
kotak.
Akan tetapi sebuah batu hanya dapat dipindahkan dengan
cara:
Namun demikian pemindahan batu-batu ini masih dibatasi
dengan aturan berikut:
-
untuk sebuah batu hitam hanya dapat dipindahkan ke
arah kanan (menempati lubang di sebelahnya atau melompati), ke arah
kiri tidak diijinkan.
-
untuk sebuah batu putih hanya dapat dipindahkan ke
arah kiri (menempati lubang di sebelahnya atau melompati), ke arah
kanan tidak diijinkan.
Yang harus anda jawab atau lakukan:
-
Berapa jumlah rule/operator/move/action (alternatif
perpindahan state) yang harus didefinisikan untuk menyelesaikan
masalah ini dengan state-space search? Sebutkan setiap rule ini.
-
Gambarkan tree pencarian solusi (state-space
solution search tree) yang lengkap sampai level yang ke-3, jika
strategi Breadth First Search (BFS) diterapkan. Perhatikan bahwa root
tree dihitung sebagai level ke-0.
-
Pada tree tersebut terdapat sejumlah inert nodes,
yaitu state-state (sejumlah node) yang tidak dapat dikembangkan lagi
dengan rule manapun (mati). Arsirlah semua inert nodes dalam tree
jawaban nomor (b).
|
| 5. |
-
Tulis sub-algoritma procedure Recursive_Fibonacci_Search.
-
Terdapat sebuah vektor A[ ] yang telah tersorting
secara ascending order sejumlah 14 elemen integer : 04
29 29 34 47 55 55 55 67 76 76 76 98 98. Tunjukan
perbandingan-perbandingan yang dilakukan, termasuk perubahan alokasi
range pencarian data (perubahan variabel LOW dan HIGH) saat mencari
data x = 55 pada vektor A[] dengan menggunakan Recursive Fibonacci
Search.
|
| 6. |
Terdapat 25 mata
uang emas yang salah satu di antaranya palsu, karena lebih ringan. Dengan
hanya 3 (tiga) kali menimbang dengan menggunakan neraca keseimbangan nomor
urut mata uang yang palsu dapat diketahui. Tulislah Function Recursive
Weighted_Coin berdasarkan konsep divide and conquer untuk
mensimulasikan algoritma dalam menentukan nomor mata uang yang palsu. |
| 7. |
Ulangi algoritma pada soal nomor (6) di atas, juga dengan
divide and conquer, hanya tidak diketahui bahwa berat coin yang palsu
apakah lebih ringan atau lebih berat? Prinsipnya berat yang palsu berbeda
dengan semua lainnya yang asli.
|
| 8. |
-
Jelaskan dan tunjukkan perbedaan Sub
Goal, Hill-Climbing dan Working-Backward sebagai 3 (tiga)
konsep dasar penyelesaian masalah dengan menggunakan algoritma.
-
Berikan salah satu contoh problem dan
penyelesaiannya (tidak perlu algoritma) yang menuntut pemakaian
metode working backward.
|
| 9. |
Tunjukkan perubahan nilai LOW, HIGH, dan MID
untuk pencarian data x=33 pada vektor a[ ]: 98 93 82
78 57 57 49 40 37 33 33 15 12 11 11 10 dengan menggunakan:
-
Recursive Binary Search (yang dimodifikasi untuk
vektor descending).
-
Recursive Fibonacci Search (yang dimodifikasi untuk
vektor descending).
Perhatikan baik-baik bahwa data telah diurutkan secara descending
order.
|
|
10.
|
TuliTulis
sebuah recursive function multiply(M,N), yang berguna untuk
mendapatkan hasil perkalian M x N, tanpa menggunakan operator perkalian.
Perhatikan bahwa sebuah perkalian pada prinsipnya adalah penjumlahan yang
berulang. Sebagai contoh untuk M=5 dan N=4, hasil perkalian adalah
5+5+5+5.
|
| 11. |
Tulis
sebuah recursive procedure
maxmin(V[ ], awal, akhir, max, min),
yang berguna untuk mendapatkan nilai maximum dan nilai minimum dari vector
V[ ] mulai elemen ke awal sampai elemen ke akhir.
Proses recursive dilakukan dengan membagi vector menjadi dua bagian yang
sama besar. Sedangkan nilai tengah diperoleh melalui rumus tengah
ß
(awal+akhir) DIV 2.
|
| 12. |
Gunakan susunan 11
elemen vektor V[ ] berikut ini untuk menjawab soal nomor 1 sampai 7:
78,
5010, 888, 30, 94, 0, 270, 5730, 10, 204, 10
-
Tunjukkan
susunan elemen vektor V[ ] pada 6 (enam) pass pertama saja, bila
pengurutan dilakukan dengan menggunakan Insertion Sort.
-
Tunjukkan
susunan elemen vektor V[ ] tepat setelah procedure partition dipanggil /
dijalankan oleh procedure quick pada proses sorting dengan menggunakan Recursive
Quick Sort. Jawab untuk 3 (tiga) pemanggilan pertama saja.
-
Tunjukkan
susunan elemen vektor V[ ] tepat setelah size dikalikan 2 pada proses
sorting dengan menggunakan Iterative Merge Sort.
Berturut-turut mulai size=1 sampai proses sorting selesai dilakukan.
-
Anggaplah
11 elemen vektor V[ ] adalah isi node-node sebuah linked list L.
Gambarlah susunan linked list L dan seluruh pockets saat pass 3 akan
mulai dilakukan (setelah pass 2 berakhir) pada proses sorting dengan Radix
Sort.
-
Anggaplah
11 elemen vektor V[ ] adalah isi node-node sebuah linked list L. Sebuah
node hanya memiliki 2 field untuk item dan link, yang masing-masing
membutuhkan 2 bytes dan 4 bytes. Jika Radix Sort (versi naïf/bodoh)
akan dilakukan pada linked list L, hitunglah kebutuhan memory (termasuk
untuk linked list L) proses sorting ini.
-
Anggaplah
11 elemen vektor V[ ] telah disorting secara ascending, tabelkan
perubahan nilai low, high, dan mid jika Binary Search
dilakukan untuk mencari data 99.
-
Ulangi
soal nomor 5 untuk mencari data 94 dengan menggunakan Fibonacci
Search.
- Anggaplah
11 elemen vektor V[ ] telah disorting secara ascending, dapatkan 2 (dua)
buah nilai mid yang pertama kali dihitung jika dicari data 5000
dengan menggunakan Interpolation Search.
|
| 13. |
Write an algorithm to count the number of times a given
target value occurs in an array of N integers recursively.
|
| 14. |
Nonograms. Perhatikan kutipan artikel berikut:
"..... around 1994, a certain
kind of puzzles was very popular in England. The "Sunday
Telegraph" newspaper wrote: "Nonograms are puzzles
from Japan and are currently published each week only in The Sunday
Telegraph. Simply use your logic and skill to complete the grid and
reveal a picture or diagram." The puzzle goes like this:
Essentially, each row and column of a rectangular bitmap is
annotated with the respective lengths of its distinct strings of
occupied cells. The person who solves the puzzle must complete the
bitmap given only these lengths. Published puzzles are larger than
this example, and apparently always have unique solutions....."
Sebagai contoh untuk nonogram berukuran
baris=4 dan kolom=6, serta label jumlah string seperti yang dicantumkan
pada setiap baris dan kolom gambar kiri, maka salah satu solusinya
ditunjukkan pada gambar kanan.

Hanya untuk mempermudah pekerjaan Anda,
perhatikan bahwa semua rangkaian karakter 'X' dalam setiap kolom ataupun
baris, tidak mungkin terputus oleh blank, dalam arti di antaranya terdapat
satu atau lebih sel yang kosong (lihat gambar). Original nonogram
sebenarnya tidak dibatasi seperti pada soal ujian ini.
Anda diminta untuk menyelesaikan Nonogram
berukuran 10 baris x 10 kolom dengan menggunakan program komputer
berdasarkan algoritma backtracking:
- Tentukan jumlah level. Berikan
penjelasan singkat mengapa demikian?
- Tentukan jumlah prioritas.
Berikan penjelasan singkat mengapa demikian?
- Jelaskan satu per satu, semua struktur
data yang digunakan untuk menyelesaikan masalah ini, termasuk ukuran,
tipe, manfaat, dan contohnya.
- Jelaskan apa saja yang Anda lakukan
untuk proses-proses pada algoritma backtracking standard di bawah ini,
kaitkan jawaban Anda dengan usulan struktur datanya:
- if acceptable
- record move
- cancel / erase previous recording
- Tulislah algoritma detil
backtrackingnya.
|
| 15. |
Problem asli nonogram mengijinkan dalam setiap baris atau
kolom terdapat dua atau lebih rangkaian karakter 'X' (Lihat gambar kiri di
bawah). Ulangi soal nomor (14) di atas, lengkap untuk point-point a sampai
e, sehingga algoritma yang Anda desain mampu menghasilkan solusi yang
diinginkan.
Masalah:
Solusi:
|_|_|_|_|_|_|_|_|
3 |_|X|X|X|_|_|_|_| 3
|_|_|_|_|_|_|_|_|
2 1 |X|X|_|X|_|_|_|_| 2 1
|_|_|_|_|_|_|_|_|
3 2 |_|X|X|X|_|_|X|X| 3 2
|_|_|_|_|_|_|_|_|
2 2 |_|_|X|X|_|_|X|X| 2 2
|_|_|_|_|_|_|_|_|
6 |_|_|X|X|X|X|X|X| 6
|_|_|_|_|_|_|_|_|
1 5 |X|_|X|X|X|X|X|_| 1 5
|_|_|_|_|_|_|_|_|
6 |X|X|X|X|X|X|_|_| 6
|_|_|_|_|_|_|_|_|
1 |_|_|_|_|X|_|_|_| 1
|_|_|_|_|_|_|_|_|
2 |_|_|_|X|X|_|_|_| 2
1
3 1 7 5 3 4 3
1 3 1 7 5 3 4 3
2
1 5
1
2 1 5 1
|
|
 |
 |