Di balik program yang efisien ada struktur data dan algoritma yang tepat. Kita menganalisis Big-O, membangun linked list, tree, dan graph, lalu mempraktikkan searching, sorting, dan dynamic programming pada kasus nyata.

# Kompleksitas Waktu dan Memori

Menilai biaya algoritma lewat jumlah operasi dan penggunaan memori, dilengkapi teknik pencatatan operasi dan pengukuran waktu dengan chrono.

Buka →
# Big-O Notation

Notasi Big-O untuk meringkas pertumbuhan biaya algoritma: O(1), O(log n), O(n), O(n log n), O(n^2), plus aturan menghitungnya dari kode dan best/average/worst case.

Buka →
# Array dan Dynamic Array

Perbedaan array statis dan dynamic array, mekanisme doubling di balik std::vector, serta implementasi mini DynamicArray<int> dari nol.

Buka →
# Linked List

Membangun singly linked list manual: struct Node, insert head/tail, delete, traverse, dan search, serta perbandingannya dengan std::vector.

Buka →
# Stack

Konsep LIFO dan implementasi stack berbasis std::vector, disertai aplikasi klasik: pemeriksa kurung seimbang.

Buka →
# Queue dan Deque

Konsep FIFO, implementasi circular buffer manual, simulasi antrian dengan std::queue, dan pengantar deque dua ujung.

Buka →
# Hash Table

Konsep hashing, penanganan collision dengan chaining, hash function untuk string, serta load factor dan rehash pada hash table mini.

Buka →
# Tree

Terminologi tree (root, leaf, depth, height), pembangunan binary tree dengan struct Node, dan tiga traversal rekursif: pre-order, in-order, post-order.

Buka →
# Binary Search Tree

Properti BST, insert dan search O(log n), in-order traversal yang menghasilkan data terurut, penghapusan dengan tiga kasus, dan bahaya tree degenerate.

Buka →
# Heap dan Priority Queue

Properti min-heap dan max-heap, representasi heap di array, sift-up dan sift-down manual, serta std::priority_queue dengan ordering-nya.

Buka →
# Graph

Graf sebagai simpul dan busur, perbandingan adjacency list dengan adjacency matrix, serta penjelajahan BFS dan DFS dengan urutan visit yang deterministik.

Buka →
# Linear Search

Implementasi linear search manual dengan penghitung perbandingan, best case dan worst case, kapan algoritma ini cukup, serta pratinjau binary search.

Buka →
# Binary Search

Implementasi binary search iteratif dan rekursif, syarat data terurut, jebakan overflow pada perhitungan mid, serta kaitannya dengan lower_bound.

Buka →
# Sorting Algorithms

Selection sort, insertion sort, dan merge sort diimplementasikan manual dengan penghitung perbandingan, tabel kompleksitas, serta recap std::sort.

Buka →
# Recursion dan Backtracking

Pola pilih-jelajahi-urungkan pada backtracking, diterapkan pada semua permutasi dan N-Queens 4x4 dengan hasil deterministik.

Buka →
# Greedy Algorithms

Algoritma greedy pada coin change dan interval scheduling, termasuk contoh nyata kapan greedy gagal mencapai optimum.

Buka →
# Divide and Conquer

Pola bagi-selesaikan-gabungkan, merge sort sebagai templatnya, dan studi kasus max subarray tiga cara dibandingkan dengan Kadane.

Buka →
# Dynamic Programming

Memoization lawan tabulation, fibonacci tiga cara dengan penghitung panggilan, coin change minimum, dan LIS dengan rekonstruksi jawaban.

Buka →
# Graph Algorithms

Dijkstra dengan adjacency list dan priority_queue untuk jarak terpendek, rekonstruksi jalur, serta deteksi siklus dengan DFS tiga warna.

Buka →
# Memilih Struktur Data

Satu beban kerja diuji pada empat struktur, tabel keputusan struktur data dan padanan STL, pertimbangan pola akses, serta rangkuman section.

Buka →