LATIHAN SOAL OSN Informatika LOGIKA - ALGORITMA-
Soal 1: (Tingkat Mudah - Mirip dengan soal logika dan dasar pemrograman)
Judul: Sandi Kotak
Deskripsi: Diberikan sebuah kotak berukuran 2x2 yang berisi huruf- huruf sebagai berikut:
A B C D
Sebuah pesan dienkripsi dengan mengganti setiap huruf dengan dua digit angka berdasarkan posisinya dalam kotak. Huruf 'A' diganti
dengan '11', 'B' dengan '12', 'C' dengan '21', dan 'D' dengan '22'.
Diberikan sebuah pesan terenkripsi: 21121122. Deskripsikan pesan tersebut.
Soal 2: (Tingkat Menengah - Mirip dengan soal algoritma dasar dan struktur data)
Judul: Jumlah Terbesar Subarray Kontinu
Deskripsi: Diberikan sebuah array (daftar) bilangan bulat, misalnya [-2, 1, -3, 4, -1, 2, 1, -5, 4]. Tugas Anda adalah menemukan jumlah maksimum dari subarray (bagian array yang berurutan) mana pun.
Contoh: Untuk array di atas, subarray [4, -1, 2, 1] memiliki jumlah terbesar, yaitu 6.
Soal 3: (Tingkat Sulit - Mirip dengan soal algoritma lanjut dan pemodelan)
Judul: Jaringan Transportasi
Deskripsi: Sebuah kota memiliki sejumlah persimpangan jalan yang terhubung oleh jalan satu arah dengan kapasitas tertentu. Anda
diberikan informasi tentang persimpangan dan jalan (beserta
kapasitasnya). Anda juga diberikan sebuah sumber (awal) dan sebuah
tujuan (akhir). Tugas Anda adalah menentukan jumlah maksimum unit barang yang dapat dikirimkan dari sumber ke tujuan melalui jaringan jalan tersebut tanpa melebihi kapasitas jalan mana pun.
Contoh:
Misalkan ada 4 persimpangan (1, 2, 3, 4). Sumber adalah 1 dan tujuan adalah 4. Jalan-jalan dan kapasitasnya adalah:
● 1 -> 2 (kapasitas 10)
● 1 -> 3 (kapasitas 5)
● 2 -> 3 (kapasitas 2)
● 2 -> 4 (kapasitas 8)
● 3 -> 4 (kapasitas 7)
Berapa jumlah maksimum barang yang dapat dikirim dari 1 ke 4?
Pembahasan 1:
Soal ini menguji kemampuan dasar dalam memahami pola dan
melakukan pemetaan sederhana. Untuk mendekripsinya, kita tinggal memecah kode menjadi pasangan dua digit dan melihat huruf yang sesuai:
● 21 -> C
● 12 -> B
● 11 -> A
● 22 -> D
Jadi, pesan terdekripsi adalah "CBAD".
Pembahasan 2:
Soal ini menguji pemahaman tentang subarray dan kemampuan untuk merancang algoritma untuk mencari nilai maksimum. Salah satu
pendekatan yang efisien adalah menggunakan algoritma Kadane.
Algoritma Kadane:
1. Inisialisasi dua variabel: max_so_far (untuk menyimpan jumlah maksimum yang ditemukan sejauh ini) dengan nilai negatif tak hingga, dan current_max (untuk menyimpan jumlah maksimum subarray yang berakhir pada posisi saat ini) dengan 0.
2. Iterasi melalui array:
○ Untuk setiap elemen, tambahkan elemen tersebut ke
current_max.
○ Jika current_max menjadi negatif, reset current_max menjadi 0 (karena subarray negatif tidak akan pernah menjadi
kontributor jumlah maksimum).
○ Perbarui max_so_far dengan nilai maksimum antara max_so_far
dan current_max.
Setelah iterasi selesai, max_so_far akan berisi jumlah maksimum dari subarray kontinu.
Pembahasan 3:
Soal ini adalah contoh klasik dari masalah aliran maksimum (Maximum Flow) dalam teori graf. Salah satu algoritma yang umum digunakan untuk menyelesaikan masalah ini adalah algoritma Ford-Fulkerson atau Edmonds-Karp.
Konsep Dasar:
● Kita memodelkan kota dan jalan sebagai sebuah graf berarah dengan kapasitas pada setiap edge (jalan).
● Tujuannya adalah mencari jalur dari sumber ke tujuan dengan sisa kapasitas terbesar dan mengirimkan aliran sebanyak mungkin melalui jalur tersebut.
● Kita perlu mempertimbangkan "residual graph" (graf sisa) yang menunjukkan kapasitas yang tersisa pada setiap edge dan juga
"backward edges" (edge balik) untuk memungkinkan kita
"membatalkan" aliran yang telah dikirim sebelumnya jika diperlukan untuk mencapai aliran maksimum.
Penyelesaian (konseptual):
1. Mulai dengan aliran nol di semua jalan.
2. Cari jalur augmentasi (jalur dari sumber ke tujuan di residual graph dengan sisa kapasitas positif).
3. Jika jalur augmentasi ditemukan, tentukan kapasitas minimum di sepanjang jalur tersebut (bottleneck).
4. Tingkatkan aliran di sepanjang jalur augmentasi sebesar kapasitas minimum tersebut.
5. Perbarui residual graph dengan mengurangi kapasitas forward edges dan menambahkan kapasitas backward edges sebesar aliran yang baru ditambahkan.
6. Ulangi langkah 2-5 sampai tidak ada lagi jalur augmentasi yang dapat ditemukan.
7. Jumlah total aliran yang telah dikirimkan adalah aliran maksimum.
PILIHAN GANDA
Soal-soal ini mencakup berbagai topik penting dalam OSN Informatika, termasuk struktur data, algoritma pengurutan dan pencarian, pohon biner, rekursi, analisis kompleksitas, teori graf dasar, algoritma greedy, pengkodean Huffman (konsep dasar), dan dynamic programming.
Model soal OSN biasanya menguji pemahaman konsep dan kemampuan aplikasi dalam konteks yang diberikan.
Soal 1:
Manakah dari pernyataan berikut yang PALING TEPAT
menggambarkan perbedaan mendasar antara struktur data stack dan queue?
A. Stack menggunakan prinsip FIFO (First-In, First-Out), sedangkan queue menggunakan prinsip LIFO (Last-In, First-Out).
B. Stack memungkinkan penambahan dan penghapusan elemen hanya dari satu ujung, sedangkan queue memungkinkan dari kedua ujung yang berbeda.
C. Stack secara efisien mendukung pencarian elemen di tengah, sedangkan queue tidak.
D. Stack umumnya diimplementasikan menggunakan array, sedangkan queue menggunakan linked list.
E. Stack menggunakan prinsip LIFO (Last-In, First-Out), sedangkan queue menggunakan prinsip FIFO (First-In, First-Out).
Soal 2:
Sebuah array A berisi elemen-elemen berikut: [5, 2, 8, 1, 9, 4]. Jika kita menerapkan algoritma Bubble Sort untuk mengurutkan array ini secara menaik, berapa kali operasi pertukaran (swap) akan terjadi pada iterasi (pass) pertama?
A. 1
B. 2 C. 3 D. 4 E. 5 Soal 3:
Diberikan sebuah pohon biner (binary tree). Proses penelusuran mana yang akan menghasilkan urutan node di mana setiap node dikunjungi setelah semua node di subtree kirinya dan sebelum semua node di subtree kanannya?
A. Pre-order B. In-order C. Post-order
D. Breadth-First Search E. Depth-First Search Soal 4:
Sebuah fungsi rekursif hitung(n) didefinisikan sebagai berikut:
hitung(n):
jika n <= 1, kembalikan 1
lainnya, kembalikan n * hitung(n-1)
Berapakah nilai dari hitung(4)? A. 4
B. 6 C. 10 D. 24 E. 120 Soal 5:
Algoritma Binary Search bekerja paling efisien pada struktur data yang bagaimana?
A. Linked list yang tidak terurut B. Array yang tidak terurut
C. Stack D. Queue
E. Array yang terurut Soal 6:
Dalam notasi Big O, manakah dari fungsi pertumbuhan berikut yang memiliki kompleksitas waktu TERKECIL seiring dengan bertambahnya ukuran input (n)?
A. O(n2) B. O(nlogn) C. O(2n) D. O(n) E. O(logn) Soal 7:
Diberikan sebuah graf tak berarah dengan 5 buah simpul. Berapakah jumlah maksimum sisi (edge) yang mungkin ada dalam graf tersebut?
A. 4 B. 5 C. 10 D. 15 E. 20 Soal 8:
Metode Greedy (rakus) dalam perancangan algoritma umumnya
digunakan untuk menyelesaikan masalah optimasi. Karakteristik utama dari metode ini adalah...
A. Membuat pilihan yang optimal secara global pada setiap langkah.
B. Mencoba semua kemungkinan solusi untuk menemukan yang terbaik.
C. Memecah masalah menjadi sub-masalah yang lebih kecil dan menyelesaikan masing-masing sub-masalah secara optimal.
D. Menggunakan pendekatan rekursif dengan memoization untuk menghindari perhitungan berulang.
E. Membuat pilihan yang tampak optimal pada saat itu tanpa mempertimbangkan konsekuensi jangka panjang.
Soal 9:
Sebuah pesan terdiri dari huruf-huruf: A, B, C, D dengan frekuensi kemunculan masing-masing: A=5, B=2, C=3, D=1. Jika kita ingin
mengkodekan pesan ini menggunakan kode Huffman, berapa panjang rata-rata bit per huruf yang mungkin dihasilkan?
A. Kurang dari 2 bit B. Tepat 2 bit
C. Lebih dari 2 bit tetapi kurang dari 3 bit D. Tepat 3 bit
E. Lebih dari 3 bit Soal 10:
Teknik pemrograman Dynamic Programming sering digunakan untuk menyelesaikan masalah yang memiliki karakteristik...
A. Sub-masalah yang independen dan tidak tumpang tindih.
B. Solusi optimal dapat ditemukan dengan hanya mempertimbangkan pilihan lokal.
C. Membutuhkan pencarian mendalam melalui semua kemungkinan solusi.
D. Memiliki optimal substructure dan overlapping subproblems.
E. Tidak ada batasan pada ukuran input.
Kunci Jawaban:
1. E 2. D 3. B 4. D 5. E 6. E 7. C 8. E 9. C
10. D