Lewati ke konten utama

Katalog Pembelajaran Struktur Data & Algoritma

Repositori Java berbasis Maven dengan 70+ implementasi DSA yang bisa dijalankan, diindeks per kategori untuk studi progresif.

5 menit baca·Pemula·Konsep·14 Agu 2026
projectjavaalgorithmsdata structures

Katalog Pembelajaran Struktur Data & Algoritma

Apa yang Dibangun

data-structure-and-algorithm adalah repositori pembelajaran pribadi jangka panjang dengan 70+ file sumber Java yang mencakup algoritma fundamental, struktur data klasik, dynamic programming, dan masalah bergaya wawancara. Setiap implementasi bisa dijalankan via method main atau eksekusi bergaya JUnit, diorganisir di bawah src/main/java/zero/to/mastery/ per topik.

Katalog README komprehensif (diperbarui Agustus 2026) memetakan setiap file ke kategorinya, kompleksitas (jika relevan), dan deskripsi satu baris — mengubah repo menjadi referensi yang bisa dinavigasi, bukan tumpukan solusi datar.

Masalah

Mempelajari struktur data dan algoritma dari submission LeetCode acak atau gist tersebar membuat sulit untuk:

  • Melihat hubungan antar implementasi (mis. linked list singly vs doubly vs circular).
  • Membandingkan keluarga algoritma (bubble vs merge vs quick sort berdampingan).
  • Mengunjungi kembali topik bulan kemudian tanpa mencari ulang.

Repositori pembelajaran yang tahan lama membutuhkan taksonomi + kode yang bisa dijalankan + satu indeks.

Mengapa Masalah Ini Sulit

Pengetahuan DSA mencakup banyak topik independen dengan model mental berbeda — base case rekursi, manipulasi pointer di linked list, state traversal graf, dan tabel memoization dynamic programming. Tanpa layout package konsisten dan indeks README, konsep yang sama diimplementasikan ulang dengan nama tidak konsisten dan hilang di pohon direktori.

Model Mental untuk Pemula

Bayangkan perpustakaan dengan rak berlabel:

  • Rak algoritma — resep yang mentransformasi atau mencari data (sort, search, recurse).
  • Rak struktur data — wadah yang menyimpan data (array, list, stack, tree).
  • Rak problem solving — pola wawancara yang menggabungkan keduanya.

README adalah katalog kartu. Setiap file Java adalah satu buku yang bisa dibuka dan dijalankan.

Persyaratan dan Batasan

PersyaratanCara repo memenuhi
Implementasi bisa dijalankanMethod main di kelas algoritma
Kategori progresifPackage per topik di bawah zero.to.mastery
Mudah ditemukanTabel README menaut ke setiap file
Build standarMaven pom.xml dengan Java 11
Cakupan wawancaraMasalah klasik (two sum, trapping rain water, dll.)

Ringkasan Arsitektur

Alur Eksekusi

  1. Pembaca membuka README.md dan memilih topik (mis. Merge Sort).
  2. README menaut ke src/main/java/zero/to/mastery/algorithms/sorting/MergeSort.java.
  3. Pembaca menjalankan method main kelas (IDE atau mvn compile exec:java).
  4. Implementasi mencetak langkah perantara (mis. trace split/merge di merge sort).
  5. Pembaca membandingkan dengan algoritma tetangga di package yang sama (bubble, quick, dll.).

Komponen Penting

KategoriJumlahFile representatif
Masalah array17TwoPairSum.java, TrappingRainWater.java, RotateMatrix90d.java
Linked list10Varian singly, doubly, circular di bawah linked_list/
Sorting5BubbleSort, MergeSort, QuickSort, InsertionSort, SelectionSort
Rekursi7Factorial, Fibonacci, GreatestCommonDivision
Searching3BreadthFirstSearch, DepthFirstSearch, SearchNode
Hash table7Implementasi hash map kustom dan penanganan collision
Stack / Queue6Stack, varian queue dengan backing array dan linked
Tree / Graph3Traversal tree, dukungan pencarian graf
Dynamic programming1DynamicFibonacci.java
Masalah di root8+BinarySearchTargetInArray, AlmostPalindrome, dll.

Contoh Implementasi yang Disederhanakan

Merge sort dengan merge stabil (disederhanakan dari sumber — menggunakan <= untuk stabilitas):

public static List<Integer> merge(List<Integer> left, List<Integer> right) {
List<Integer> merged = new ArrayList<>();
int leftIndex = 0, rightIndex = 0;
while (leftIndex < left.size() && rightIndex < right.size()) {
if (left.get(leftIndex) <= right.get(rightIndex)) {
merged.add(left.get(leftIndex++));
} else {
merged.add(right.get(rightIndex++));
}
}
merged.addAll(left.subList(leftIndex, left.size()));
merged.addAll(right.subList(rightIndex, right.size()));
return merged;
}

README mengkatalogkan kompleksitas untuk algoritma sorting:

AlgoritmaWaktuRuang
Bubble SortO(n²)O(1)
Merge SortO(n log n)O(n)
Quick SortO(n log n) avgO(log n)

Reliabilitas dan Idempotensi

Setiap kelas mandiri dengan method main sendiri. Menjalankan satu file tidak memutasi state bersama di file lain. Tidak ada database atau layanan bersama — kebenaran lokal pada setiap implementasi.

Mode Kegagalan

KegagalanDeteksiPemulihan
Link README usang404 di UI GitHubPerbarui README saat memindah/mengganti nama file
Off-by-one di binary searchIndeks salah dikembalikanBandingkan dengan varian BinarySearchStartAndEndOfTarget
Merge sort tidak stabilElemen sama berubah urutanGunakan <= bukan < di perbandingan merge
Siklus linked listLoop tak terbatasContoh circular list mendokumentasikan deteksi siklus

Trade-off dan Alternatif yang Ditolak

KeputusanAlasanAlternatif yang ditolak
Satu kelas per konsepMudah dijalankan dan dibagikan individualSatu mega-kelas dengan semua algoritma
README sebagai katalogTanpa langkah build untuk menelusuri topikSitus docs ter-generate (setup lebih berat)
Java 11 + MavenBahasa wawancara yang familiarRepo poliglot multi-bahasa
Trace println verboseMengajarkan langkah algoritmaImplementasi senyap
Dependensi LombokLebih sedikit boilerplate di data classPOJO Java murni di mana-mana

Pengujian

JUnit 4 tercantum sebagai dependensi di pom.xml. Banyak file menggunakan method main untuk demonstrasi daripada kelas test formal. Repo memprioritaskan trace eksekusi yang mudah dibaca daripada cakupan test komprehensif.

Operasi dan Observabilitas

git clone https://github.com/okfriansyah-moh/data-structure-and-algorithm.git
cd data-structure-and-algorithm
mvn compile
# Jalankan kelas individual dari IDE atau:
mvn -q exec:java -Dexec.mainClass="zero.to.mastery.algorithms.sorting.MergeSort"

Membutuhkan Java 11+ dan Maven.

Pelajaran yang Dipetik

  1. Katalog README adalah lapisan navigasi termurah — 70 file tetap usable ketika setiap file punya baris tabel dengan link dan deskripsi.
  2. Package per topik, bukan per tanggalalgorithms/sorting/ mengalahkan week3/ untuk mengingat kembali.
  3. Cetak state perantara — log split/merge merge sort mengajarkan divide-and-conquer lebih baik daripada array terurut akhir saja.
  4. Simpan masalah wawancara dekat struktur datanyaTwoPairSum berada di bawah arrays/, bukan dump "leetcode" terpisah.

Sumber