Selamat datang di Course DSA - Data Structures and Algorithms. Pelajari struktur data dan algoritma dari fondasi hingga topik lanjutan, dengan implementasi C++ modern, analisis kompleksitas, dan strategi pemecahan masalah untuk competitive programming maupun wawancara teknis. Course ini disusun secara bertahap dari konsep dasar struktur data dan algoritma, dilanjutkan dengan fondasi C++ modern, analisis kompleksitas, hingga topik lanjutan seperti dynamic programming, graph algorithms, dan competitive programming.
Setiap Chapter berisi penjelasan konsep disertai contoh kode C++ yang dapat dikompilasi dan dijalankan secara langsung. Kode dianalisis baris-per-baris agar pembaca memahami mekanisme di baliknya, bukan sekadar menyalin hasil.
Peta Materi #
- Bagian 1 — Pengenalan & Fondasi (Section 1–5): konsep DSA, persiapan C++, fondasi C++, analisis kompleksitas, dan pembuktian algoritma.
- Bagian 2 — Struktur Data (Section 6–14): array, linked list, stack, queue, hashing, tree, dan heap.
- Bagian 3 — Algoritma Inti (Section 10–13, 16–19): searching, sorting, rekursi, graph algorithms, greedy, DP, dan string algorithms.
- Bagian 4 — Teknik & Lanjutan (Section 20–26): teknik pemecahan masalah, matematika, struktur data lanjutan, STL, dan pengujian.
- Bagian 5 — Aplikasi (Section 27–30): competitive programming, penerapan dunia nyata, strategi belajar, dan proyek terapan.
Bab 1 Pengenalan DSA
Definisi struktur data, algoritma, dan hubungan keduanya dalam pemecahan masalah komputasi.
Buka → # Peran Struktur Data dan AlgoritmaMengapa pemilihan struktur data dan algoritma menentukan kualitas solusi perangkat lunak.
Buka → # Kategori Struktur DataPengelompokan struktur data: linier, non-linier, statis, dinamis, dan homogen.
Buka → # Kategori AlgoritmaParadigma algoritma: brute force, divide and conquer, greedy, dynamic programming, dan backtracking.
Buka → # Cara Belajar DSAStrategi belajar struktur data dan algoritma secara efektif dengan pola bertahap, latihan, dan refleksi.
Buka → # Evaluasi PemahamanSoal latihan dan refleksi untuk menguji pemahaman konsep dasar DSA pada Section pengenalan.
Buka →Bab 2 Persiapan C++
Sejarah singkat C++, karakteristik bahasa modern, dan alasan memilih C++ sebagai bahasa utama Course DSA.
Buka → # Instalasi CompilerCara memasang compiler C++ (GCC, Clang, MSVC) di Linux, macOS, dan Windows beserta verifikasinya.
Buka → # Konfigurasi EditorMenyiapkan Visual Studio Code dengan ekstensi C++ serta file tasks.json, launch.json, dan c_cpp_properties.json untuk DSA.
Buka → # Program C++ PertamaAnatomi program C++ modern: header, fungsi main, std::vector, dan operasi dasar pengolahan data.
Buka → # Proses KompilasiEmpat tahap kompilasi C++: preprocessing, kompilasi, assembling, dan linking beserta cara memeriksanya.
Buka → # Penggunaan CMakeMengotomatiskan build C++ multi-file dengan CMake: CMakeLists.txt, target, variabel, dan best practices.
Buka →Bab 3 Fondasi C++ untuk DSA
Tipe fundamental, inisialisasi, dan konversi tipe di C++.
Buka → # OperatorOperator aritmetika, logika, perbandingan, bitwise, dan precedence.
Buka → # Percabanganif, else, switch, dan operator ternary.
Buka → # Perulanganfor, while, do-while, dan range-based for loop.
Buka → # FungsiDefinisi fungsi, parameter, return value, overload, dan rekursi dasar.
Buka → # Array DasarArray C-style: deklarasi, akses, dan keterbatasannya.
Buka → # Stringstd::string, std::string_view, dan operasi umum.
Buka → # Pointer dan ReferencePointer, reference, dan perbedaan pass-by-value/reference.
Buka → # struct dan classDasar OOP di C++ untuk memodelkan struktur data.
Buka → # Template DasarGeneric programming dengan function dan class template.
Buka → # Memory ManagementStack vs heap, new/delete, RAII, dan kebocoran memori.
Buka →Bab 4 Analisis Kompleksitas
Mengapa kita perlu menganalisis kompleksitas algoritma dan apa yang dimaksud dengan kompleksitas waktu serta kompleksitas ruang.
Buka → # Time ComplexityCara mengukur dan menghitung time complexity algoritma sebagai fungsi dari ukuran input.
Buka → # Space ComplexityCara mengukur kompleksitas ruang (memori tambahan) yang dipakai algoritma sebagai fungsi dari ukuran input.
Buka → # Notasi Big-ODefinisi formal notasi Big-O sebagai batas atas asimptotik dan cara menentukannya dari sebuah fungsi.
Buka → # Notasi Big-OmegaDefinisi formal notasi Big-Omega sebagai batas bawah asimptotik dari sebuah fungsi.
Buka → # Notasi Big-ThetaDefinisi formal notasi Big-Theta sebagai batas ketat asimptotik yang menggabungkan Big-O dan Big-Omega.
Buka → # Analisis LoopCara menghitung time complexity berbagai pola loop: tunggal, bersarang, logaritmik, dan dengan pertambahan non-trivial.
Buka → # Analisis Fungsi RekursifCara menganalisis time complexity fungsi rekursif dengan recurrence relation, recursion tree, dan substitusi.
Buka → # Kompleksitas AmortisasiAnalisis amortisasi: aggregate, accounting, dan potential method untuk operasi yang kadang mahal tetapi rata-rata murah.
Buka → # Membandingkan KompleksitasTabel referensi komprehensif kompleksitas algoritma umum dan cara membandingkan dua algoritma secara sistematis.
Buka →Bab 5 Analisis dan Pembuktian Algoritma
Empat pendekatan utama analisis algoritma: worst case, average case, best case, dan amortized.
Buka → # Loop InvariantTeknik membuktikan kebenaran algoritma iteratif dengan loop invariant: inisialisasi, maintenance, dan termination.
Buka → # Induksi MatematisPrinsip induksi matematis: kasus dasar, langkah induksi, dan penerapannya dalam pembuktian algoritma.
Buka → # Correctness AlgoritmaMembuktikan kebenaran algoritma klasik: linear search dan insertion sort dengan loop invariant serta induksi matematis.
Buka → # Recurrence RelationCara menurunkan recurrence relation dari algoritma rekursif dan menyelesaikannya dengan substitution, recursion tree, dan master theorem.
Buka → # Master TheoremFormula siap pakai untuk menyelesaikan recurrence T(n) = a·T(n/b) + f(n) dengan tiga kasus berbeda dan contoh nyata.
Buka →Bab 6 Array dan Matriks
Karakteristik array: akses acak, kontigu di memori, ukuran tetap.
Buka → # Operasi ArrayInsert, delete, search, dan update pada array.
Buka → # Array Statis dan DinamisPerbedaan array C-style, std::array, dan std::vector.
Buka → # std::vectorPenggunaan std::vector sebagai array dinamis: capacity, reserve, dan iterator invalidation.
Buka → # Array Dua DimensiMatriks sebagai array 2D: row-major vs column-major dan implikasi cache.
Buka → # MatriksOperasi matriks: transpose, perkalian, rotasi 90 derajat, dan spiral traversal.
Buka → # Prefix SumPrecompute prefix sum untuk range sum query O(1), versi 1D dan 2D.
Buka → # Difference ArrayRange update O(1) dengan difference array dan materialisasi via prefix sum.
Buka → # Sliding WindowJendela geser ukuran tetap dan variabel untuk subarray optimal.
Buka → # Two PointersDua pointer untuk pencarian pasangan, partisi, dan subarray optimal.
Buka → # Sparse TableStruktur data untuk range query idempotent O(1): min, max, gcd.
Buka →Bab 7 Linked List
Karakteristik linked list dan kapan dipakai.
Buka → # Singly Linked ListImplementasi singly linked list dengan template C++.
Buka → # Doubly Linked ListLinked list dengan pointer prev dan next untuk traversal dua arah.
Buka → # Circular Linked ListVariasi linked list yang tail menunjuk ke head; cocok untuk round-robin.
Buka → # Operasi Linked ListReverse, find middle, detect cycle, dan merge sorted list.
Buka → # Implementasi Linked ListClass template lengkap dengan destructor, copy/move semantics, dan iterator.
Buka → # Linked List dan Memory ManagementOwnership node, RAII, smart pointer untuk mencegah leak.
Buka → # Variasi Pemecahan Masalah Linked ListPola klasik: palindrome, remove nth from end, intersection.
Buka →Bab 8 Stack dan Queue
Struktur LIFO untuk undo, evaluasi ekspresi, dan call stack.
Buka → # Implementasi StackTiga varian: array, linked list, dan std::stack<T, Container>.
Buka → # Konsep QueueStruktur FIFO untuk BFS, scheduling, dan buffer.
Buka → # Implementasi QueueArray circular, linked list, dan std::queue.
Buka → # Circular QueueRing buffer dengan trik modulo untuk kapasitas tetap.
Buka → # DequeDouble-ended queue — operasi O(1) di kedua ujung.
Buka → # Monotonic StackStack dengan invariant terurut untuk NGE, histogram, dan sejenisnya.
Buka → # Monotonic QueueDeque dengan invariant terurut untuk sliding window extremum.
Buka → # Penerapan Stack dan QueueParenthesis matching, infix-postfix, BFS, dan topological sort.
Buka →Bab 9 Hashing dan Hash Table
Memetakan key ke nilai hash untuk akses cepat.
Buka → # Hash FunctionSifat hash function yang baik dan contohnya.
Buka → # Collision ResolutionStrategi menangani tabrakan hash.
Buka → # Separate ChainingCollision resolution dengan linked list per bucket.
Buka → # Open AddressingCollision resolution dengan probing: linear, quadratic, double.
Buka → # unordered_map dan unordered_setHash container STL dan penggunaannya.
Buka → # Kompleksitas HashingRata-rata vs worst case, faktor load, dan resizing.
Buka → # Penerapan HashingCounting, deduplikasi, frequency map, two-sum.
Buka →Bab 10 Searching
Pencarian sekuensial O(n) yang bekerja pada data apa pun.
Buka → # Binary SearchPencarian O(log n) pada data terurut dengan divide and conquer.
Buka → # Binary Search VariantsLower bound, upper bound, dan binary search dengan predikat kustom.
Buka → # Binary Search on AnswerTrik binary search pada domain solusi, bukan pada array input.
Buka → # Ternary SearchPencarian maksimum/minimum fungsi unimodal dalam O(log n).
Buka → # Searching pada Data TerurutJump search, exponential search, dan interpolation search.
Buka → # Perbandingan Algoritma SearchingTabel kompleksitas, decision tree, dan panduan memilih algoritma.
Buka →Bab 11 Sorting
Definisi, in-place, stabil, dan kompleksitas umum.
Buka → # Bubble SortSorting sederhana O(n^2) dengan pertukaran tetangga.
Buka → # Selection SortMemilih elemen minimum lalu menempatkannya.
Buka → # Insertion SortMenyisipkan elemen ke posisi yang benar.
Buka → # Merge SortDivide and conquer stabil O(n log n).
Buka → # Quick SortDivide and conquer dengan pivot, rata-rata O(n log n).
Buka → # Heap SortSorting berbasis heap, O(n log n) in-place.
Buka → # Counting SortSorting non-comparison untuk range kecil.
Buka → # Radix SortSorting digit-per-digit, O(d*(n+b)).
Buka → # Bucket SortMembagi elemen ke bucket lalu mengurutkan masing-masing.
Buka → # Sorting StabilPengertian stabilitas dan kapan penting.
Buka → # Sorting In-PlaceSorting tanpa memori tambahan signifikan.
Buka → # Perbandingan Algoritma SortingTabel kompleksitas dan rekomendasi penggunaan.
Buka →Bab 12 Rekursi dan Backtracking
Fungsi yang memanggil dirinya sendiri untuk menyelesaikan sub-masalah.
Buka → # Base Case dan Recursive CaseDua komponen wajib agar rekursi berhenti dan benar.
Buka → # Call StackBagaimana compiler mengelola frame pemanggilan rekursif.
Buka → # Rekursi vs IterasiTrade-off rekursif vs iteratif: keterbacaan, overhead, depth limit.
Buka → # Rekursi BercabangRekursi dengan dua atau lebih panggilan diri — pemicu ledakan eksponensial.
Buka → # BacktrackingEksplorasi pohon kemungkinan dengan pemilihan, eksplorasi, dan undo.
Buka → # PruningMemotong cabang yang tidak menjanjikan lebih awal.
Buka → # Permutation dan CombinationMembangkitkan permutasi dan kombinasi dengan rekursi.
Buka → # Subset GenerationMembangkitkan semua subset suatu himpunan.
Buka → # Analisis Kompleksitas BacktrackingBranching factor, depth, dan kompleksitas total algoritma backtracking.
Buka →Bab 13 Tree
Definisi tree, root, leaf, dan edge.
Buka → # Terminologi TreeParent, child, sibling, ancestor, descendant, height, depth.
Buka → # Binary TreeTree dengan maksimal dua child per node.
Buka → # Tree TraversalPre-order, in-order, post-order, level-order.
Buka → # Binary Search TreeBST: sifat pengurutan dan operasi dasar.
Buka → # Operasi Binary Search TreeInsert, delete, search, dan successor.
Buka → # Balanced Binary TreeKonsep balancing untuk menjamin O(log n).
Buka → # AVL TreeBST self-balancing dengan rotation.
Buka → # Red-Black TreeBST self-balancing dengan warna node.
Buka → # TriePrefix tree untuk pencarian string.
Buka → # Segment TreeStruktur data range query O(log n).
Buka → # Fenwick TreeBinary Indexed Tree untuk prefix sum O(log n).
Buka → # Tree ProblemsPola soal klasik: LCA, diameter, path sum.
Buka →Bab 14 Heap dan Priority Queue
Definisi heap dan sifat heap-order.
Buka → # Min-Heap dan Max-HeapVarian heap dan penggunaannya.
Buka → # Operasi HeapInsert, extract, heapify, dan peek.
Buka → # HeapifyMembangun heap dari array dalam O(n).
Buka → # std::priority_queueContainer adapter STL untuk priority queue.
Buka → # k-Largest dan k-SmallestMencari k elemen terbesar/terkecil dengan heap.
Buka → # Merge k Sorted ArraysAplikasi heap untuk menggabungkan k array terurut.
Buka → # Penerapan HeapDijkstra, scheduling, median stream, dan kasus lain.
Buka →Bab 15 Graph
Definisi graph: vertices, edges, dan jenis-jenis graph.
Buka → # Terminologi GraphDegree, path, cycle, connected, dan istilah lain.
Buka → # Directed dan Undirected GraphPerbedaan graph berarah dan tidak berarah.
Buka → # Weighted dan Unweighted GraphGraph dengan bobot pada edge.
Buka → # Adjacency MatrixRepresentasi graph sebagai matriks.
Buka → # Adjacency ListRepresentasi graph sebagai daftar tetangga.
Buka → # Edge ListRepresentasi graph sebagai daftar edge.
Buka → # Graph RepresentationPerbandingan representasi: kompleksitas dan kapan dipakai.
Buka → # Graph TraversalBFS dan DFS dasar.
Buka → # Connected ComponentsMenemukan komponen terhubung dengan DFS/BFS.
Buka → # Cycle DetectionMendeteksi cycle pada directed dan undirected graph.
Buka → # Bipartite GraphCek apakah graph bipartit dengan coloring.
Buka → # Disjoint Set UnionStruktur data Union-Find untuk graph.
Buka → # Graph ProblemsPola soal klasik berbasis graph: flood fill, jumlah pulau, friend circles, dan topological sort.
Buka →Bab 16 Algoritma Graph
BFS level-by-level dengan queue.
Buka → # Depth First SearchDFS mendalam dengan rekursi atau stack.
Buka → # Topological SortingUrutan topologis DAG dengan Kahn atau DFS.
Buka → # Shortest PathIkhtisar algoritma shortest path.
Buka → # DijkstraShortest path single-source dengan bobot non-negatif.
Buka → # Bellman-FordShortest path dengan deteksi negative cycle.
Buka → # Floyd-WarshallAll-pairs shortest path O(n^3).
Buka → # Minimum Spanning TreeKonsep MST dan algoritma klasik.
Buka → # KruskalMST berbasis sorting edge dan DSU.
Buka → # PrimMST berbasis priority queue greedy.
Buka → # Strongly Connected ComponentsAlgoritma Kosaraju dan Tarjan untuk SCC.
Buka → # Articulation Points dan BridgesMenemukan titik dan jembatan kritis dengan DFS lowlink.
Buka → # Max-Flow dan Min-CutFord-Fulkerson dan Edmonds-Karp.
Buka →Bab 17 Greedy Algorithms
Karakteristik algoritma greedy dan kapan cocok.
Buka → # Greedy Choice PropertySifat pilihan greedy yang menghasilkan solusi optimal global.
Buka → # Activity SelectionMemilih aktivitas maksimum yang tidak tumpang tindih.
Buka → # Interval SchedulingPenjadwalan interval untuk memaksimalkan throughput.
Buka → # Fractional KnapsackKnapsack yang membolehkan pecahan barang.
Buka → # Huffman CodingKompresi data berbasis frekuensi karakter.
Buka → # Job SchedulingPenjadwalan tugas dengan deadline dan profit.
Buka → # Pembuktian Algoritma GreedyTeknik membuktikan greedy menghasilkan solusi optimal.
Buka →Bab 18 Dynamic Programming
Definisi DP: optimal substructure dan overlapping subproblems.
Buka → # MemoizationDP top-down: simpan hasil sub-masalah di cache untuk menghindari recomputation.
Buka → # TabulationDP bottom-up: bangun tabel secara iteratif dari sub-masalah terkecil.
Buka → # Menentukan State DPCara merancang state DP: parameter yang dibutuhkan untuk mengambil keputusan.
Buka → # Menentukan Transisi DPCara menulis recurrence: pilihan apa yang tersedia di setiap state?
Buka → # Fibonacci dan DP DasarProgresi dari rekursi naif O(2^n) ke memo O(n) ke tabulation O(n) ke space-optimized O(1).
Buka → # Climbing StairsDP 1D paling klasik: jumlah cara naik tangga dengan langkah 1 atau 2.
Buka → # Coin ChangeDP klasik: jumlah minimum koin atau jumlah cara untuk membentuk nilai tertentu.
Buka → # Knapsack0/1 knapsack: maximasi nilai dengan batasan kapasitas. DP 2D dan optimasi ruang 1D.
Buka → # Longest Common Subsequence (LCS)DP 2D klasik: subsequence terpanjang yang sama pada dua string, plus rekonstruksi.
Buka → # Longest Increasing Subsequence (LIS)DP O(n²) dan optimasi O(n log n) dengan patience sorting.
Buka → # Edit DistanceDP 2D: jumlah minimum operasi insert, delete, replace untuk mengubah satu string ke string lain.
Buka → # Interval DPDP pada interval [i, j] dengan mencoba semua titik potong k. Contoh: matrix chain multiplication.
Buka → # Tree DPDP pada pohon: post-order traversal, dp[u] sebagai fungsi dp[v] anak-anaknya.
Buka → # Bitmask DPDP dengan state bitmask untuk himpunan kecil (n ≤ 20). Contoh klasik: TSP.
Buka → # Optimasi Dynamic ProgrammingTeknik lanjutan: divide and conquer optimization, convex hull trick, monotone queue, Knuth optimization.
Buka →Bab 19 String Algorithms
std::string, std::string_view, dan encoding.
Buka → # String MatchingPengantar masalah pencocokan pola pada string.
Buka → # Naive String SearchPencocokan pola brute force O(n*m).
Buka → # Knuth-Morris-PrattKMP dengan failure function O(n+m).
Buka → # Z-AlgorithmZ-function untuk pattern matching dan struktur string.
Buka → # Rabin-KarpPencocokan pola dengan rolling hash.
Buka → # Aho-CorasickPencocokan multiple pattern secara serentak.
Buka → # Rolling HashHash substring dalam O(1) update.
Buka → # Suffix ArrayArray berisi indeks suffix terurut.
Buka → # Longest Common PrefixLCP array dan Kasai algorithm.
Buka → # String ProblemsPola soal klasik: palindrome, anagram, compression.
Buka →Bab 20 Teknik Pemecahan Masalah
Membaca soal dengan cermat: input, output, constraint, dan klasifikasi tipe masalah.
Buka → # Menyusun PendekatanKerangka berpikir dari brute force ke solusi optimal: brute force → pola → optimasi → verifikasi.
Buka → # Brute ForceSolusi paling sederhana sebagai baseline; enumerasi semua kemungkinan secara sistematis.
Buka → # Divide and ConquerMembagi masalah jadi sub-masalah, menyelesaikan, lalu menggabungkan — disertai Master Theorem.
Buka → # Two PointersStrategi dua indeks yang bergerak konvergen atau paralel — recap cepat dan variasi lanjutan.
Buka → # Sliding WindowRecap cepat window geser dan variasi lanjutan: K-distinct, sum ≤ K, permutation in string.
Buka → # Prefix SumRecap prefix sum 1D dan ekstensi ke 2D plus kombinasi dengan difference array.
Buka → # Difference TechniqueTeknik difference array 2D, event counting, dan aplikasi paint problem.
Buka → # Coordinate CompressionMemetakan nilai besar ke indeks kecil agar segment tree dan BIT tetap efisien.
Buka → # Sweep LineMemproses event terurut oleh koordinat untuk solusi geometri dan interval.
Buka → # Meet in the MiddleMembagi masalah jadi dua, selesaikan tiap bagian, lalu gabungkan untuk memangkas 2^n menjadi 2^(n/2).
Buka → # Memilih Struktur DataTabel keputusan memilih struktur data berdasarkan operasi yang dominan.
Buka →Bab 21 Matematika untuk DSA
Definisi formal Big-O via limit, growth rates, dan Big-O sebagai himpunan fungsi.
Buka → # Logaritma dan EksponenProperti logaritma dan eksponen yang menjadi dasar analisis binary search dan kompleksitas.
Buka → # Modulo ArithmeticProperti aritmetika modulo: penjumlahan, perkalian, pengurangan, dan pembagian via invers.
Buka → # GCD dan LCMAlgoritma Euclidean untuk FPB dan KPK, plus std::gcd/std::lcm di C++17.
Buka → # Bilangan PrimaDefinisi bilangan prima, primality test trial division, optimasi 6k±1.
Buka → # Sieve of EratosthenesMenemukan semua prima hingga n dalam O(n log log n), plus linear sieve dan segmented sieve.
Buka → # Faktorisasi PrimaMenguraikan bilangan menjadi faktor primanya via trial division; aplikasi jumlah dan sum pembagi.
Buka → # CombinatoricsPrinsip dasar penghitungan: product rule, sum rule, inclusion-exclusion, pigeonhole.
Buka → # Permutasi dan KombinasiRumus P(n,k), C(n,k), identitas Pascal, dan komputasi modular dengan precompute faktorial.
Buka → # Probabilitas DasarProbabilitas diskrit: sample space, event, conditional, expected value, dengan simulasi Monte Carlo.
Buka → # Fast ExponentiationPangkat cepat O(log n) secara rekursif dan iteratif, dengan modular exponentiation dan aplikasi Fermat.
Buka → # Modular InverseInvers modulo via Fermat's little theorem dan Extended Euclidean; pembagian modular.
Buka →Bab 22 Struktur Data Lanjutan
DSU dengan path compression dan union by rank.
Buka → # Segment TreeStruktur tree untuk range query dan update.
Buka → # Lazy PropagationUpdate range pada segment tree secara tertunda.
Buka → # Fenwick TreeBIT untuk prefix query O(log n).
Buka → # Sparse TableStruktur idempotent O(1) query tanpa update.
Buka → # Persistent Data StructureStruktur data yang menjaga versi lamanya.
Buka → # Ordered SetSet terurut dengan akses by index (__gnu_pbds).
Buka → # Order Statistics TreeTree dengan operasi k-th element.
Buka → # RopeStruktur data untuk string panjang dengan operasi cepat.
Buka → # Advanced Range QueryMo's algorithm, sqrt decomposition, dan teknik lain.
Buka →Bab 23 Algoritma Lanjutan
Algoritma yang memakai keacakan untuk expected complexity.
Buka → # Amortized AnalysisAnalisis amortisasi dengan aggregate, accounting, potential method.
Buka → # Line Sweep AlgorithmsMenyelesaikan masalah geometri dengan menyapu garis.
Buka → # Computational GeometryAlgoritma geometri: convex hull, point in polygon.
Buka → # Bitmask TechniquesOperasi bit dan DP bitmask untuk himpunan kecil.
Buka → # Bitwise TricksTrik bitwise: popcount, leading zero, swap.
Buka → # Network FlowMax flow, min cost flow, dan aplikasinya.
Buka → # Matching AlgorithmsBipartite matching dengan Hungarian dan Hopcroft-Karp.
Buka → # String Algorithms LanjutanSuffix automaton, suffix tree, dan pemrosesan string lanjutan.
Buka → # Approximation AlgorithmsAlgoritma pendekatan untuk masalah NP-hard.
Buka → # Pengantar NP-CompletenessKelas P, NP, NP-hard, dan reduksi.
Buka →Bab 24 C++ Standard Library untuk DSA
vector, deque, list, array, forward_list.
Buka → # Container Associativeset, map, multiset, multimap.
Buka → # Unordered Containersunordered_set dan unordered_map dengan hash.
Buka → # IteratorsKategori iterator dan operasinya.
Buka → # Algorithms Librarysort, binary_search, lower_bound, dan algoritma lain di <algorithm>.
Buka → # Ranges LibraryRanges C++20 untuk komposisi algoritma yang ekspresif.
Buka → # Comparator dan Custom OrderingFungsi comparator, operator<, dan std::less.
Buka → # Lambda ExpressionFungsi anonim untuk callback dan comparator.
Buka → # pair, tuple, dan Structured BindingTipe komposit untuk pengelompokan nilai heterogen.
Buka → # Kompleksitas Container STLRingkasan kompleksitas operasi tiap container STL.
Buka →Bab 25 Teknik C++ untuk Implementasi
Pass-by-value vs pass-by-reference: kapan masing-masing dipakai.
Buka → # const CorrectnessMengapa const penting dan kapan dipakai.
Buka → # Move Semanticsstd::move, rvalue reference, dan efisiensi transfer.
Buka → # Smart Pointerunique_ptr, shared_ptr, weak_ptr untuk manajemen memori otomatis.
Buka → # Template dan Generic ProgrammingTemplate lanjutan: specialization, SFINAE, concepts.
Buka → # Error HandlingException, error code, dan std::expected.
Buka → # Integer OverflowDeteksi dan pencegahan overflow.
Buka → # Memory SafetyMenghindari UB, dangling, dan use-after-free.
Buka → # Custom ComparatorMembuat comparator untuk struct dan priority_queue.
Buka → # Optimasi PerformaOptimasi I/O, cache, dan performa kode DSA.
Buka →Bab 26 Pengujian dan Debugging
Pendekatan pengujian untuk algoritma: unit, edge, property.
Buka → # Unit TestingGoogleTest atau Catch2 untuk menguji fungsi.
Buka → # Edge Case TestingKasus batas wajib: kosong, satu elemen, maksimum.
Buka → # Property-Based TestingMenguji sifat algoritma dengan input acak.
Buka → # Differential TestingMembandingkan solusi cepat vs solusi brute force.
Buka → # Debugging C++GDB dasar dan strategi isolasi bug.
Buka → # SanitizersAddressSanitizer, UndefinedBehaviorSanitizer.
Buka → # Undefined BehaviorJebakan UB umum dan cara mendeteksinya.
Buka → # Benchmark dan ProfilingMengukur waktu eksekusi dan menemukan bottleneck.
Buka →Bab 27 Competitive Programming
Ekosistem CP: judge, kontes, dan rating.
Buka → # Membaca Input dan Menulis OutputI/O parsing cepat untuk format CP.
Buka → # Fast I/Osync_with_stdio(false) dan cin tie.
Buka → # Memilih AlgoritmaMengestimasi kompleksitas dari batasan soal.
Buka → # Batasan Waktu dan MemoriKonversi n ke kompleksitas maksimum yang diterima.
Buka → # Strategi KontesManajemen waktu: pick easy, skip, revisit.
Buka → # Common MistakesKesalahan umum: overflow, off-by-one, RE/TLE.
Buka → # Membangun Template KompetisiSnippet kode yang sering dipakai di kontes.
Buka → # Evaluasi SolusiCara mengevaluasi dan meningkatkan solusi setelah kontes: baca editorial, upsolve, dan refleksi.
Buka →Bab 28 Penerapan DSA
Indexing, ranking, dan trie pada search engine sederhana.
Buka → # Sistem Rekomendasi DasarCollaborative filtering sederhana berbasis graph.
Buka → # Penjadwalan TugasTopological sort dan priority queue untuk scheduler.
Buka → # Pencarian JalurShortest path pada peta dan grid.
Buka → # Pemrosesan TeksTokenisasi, stemming, dan string matching.
Buka → # Cache dan LRUImplementasi LRU cache dengan hash + linked list.
Buka → # Simulasi AntreanSimulasi queue sistem layanan.
Buka → # Analisis Data Berskala BesarSampling, hashing, dan external sort.
Buka →Bab 29 Strategi Belajar dan Wawancara Teknis
Roadmap personal berbasis tujuan dan waktu.
Buka → # Strategi Latihan SoalSpaced repetition dan deliberative practice.
Buka → # Membaca EditorialCara membaca editorial solusi secara efektif.
Buka → # Menganalisis Solusi Orang LainBelajar dari berbagai pendekatan.
Buka → # Menjelaskan KompleksitasCara komunikasi Big-O saat wawancara.
Buka → # Menyelesaikan Wawancara TeknisKerangka komunikasi: clarify, plan, code, test.
Buka → # Pola Soal WawancaraPola soal populer di wawancara teknis: two pointers, sliding window, DP, dan lainnya.
Buka → # Evaluasi Kemampuan DSASelf-assessment rubric untuk mengukur kemampuan DSA.
Buka →Bab 30 Proyek
Bangun tool terminal yang merender linked list, binary tree, dan graph sebagai ASCII art.
Lihat proyek → # Proyek: Benchmark Algoritma SortingBenchmark bubble, insertion, merge, quick, heap, dan std::sort pada dataset acak, terurut, dan terbalik.
Lihat proyek → # Proyek: Mesin Pencarian KataBangun search engine sederhana berbasis inverted index dengan ranking TF-IDF.
Lihat proyek → # Proyek: Pencari Jalur TerpendekCari jalur terpendek pada grid 2D berbobot dengan algoritma Dijkstra.
Lihat proyek → # Proyek: Sistem Penjadwalan TugasSimulasikan CPU scheduler dengan priority queue dan aturan FCFS, SJF, priority-based.
Lihat proyek → # Proyek: Pemecah Puzzle dengan SearchSelesaikan 8-puzzle dengan BFS, DFS, dan A* heuristic.
Lihat proyek →