Algoritma dan Kompleksitas


๐Ÿงญ 1. Pengertian Algoritma

https://images.openai.com/static-rsc-4/yv2NW9QMZUqGmTm1Z8pbJrkPLOs6c5SSTV5os5bq3uQL1JJCTMXkX5txxUubyfDC3fWtIU6-ucvRapWLRv2rP57N5MB3rE7ZtMmHrBQ0dfnNLZIu8M2aCYnIARhzr8873-yw4te5QLwXNxhmtgBwSWtRRnta5WMaHwLpUuJrSVjIfs7tU3L336BgVtiN6bbb?purpose=fullsize
https://images.openai.com/static-rsc-4/PfMx94XQIMurWZnEfyEdVKBNTgb8SVh9BW3mlgG_qq3WtLYzP8X-CU8eISk4TyhMvLgEYzRiZvjOkJ4IRDstivMuqKNTO8ANEyR1yFQ1l-ohPTzSNXpSS8L2NdoDEun4TVx_Cfiz72Lt25c-f0bxW7zD2Ah0ftibsgjhqvwuo5D9KWSnHATZaX8Zr8DqkU33?purpose=fullsize
https://images.openai.com/static-rsc-4/OxyPlVk34U_LYM-kPA8beh-kyU4VTHUt4RAvrvcSl5QH6i9voAV-F3gkfLW0WJal5rJkVCfsc3LZeZ_d-T8PE-pT_fDchVWW3YSiKuK5zPCQRJevxyl_MRDJk9vQ72I1rIAOgmRH7w-w8kmwCgm5j1_BfMbQLvKgR9CRrcgQ2Dmfjn3G83e7dh5T7nhKXZho?purpose=fullsize

7

๐Ÿ“– Definisi

Algoritma adalah urutan langkah-langkah logis, sistematis, dan terbatas untuk menyelesaikan suatu masalah.

๐Ÿง  Narasi Konseptual

Dalam dunia pemrograman, algoritma ibarat resep masakan:

  • Memiliki langkah yang jelas
  • Menggunakan input tertentu
  • Menghasilkan output yang diharapkan

Tanpa algoritma yang baik:

  • Program bisa berjalan lambat
  • Menggunakan memori berlebihan
  • Sulit dikembangkan

๐ŸŽฏ 2. Karakteristik Algoritma

๐Ÿ“Š Tabel Karakteristik

KarakteristikPenjelasan
InputMemiliki nol atau lebih input
OutputMenghasilkan minimal satu output
DefinitenessLangkah jelas dan tidak ambigu
FinitenessBerakhir dalam jumlah langkah terbatas
EffectivenessDapat dieksekusi secara nyata

๐Ÿง  Penjelasan

Algoritma harus:

  • Jelas (tidak ambigu)
  • Efisien (tidak boros waktu/memori)
  • Dapat diimplementasikan dalam program

๐Ÿ”„ 3. Representasi Algoritma

https://images.openai.com/static-rsc-4/QqUnEnB1aY7fnUwZYjW6-Ijb-xROvtcaKdxZLXhbBxZ2v5ZrMD7cQm8DPqCj3r408EnQHfm8PL6jRGR7P5GaoRCDWtrSQ3aDZlzRFjhNjt2iBPcyuTRPHawC-JYKsbQIT9vwUxmIpR2-XcTtzRY9V92VNhKnQDHY0xfkDrtkO2bMNhuViWbOVMajlpgJcMsQ?purpose=fullsize
https://images.openai.com/static-rsc-4/KicV-6iuarXF48SPEe1pfsc9txv2jwjUZgKqkdOfqk3rcJCQNCfKs-GygjJWRyfzQe6Pa1T6_8Q8Xd-W5nqrMVkELy5E4r0i4WFu2LYLkW5G45hgPFgd3hk-YeSLG_h4AlTdSXKA-X0gHKuAU96s9-Re_WxK2fBtVxp_lwYIz8-hm3ziLuVB_7VpqJIAPeve?purpose=fullsize
https://images.openai.com/static-rsc-4/g1GlyA6U56fRds8v-n4nq5NOZh4T0j-H2Q6AwA2nHhd2P_M-Bhf7mr-vSl7pIVuW_co8z6IxvYwlSf7ggkQfnYCFPSZAW_e6OHVkLZc6AlEAey_4Ar9X5MPkWtajElCgej5nTGgVeKE9xFVYtIVaXjw6I-4qEoYJe1L_XK2-bIy5LZNhbwKCHg4l70ES2iEV?purpose=fullsize

7

๐Ÿ”น A. Flowchart

Diagram visual yang menggambarkan alur logika program.

๐Ÿ”น B. Pseudocode

Penulisan algoritma menggunakan bahasa semi-formal.

Contoh:

Mulai
Input angka
Jika angka > 0 maka tampilkan "Positif"
Selesai

๐Ÿ”น C. Bahasa Pemrograman

Implementasi langsung dalam kode (Python, C, Java, dll)


โš™๏ธ 4. Analisis Algoritma

๐Ÿ“– Definisi

Analisis algoritma adalah proses untuk menentukan efisiensi algoritma dalam hal:

  • Waktu eksekusi
  • Penggunaan memori

๐Ÿง  Narasi

Tidak semua algoritma dengan hasil sama memiliki performa sama.
โžก๏ธ Algoritma terbaik adalah yang paling efisien.


โฑ๏ธ 5. Kompleksitas Waktu (Time Complexity)

https://images.openai.com/static-rsc-4/HwYDhKBrmf-26E9yfBDs1uDx3uyf65kD6WjBDpVLuFCM3eUhFMsgtgS2zrBVtTfQpwye8agjxim06gtbrc7SrC3CRu7dN05-iOTibrafTXFRgO_ta8iipEZTunf-fZByREoraNsQeqmFummW-ClUSTUC0pjv5C_0kecJxRjVHLYTr38CSSGQ4SQU-9_7aXJK?purpose=fullsize
https://images.openai.com/static-rsc-4/KinQIQNsqWCB-BfcDFwyotQiVjn-zTw27v0HXZOwb-8ntLHnv_sOKguKu1pFYfo1tqgBwjHqbCxtwOculZpGlLopuNoIuQtmWX1zzM-2rC2u95B9yXEJFOKNdoBpsCYybWL8vHGdc5-oCjIk6lFCjB8Idv57rKpm8xrrokbugtPSbvUCOsISFXHLmzpNreIK?purpose=fullsize
https://images.openai.com/static-rsc-4/kW91LOC-5aiyhATG8-JQ_wFFvAS4UDtLZ0W-XAC5T58mrKaBtGI4nsOcJ-9LZoMgB_g-Ucn_1wpqcFgCK-AGimpmrFm4zSxrgFRpLvdWP09RRxJhWtA2n_OtI2RA-2ibG8jcU2mDebl8ZYoTrSR843IqnYyI_MzOHtH1vngFF_V2U551y1xYqP86TirmYiu3?purpose=fullsize

7

๐Ÿ“– Definisi

Ukuran waktu yang dibutuhkan algoritma berdasarkan ukuran input (n).


๐Ÿ“Š Notasi Big-O

NotasiNamaContoh
O(1)KonstanAkses array
O(log n)LogaritmikBinary search
O(n)LinearLoop sederhana
O(n log n)Linear-logMerge sort
O(nยฒ)KuadratikBubble sort

๐Ÿง  Narasi

  • O(1) โ†’ sangat cepat
  • O(nยฒ) โ†’ lambat untuk data besar

โžก๏ธ Pemilihan algoritma sangat penting dalam aplikasi skala besar.


๐Ÿ“ Visualisasi Fungsi Kompleksitas

y=1,โ€…โ€Šy=logโกn,โ€…โ€Šy=n,โ€…โ€Šy=nlogโกn,โ€…โ€Šy=n2y = 1,\; y = \log n,\; y = n,\; y = n \log n,\; y = n^2y=1,y=logn,y=n,y=nlogn,y=n2

Penjelasan:

  • Kurva menunjukkan pertumbuhan waktu terhadap ukuran input
  • Semakin curam kurva โ†’ semakin tidak efisien

๐Ÿงฎ 6. Kompleksitas Ruang (Space Complexity)

๐Ÿ“– Definisi

Jumlah memori yang digunakan oleh algoritma selama eksekusi.


๐Ÿ“Š Komponen Space Complexity

KomponenPenjelasan
VariabelPenyimpanan data
Struktur dataArray, list, dll
RekursiStack pemanggilan fungsi

๐Ÿง  Narasi

Algoritma cepat belum tentu hemat memori.
โžก๏ธ Harus ada keseimbangan antara waktu dan ruang.


๐Ÿ” 7. Best Case, Worst Case, Average Case

๐Ÿ“Š Tabel Perbandingan

KasusPenjelasan
Best CaseKondisi terbaik
Worst CaseKondisi terburuk
Average CaseRata-rata kondisi

๐Ÿง  Contoh

Linear Search:

  • Best: data ditemukan di awal โ†’ O(1)
  • Worst: data di akhir โ†’ O(n)

๐Ÿ” 8. Contoh Analisis Algoritma

๐Ÿ“Œ Contoh 1: Loop Sederhana

for i in range(n):
print(i)

โžก๏ธ Kompleksitas: O(n)


๐Ÿ“Œ Contoh 2: Nested Loop

for i in range(n):
for j in range(n):
print(i, j)

โžก๏ธ Kompleksitas: O(nยฒ)


๐Ÿ“Œ Contoh 3: Binary Search

def binary_search(arr, target):
low = 0
high = len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1

โžก๏ธ Kompleksitas: O(log n)


โš–๏ธ 9. Perbandingan Efisiensi Algoritma

https://images.openai.com/static-rsc-4/eM8ghi3gsoBX6XVo1C2WVAqbuFHuPcRqj7CRJIu5RJhLHUBeTO54C73bxh0FhzsQomC6Th57YGCEg-cMR0UouP9RTJnnW_ITOHIF_VOy5beSJUyYxRTkiJ2XwHMhAaaKOq47nKKAaAxlrtloquPYWVoOapYqtHSQDhILoNqNnG3mEwgrCvJjV754O63pRZDq?purpose=fullsize
https://images.openai.com/static-rsc-4/N_V5kjEnPYbVGHBKHroW2qWtY4AxuzJzEvYSssco4_ip0Z-syG38NrZEhyNjeqOUdXulQXdPj4nIYfUVPl89l_2tL0Pg39aHJ3_QMepWEH2HORN7MPXBhI-GtL0y9VdRT-02I6elOSuHGlRtP5F4bU-kdMEWsefkOqQc_UxHvPlNLvgei2D5NiYJXXVW03Ng?purpose=fullsize
https://images.openai.com/static-rsc-4/IZ5BD34v03a3Nvxjg6fGMYd1qvDMy1gyui8qXX8_cHMtctLw4IVXKEWr2pe3hRoD_YZyK-InjBRny3QRMoGNpT5anWmiTMonTcfNAUW9shVNKUwzfZbzboQxpB7tGU7NQKU0DXR8ysNOZF00hCfyCsLyhsX834R6R-aQ50G3FMTI9lLJMm6iL8Hsmx6UeJb_?purpose=fullsize

6

๐Ÿง  Narasi

Misalnya:

  • Bubble Sort โ†’ O(nยฒ)
  • Merge Sort โ†’ O(n log n)

โžก๏ธ Untuk data besar, perbedaan sangat signifikan.


๐Ÿ”— 10. Hubungan Algoritma dan Struktur Data

๐Ÿ“– Konsep

Algoritma tidak bisa dipisahkan dari struktur data.

๐Ÿง  Narasi

  • Struktur data menentukan bagaimana data disimpan
  • Algoritma menentukan bagaimana data diproses

๐Ÿ“Œ Contoh:

  • Binary Search hanya bisa digunakan pada array terurut

๐Ÿงช 11. Studi Kasus Nyata

๐Ÿ“Œ Kasus: Pencarian Data Mahasiswa

  • Data kecil โ†’ Linear Search cukup
  • Data besar โ†’ Binary Search lebih efisien

๐Ÿ“š 12. Ringkasan Materi

  • Algoritma adalah langkah penyelesaian masalah
  • Kompleksitas mengukur efisiensi algoritma
  • Notasi Big-O digunakan untuk analisis
  • Terdapat trade-off antara waktu dan memori
  • Pemilihan algoritma sangat menentukan performa sistem

๐Ÿ“ 13. Latihan / Diskusi

โœ๏ธ Soal Teori

  1. Jelaskan pengertian algoritma
  2. Apa itu kompleksitas waktu?
  3. Jelaskan perbedaan O(n) dan O(nยฒ)

๐Ÿ’ป Soal Praktikum

  1. Buat program pencarian linear
  2. Implementasikan binary search
  3. Bandingkan waktu eksekusi keduanya

๐ŸŽฏ Penutup

Pemahaman tentang algoritma dan kompleksitas sangat penting karena:

  • Menentukan efisiensi program
  • Digunakan dalam semua bidang IT
  • Menjadi dasar optimasi sistem