0% menganggap dokumen ini bermanfaat (0 suara)
75 tayangan

Modul 8

Ayo

Diunggah oleh

APB. BANGSAWAN
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
75 tayangan

Modul 8

Ayo

Diunggah oleh

APB. BANGSAWAN
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 9

ANDI PANGERAN BANGSAWAN

101072300155

S1-TT-KJ-23-03

TUGAS PENDAHULUAN MODUL 8 ( SEARCHING )


PRAKTIKUM ALGORITMA DAN PEMROGRAMAN

1. Sebutkan dan jelaskan macam-macam searching!


Algoritma Searching adalah Teknik untuk menemukan data tertentu dalam Kumpulan data
yang besar. Algoritma ini digunakan dalam berbagai aplikasi :
- membuat indeks untuk mesin pencari
- mencari file di computer
- mencari data dalam database

Macam-macam Searching :

1. Pencarian Sequential (Sequential Search)


Pencarian sequential adalah algoritma pencarian paling sederhana. Algoritma ini bekerja
dengan cara memeriksa setiap elemen dalam kumpulan data satu per satu hingga
elemen yang dicari ditemukan.
2. Pencarian Biner (Binary Search)
Pencarian biner adalah algoritma pencarian yang lebih efisien daripada pencarian
sequential. Algoritma ini hanya bekerja pada kumpulan data yang sudah terurut.
Algoritma ini bekerja dengan cara membagi kumpulan data menjadi dua bagian secara
berulang, dan kemudian mencari elemen yang dicari di salah satu bagian.
3. Pencarian Hashing (Hashing)
Pencarian hashing adalah algoritma pencarian yang menggunakan tabel hash untuk
menyimpan data. Tabel hash adalah struktur data yang memetakan kunci ke nilai.
Algoritma ini bekerja dengan cara menghitung hash dari elemen yang dicari, dan
kemudian mencari elemen tersebut dalam tabel hash berdasarkan hashnya.
4. Pencarian A (A Search)**
Pencarian A* adalah algoritma pencarian yang digunakan untuk menemukan jalur
terpendek antara dua titik dalam sebuah grafik. Algoritma ini menggunakan heuristik
untuk memperkirakan jarak dari titik saat ini ke titik tujuan.
5. Pencarian Pohon (Tree Search)
Pencarian pohon adalah algoritma pencarian yang digunakan untuk mencari elemen
dalam pohon. Algoritma ini bekerja dengan cara menjelajahi pohon secara berulang, dan
kemudian mencari elemen yang dicari di salah satu node pohon.
6. Pencarian Breadth-First (Breadth-First Search)
Pencarian breadth-first adalah algoritma pencarian pohon yang menjelajahi pohon level
demi level. Algoritma ini bekerja dengan cara menambahkan semua node dalam level
saat ini ke antrian, dan kemudian memproses node-node tersebut satu per satu.
7. Pencarian Depth-First (Depth-First Search)
Pencarian depth-first adalah algoritma pencarian pohon yang menjelajahi pohon
sedalam mungkin sebelum berpindah ke cabang lain. Algoritma ini bekerja dengan cara
menambahkan node ke tumpukan, dan kemudian memproses node-node tersebut satu
per satu.

2. Menurut kalian, searching manakah yang paling cepat menemukan data dengan jumlah
banyak, diantara sequential search dan binary search? Jelaskan alasannya!
Kompleksitas Waktu :
- Sequential Search : Memiliki kompleksitas waktu O(n), di mana n adalah jumlah elemen
dalam data. Ini berarti waktu yang dibutuhkan untuk mencari data meningkat secara
linear dengan jumlah elemen. Saat jumlah elemen meningkat, waktu yang dibutuhkan
untuk pencarian akan meningkat secara proporsional.
- Binary Search : Memiliki kompleksitas waktu O(log n), di mana n adalah jumlah elemen
dalam data. Ini berarti waktu yang dibutuhkan untuk mencari data meningkat secara
logaritmik dengan jumlah elemen. Meskipun data lebih banyak, jumlah iterasi yang
diperlukan untuk menemukan elemen tetap terbatas, sehingga waktu yang dibutuhkan
untuk pencarian cenderung lebih sedikit daripada sequential search.

Caa Kerja :

- Sequential Search : Melibatkan pemeriksaan setiap elemen satu per satu dari awal
hingga elemen yang dicari ditemukan. Ketika data banyak, proses ini bisa memakan
banyak waktu karena harus memeriksa semua elemen, terutama jika elemen yang dicari
berada di akhir atau tidak ada dalam data.
- Binary Search : Mengasumsikan data dalam keadaan terurut. Prosesnya membagi data
menjadi dua bagian setiap kali, kemudian memeriksa apakah elemen yang dicari berada
di setengah data pertama atau kedua. Ini berlanjut hingga elemen ditemukan atau tidak
ada lagi data yang perlu diperiksa. Karena membagi data setiap kali, binary search
cenderung lebih efisien dalam menemukan elemen.

Jadi, dalam kasus mencari data dalam jumlah banyak, binary search lebih cepat karena
memiliki kompleksitas waktu yang lebih baik dan cara kerja yang lebih efisien daripada
sequential search.

3. Jelaskan prinsip kerja dari Binary Search!


Prinsip kerja dari Binary Search adalah mencari elemen tertentu dalam sebuah kumpulan
data terurut dengan cepat dan efisien. Berikut adalah langkah-langkah utama dari prinsip
kerja Binary Search:
1. Data Terurut
2. Pembagian Data
3. Pengecekan Elemen Tengah
4. Pencarian Berlanjut
5. Iterasi
6. Elemen Ditemukan
7. Elemen Tidak Ditemukan

Prinsip kerja Binary Search didasarkan pada pendekatan "divide and conquer", di mana data
terus dibagi menjadi bagian-bagian yang lebih kecil sampai elemen yang dicari ditemukan
atau tidak ada lagi data yang tersisa untuk diperiksa. Hal ini membuat Binary Search menjadi
metode pencarian yang sangat efisien terutama pada data yang besar dan terurut.

4. Menurut kalian, apa yang terjadi bila menggunakan binary search pada data yang tidak
terurut? Jelaskan alasannya!
Jika menggunakan binary search pada data yang tidak terurut, hasilnya tidak dapat diprediksi
dengan akurat dan kemungkinan besar tidak akan menemukan elemen yang dicari dengan
benar. Hal ini disebabkan oleh beberapa alasan:
1. Prinsip Binary Search : Binary search memerlukan bahwa data telah diurutkan terlebih
dahulu. Algoritma ini bekerja dengan membagi data menjadi dua bagian setiap kali, dan
mengasumsikan bahwa data dalam keadaan terurut. Jika data tidak terurut, pembagian
data menjadi dua bagian tidak akan bermakna, dan algoritma tidak akan berfungsi
sebagaimana yang diharapkan.
2. Pengecualian Error : Saat menggunakan binary search pada data yang tidak terurut, hasil
pencarian bisa jadi tidak konsisten dan tidak dapat diandalkan. Algoritma tersebut
mungkin saja menemukan elemen yang dicari secara kebetulan, tetapi hal ini tidak
menjamin bahwa pencarian akan berhasil setiap saat atau memberikan hasil yang akurat.
3. Efisiensi : Binary search pada data yang tidak terurut bisa memakan waktu yang lebih
lama daripada menggunakan metode pencarian lain yang lebih cocok untuk data tidak
terurut, seperti sequential search. Hal ini karena binary search tidak dapat
memanfaatkan sifat terurutnya data untuk mengurangi jumlah perbandingan yang
diperlukan.

Jadi, menggunakan binary search pada data yang tidak terurut tidak disarankan karena tidak
sesuai dengan prinsip dasar algoritmanya dan hasilnya tidak dapat diandalkan. Lebih baik
menggunakan metode pencarian lain yang cocok untuk data tidak terurut, seperti sequential
search atau metode pencarian yang sesuai dengan sifat data yang dimiliki.

5. Perhatikan potongan program berikut!


i=0;
while ((i<=n-1) && (a[i]!=cari))
i=i+1;
if (a[i]==cari)
printf("Data ditemukan pada urutan : %d",i+1);
else printf("Data tidak ditemukan");
}

Jelaskan fungsi potongan program di atas!

1. Inisialisasi Variabel : program dimulai dengan menginisialisasi variabel ‘i’ dengan nilai O.
Variabel ‘i’ ini akan digunakan sebagai indeks untuk mengakses elemen-elemen dalam array
2. Pencarian Sequential : Dilakukan proses pencarian sekuensial (sequential search) dengan
menggunakan loop ‘while’. Loop ini akan terus berjalan selama kondisi ‘(i<= n-1) && (a[i] !=
cari)’ terpenuhi. Artinya, loop akan berhenti jika ‘i’ sudah mencapai batas atas array atau jika
elemen yang ditemukan sama dengan elemen yang dicari.
3. Increment Index : Setiap iterasi dalam loop, nilai indeks ‘i’ akan ditambahkan 1 dengan
pernyataan ‘i = i + 1’. Hal ini bertujuan untuk memindahkan pencarian ke elemen berikutnya
dalam array.
4. Pengecekan Data : Setelah loop berakhir, dilakukan pengecekan apakah elemen yang
ditemukan sama dengan elemen yang dicari. Jika ya, maka cetak pesan "Data ditemukan
pada urutan : %d" diikuti dengan indeks elemen tersebut ditambah 1 (karena indeks dimulai
dari 0). Jika tidak, cetak pesan "Data tidak ditemukan".

6. Buatlah program menggunakan BINARY SEARCH untuk menemukan angka yang telah
diinputkan user secara acak, urutkan data terlebih dahulu. (Gunakan bubble sort)
Contoh :
=== INPUT ===
Banyak angka : 5
Angka 1 : 8
Angka 2 : 2
Angka 3 : 6
Angka 4 : 3
Angka 5 : 1
Angka yang dicari : 3
=== OUTPUT ===
Angka yang sudah terurut : 1 2 3 6 8
Angka 3 ditemukan pada urutan ke-3

JAWAB :

#include <stdio.h>

// Fungsi untuk menukar dua elemen


void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}

// Fungsi untuk mengurutkan data menggunakan Bubble Sort


void bubbleSort(int arr[], int n) {
int i, j;
for (i = 0; i < n-1; i++) {
for (j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
swap(&arr[j], &arr[j+1]);
}
}
}
}

// Fungsi untuk melakukan Binary Search


int binarySearch(int arr[], int low, int high, int x) {
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == x) {
return mid;
}
if (arr[mid] < x) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1; // Mengembalikan -1 jika angka tidak ditemukan
}

int main() {
int n, i, angkaDicari;
printf("Banyak angka: ");
scanf("%d", &n);
int arr[n];

// Input angka
for (i = 0; i < n; i++) {
printf("Angka %d: ", i+1);
scanf("%d", &arr[i]);
}

// Mengurutkan data menggunakan Bubble Sort


bubbleSort(arr, n);

printf("Angka yang sudah terurut: ");


for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");

printf("Angka yang dicari: ");


scanf("%d", &angkaDicari);

// Mencari angka menggunakan Binary Search


int result = binarySearch(arr, 0, n - 1, angkaDicari);
if (result != -1) {
printf("Angka %d ditemukan pada urutan ke-%d\n", angkaDicari, result + 1);
} else {
printf("Angka %d tidak ditemukan\n", angkaDicari);
}

return 0;
}

7. Buatlah program mencari nama dan nim mahasiswa yang telah diinputkan user secara acak,
urutkan nama terlebih dahulu. (ascending)!
Contoh :
===INPUT===
Jumlah Mahasiswa : 3

Mahasiswa 1 : Ghufron
Nim : 110223

Mahasiswa 2 : Rayhan
Nim : 001231

Mahasiswa 3 : Andriansyah
Nim : 913211

===OUTPUT===
Hasil Pengurutan :
1. Nama : Andriansyah
NIM : 110223
2. Nama : Ghufron
NIM : 001231
3. Nama : Rayhan
NIM : 913211

NIM Mahasiswa yang dicari : 001231

NIM 001231 ditemukan pada urutan ke-2

JAWAB :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_NAMA_LENGTH 50
#define MAX_NIM_LENGTH 10

typedef struct {
char nama[MAX_NAMA_LENGTH];
char nim[MAX_NIM_LENGTH];
} Mahasiswa;

// Fungsi untuk membandingkan dua string


int compare_string(const void *a, const void *b) {
return strcmp(((Mahasiswa*)a)->nama, ((Mahasiswa*)b)->nama);
}

int main() {
int jumlah_mahasiswa, i;

printf("Jumlah Mahasiswa: ");


scanf("%d", &jumlah_mahasiswa);

Mahasiswa *mahasiswa = (Mahasiswa*)malloc(jumlah_mahasiswa * sizeof(Mahasiswa));

// Memasukkan data mahasiswa


for (i = 0; i < jumlah_mahasiswa; i++) {
printf("Mahasiswa %d: ", i+1);
scanf("%s", mahasiswa[i].nama);
printf("NIM: ");
scanf("%s", mahasiswa[i].nim);
}

// Mengurutkan mahasiswa berdasarkan nama


qsort(mahasiswa, jumlah_mahasiswa, sizeof(Mahasiswa), compare_string);

// Mencetak hasil pengurutan


printf("\n===OUTPUT===\n");
printf("Hasil Pengurutan:\n");
for (i = 0; i < jumlah_mahasiswa; i++) {
printf("%d. Nama : %s\n NIM : %s\n", i+1, mahasiswa[i].nama, mahasiswa[i].nim);
}

char nim_cari[MAX_NIM_LENGTH];
printf("\nNIM Mahasiswa yang dicari: ");
scanf("%s", nim_cari);

// Mencari NIM yang dicari


for (i = 0; i < jumlah_mahasiswa; i++) {
if (strcmp(mahasiswa[i].nim, nim_cari) == 0) {
printf("\nNIM %s ditemukan pada urutan ke-%d\n", nim_cari, i+1);
break;
}
}

// Jika NIM tidak ditemukan


if (i == jumlah_mahasiswa) {
printf("\nNIM tidak ditemukan\n");
}

// Membebaskan memori yang dialokasikan


free(mahasiswa);

return 0;
}

8. Buatlah program menggunakan sequential search untuk mencari suatu barang dari beberapa
barang yang telah diinputkan!
a. Jenis makanan
b. Jenis minuman
NIM ganjil mengerjakan point a, NIM genap mengerjakan poin b
Contoh program a:
==INPUT==
Banyak Makanan : 3
Makanan di piring 1: Perkedel
Makanan di piring 2: Tahu
Makanan di piring 3: Tempe
Makanan yang ingin dicari : Tahu
==OUTPUT==
Tahu terdapat pada piring 2

Contoh program b:
==INPUT==
Banyak Minimun : 3
Minuman di gelas 1: Susu
Minuman di gelas 2: Kopi
Minuman di gelas 3: Teh
Minuman yang ingin dicari : Teh
==OUTPUT==
Teh terdapat pada gelas 3

JAWAB :

#include <stdio.h>
#include <string.h>

#define MAX_BARANG 100


#define MAX_NAMA_BARANG 50

// Fungsi untuk mencari barang


int sequential_search(char barang[][MAX_NAMA_BARANG], int banyak_barang, char
*barang_dicari) {
int i;
for (i = 0; i < banyak_barang; i++) {
if (strcmp(barang[i], barang_dicari) == 0) {
return i;
}
}
return -1; // Jika barang tidak ditemukan
}

int main() {
int banyak_barang, posisi;
char barang[MAX_BARANG][MAX_NAMA_BARANG];
char barang_dicari[MAX_NAMA_BARANG];

// Meminta input banyak barang


printf("Banyak Barang: ");
scanf("%d", &banyak_barang);

// Memasukkan nama barang


for (int i = 0; i < banyak_barang; i++) {
printf("Barang di piring %d: ", i + 1);
scanf("%s", barang[i]);
}

// Meminta barang yang ingin dicari


printf("Barang yang ingin dicari: ");
scanf("%s", barang_dicari);

// Melakukan pencarian sekuensial


posisi = sequential_search(barang, banyak_barang, barang_dicari);

// Mencetak hasil pencarian


if (posisi != -1) {
printf("%s terdapat pada piring %d\n", barang_dicari, posisi + 1);
} else {
printf("%s tidak ditemukan\n", barang_dicari);
}

return 0;
}

Anda mungkin juga menyukai