Kembali
πŸ’»

Informatika SMA - OSN

Persiapan Olimpiade Informatika/Komputer tingkat SMA

Coba Latihan Soal

πŸ”’ Sistem Bilangan & Logika Boolean

Konversi antar sistem bilangan (biner, oktal, desimal, heksadesimal) merupakan dasar ilmu komputer. Aljabar Boolean digunakan dalam desain sirkuit digital dan ekspresi logika.

πŸ“Œ Rumus Penting

Biner β†’ Desimal: Ξ£ bit Γ— 2^posisi (dari kanan, mulai posisi 0)
Desimal β†’ Biner: bagi 2 berulang, catat sisa dari bawah ke atas
Oktal: setiap digit = 3 bit biner | Heks: setiap digit = 4 bit biner
AND: 1 jika semua 1 | OR: 1 jika ada 1 | NOT: kebalikan | XOR: 1 jika berbeda
NAND = NOT(AND) | NOR = NOT(OR) | XNOR: 1 jika sama
De Morgan: NOT(A AND B) = NOT A OR NOT B
De Morgan: NOT(A OR B) = NOT A AND NOT B

πŸ’‘ Contoh

1011β‚‚ = 1Γ—8 + 0Γ—4 + 1Γ—2 + 1Γ—1 = 11₁₀
A3₁₆ = 10Γ—16 + 3 = 163₁₀
175β‚ˆ = 1Γ—64 + 7Γ—8 + 5 = 64+56+5 = 125₁₀
NOT(1 AND 0) = NOT(0) = 1
Biimplikasi P↔Q: TRUE jika P dan Q sama-sama T atau sama-sama F
Tautologi: selalu bernilai TRUE untuk semua kombinasi input
Kontraposisi: (P→Q) ekuivalen dengan (¬Q→¬P)

πŸ“Š Struktur Data & Kompleksitas

Struktur data adalah cara menyimpan dan mengorganisasi data. Pilihan struktur data yang tepat sangat mempengaruhi efisiensi program. Notasi Big-O mengukur kompleksitas waktu dan ruang.

πŸ“Œ Rumus Penting

O(1) < O(log n) < O(√n) < O(n) < O(n log n) < O(n²) < O(n³) < O(2ⁿ) < O(n!)
Array: akses O(1), insert/delete O(n)
Linked list: akses O(n), insert/delete head O(1)
Hash table: akses/insert/delete rata-rata O(1), worst case O(n)
Binary search tree (BST): operasi rata-rata O(log n)
Heap (priority queue): insert O(log n), extract-min/max O(log n)
Stack dan Queue: semua operasi O(1)

πŸ’‘ Contoh

Stack (LIFO): push/pop β€” undo, call stack, evaluasi ekspresi
Queue (FIFO): enqueue/dequeue β€” antrian BFS, penjadwalan proses
Binary tree: setiap node punya maks 2 anak
BST: kiri < root < kanan, in-order traversal β†’ sorted
Traversal: pre-order (VLR), in-order (LVR), post-order (LRV)
Graf: V = simpul (vertex), E = sisi (edge), undirected/directed/berbobot
Adjacency matrix: O(VΒ²) ruang | Adjacency list: O(V+E) ruang

⚑ Algoritma: Sorting, Searching & Rekursi

Algoritma sorting dan searching adalah pondasi pemrograman kompetitif. Rekursi dan pemikiran divide-and-conquer sangat penting untuk OSN Informatika.

πŸ“Œ Rumus Penting

Bubble sort: O(nΒ²) time, O(1) space β€” bandingan berpasangan berulang
Selection sort: O(nΒ²) β€” cari minimum, pindah ke depan
Insertion sort: O(nΒ²) worst, O(n) best (sudah terurut)
Merge sort: O(n log n) β€” divide, conquer, merge. Stabil.
Quick sort: O(n log n) avg, O(nΒ²) worst β€” pivot partition
Binary search: O(log n) β€” hanya pada array terurut
Rekursi: T(n) = T(n-1) + O(1) β†’ O(n) | T(n) = 2T(n/2) + O(n) β†’ O(n log n)

πŸ’‘ Contoh

Merge sort array [5,3,8,1]: [5,3]+[8,1] β†’ [3,5]+[1,8] β†’ [1,3,5,8]
Binary search di [1,3,5,7,9], cari 7: mid=5β†’kanan, mid=7β†’ketemu
Fibonacci rekursi naif: O(2ⁿ) β†’ dengan memoization: O(n)
Tower of Hanoi n disk: T(n) = 2T(n-1)+1 β†’ O(2ⁿ) langkah
Master theorem: T(n) = aT(n/b) + f(n) β†’ solusi berdasarkan perbandingan f(n) vs n^(log_b a)

πŸ—ΊοΈ Graph Traversal & Algoritma Graf

Masalah berbasis graf sangat sering muncul di OSN Informatika. BFS, DFS, Dijkstra, dan spanning tree adalah materi wajib.

πŸ“Œ Rumus Penting

BFS (Breadth-First Search): O(V+E) β€” gunakan Queue, jarak terpendek unweighted
DFS (Depth-First Search): O(V+E) β€” gunakan Stack/rekursi, topological sort
Dijkstra: O((V+E) log V) dengan priority queue β€” jarak terpendek weighted (non-negatif)
Bellman-Ford: O(VE) β€” jarak terpendek, bisa bobot negatif
Floyd-Warshall: O(VΒ³) β€” all pairs shortest path
Kruskal MST: O(E log E) β€” sort edge, Union-Find
Prim MST: O((V+E) log V) β€” grow dari satu simpul

πŸ’‘ Contoh

BFS dari simpul A: level 0={A}, level 1={tetangga A}, level 2={tetangga level 1} dst.
DFS deteksi siklus: jika bertemu simpul yang sudah "dikunjungi tapi belum selesai" β†’ ada siklus
Topological sort: urutkan simpul sehingga semua edge u→v, u sebelum v (DAG)
MST: pohon merentang minimum β€” V-1 edge, menghubungkan semua simpul dengan bobot total terkecil
Dijkstra: tidak bisa dengan bobot negatif β€” gunakan Bellman-Ford
Union-Find (Disjoint Set): operasi union dan find, deteksi komponen terhubung

🧩 Dynamic Programming & Pemrograman Kompetitif

Dynamic Programming (DP) memecah masalah besar menjadi submasalah yang tumpang tindih. Kunci: identifikasi state, transisi, dan base case. Ini adalah inti dari soal-soal olimpiade.

πŸ“Œ Rumus Penting

DP = memoization (top-down) atau tabulation (bottom-up)
DP valid jika ada: optimal substructure + overlapping subproblems
Knapsack 0/1: dp[i][w] = max(dp[i-1][w], val[i]+dp[i-1][w-wt[i]])
LCS: dp[i][j] = dp[i-1][j-1]+1 jika A[i]=B[j], else max(dp[i-1][j], dp[i][j-1])
LIS: O(nΒ²) DP atau O(n log n) dengan binary search + patience sorting
Matrix chain: dp[i][j] = min cost perkalian matriks i hingga j
Edit distance: dp[i][j] = min(insert, delete, replace)

πŸ’‘ Contoh

Fibonacci DP: dp[0]=0, dp[1]=1, dp[n]=dp[n-1]+dp[n-2] β†’ O(n) waktu, O(1) ruang
Knapsack n=3, kapasitas 5: pertimbangkan tiap barang satu per satu, isi tabel dp
LCS "ABCBDAB" dan "BDCAB": panjang LCS = 4 ("BCAB" atau "BDAB")
Coin change: dp[amount] = min koin untuk mencapai amount tertentu
Bitmask DP: state dengan subset, traveling salesman problem O(2ⁿ Γ— nΒ²)
Prinsip greedy vs DP: greedy ambil pilihan terbaik lokal, DP eksplorasi semua kemungkinan