Anda di halaman 1dari 24

LAPORAN PRAKTIKUM STRUKTUR DATA

Pertemuan 1
“Modul 1 – Searching Array”

Disusun oleh :
Nama : Ardiah Pramesty Cahyani
Nim : 2055301016
Dosen : Maksum Ro’is Adin Saf, S.Kom., M.Eng.
Ail : Uun Patrio, S.S.T.

Program Studi D4-Teknik Informatika


Jurusan Teknologi Informasi
Politeknik Caltex Riau
T.A. 2021/2022
ISI LAPORAN

1. Searching
Searching adalah proses pencarian data dengan menelusuri tempat pencarian data tersebut.
Ada beberapa metode pencarian yang akan dipelajari pada praktikum ini, yaitu :
• Sequential Search
• Sequential Search dengan Sentinel
• Binary Search
• Interpolation Search

1.1 Sequential Search


Sequential search adalah suatu teknik pencarian data array ( 1 dimensi ) yang akan
menelusuri semua elemen-elemen array dari awal sampai akhir, dimana data-data tidak perlu
diurutkan terlebih dahulu. Kemungkinan terbaik (best case) adalah jika elemen yang dicari
berada pada index terkecil (elemen pertama) array, sehingga waktu yang diperlukan untuk
melakukan proses pencarian singkat (minimal). Kemungkinan terburuk (worst case) adalah
jika elemen yang dicari berada pada index terakhir (elemen terakhir) array, sehingga waktu
yang diperlukan untuk melakukan proses pencarian lama (maksimal).
Algoritma pencarian data dengan menggunakan sequential search adalah sebagai
berikut :
• Masukkan data yang dicari.
• Lakukan proses pengulangan dari 0 hingga n-1untuk mengakses setiap elemen array.
• Bandingkan satu persatu semua data elemen array dengan data yang dicari.
• Gunakan variable penanda (flag), berikan nilai 1 pada variable flag jika data yang
dicari ada (ditemukan) dan beri nilai 0 jika data yang dicari tidak ditemukan. Nilai
variable flag pertama kali diinisialisasi dengan nilai 0.
Program 1.1
• Syntax program 1.1
package Pertemuan1_PSDA;

import javax.swing.JOptionPane;

public class SimpleSequentialSearch {

public static void main(String[] args) {


int[] a = {1, 5, 7, 4, 8, 3, 6, 2};
int flag = 0;

int j = Integer.parseInt(JOptionPane.showInputDialog("Masukkan
Angka Yang Dicari : "));
for (int i = 0; i < a.length; i++) {
if (j == a[i]) {
flag = 1;
break;
} else {
flag = 0;
}
}
if (flag == 1) {
System.out.println("Data yang dicari : " + j + " ada ");

} else {
System.out.println("Data yang dicari : " + j + " tidak ada ");
}
}
}
• Screenshot Output
- Jika data yang ingin dicari terdapat didalam array maka akan menampilkan
output seperti pada gambar berikut.

- Jika data yang ingin dicari tidak terdapat didalam array maka akan
menampilkan output seperti pada gambar berikut.
Tugas 1.1
Buatlah program untuk mencari sebuah data pada sebuah array berdimensi satu dengan
metode sequential search(data tidak terurut, dan jumlah elemen beserta data
elemennya merupakan inputan user).
Jawab:
• Program tugas 1.1
package Pertemuan1_PSDA;

import javax.swing.JOptionPane;

public class Tugas_1 {

public static void main(String[] args) {


int flag = 0;
int input = Integer.parseInt(JOptionPane.showInputDialog("Berapa
banyak data yang akan di masukkan?"));
int data[] = new int[input];

System.out.println("Isi Data Array");


System.out.print("[");
for (int i = 0; i < input; i++) {
data[i] = Integer.parseInt(JOptionPane.showInputDialog("Inputkan
Data ke " + (i + 1)));
System.out.print(" " + data[i]);
}
System.out.print(" ]\n\n");

int cari = Integer.parseInt(JOptionPane.showInputDialog("Inputkan data


yang akan dicari!"));
for (int i = 0; i < data.length; i++) {
if (cari == data[i]) {
flag = 1;
}
}

if (flag == 1) {
System.out.println("Data yang dicari : " + cari);
System.out.println("Data Ada!");
} else {
System.out.println("Data yang dicari : " + cari);
System.out.println("Data Tidak Ada!");
}
}
}

• Screenshot ouput
- Jika data yang ingin dicari terdapat didalam array maka akan menampilkan
output seperti pada gambar berikut.

- Jika data yang ingin dicari tidak terdapat didalam array maka akan
menampilkan output seperti pada gambar berikut.
1.2 Sequential Search Dengan Sentinel
Teknik ini pada dasarnya hampir sama dengan sequential search, akan tetapi
ditambahkan sebuah indeks array yang belum bernilai (tanpa data) yang digunakan sebagai
penanda (sentinel). Sentinel ini berfungsi untuk menjaga agar indeks data berada pada indeks
ke (n-1) saja. Jika pencarian data sudah sampai pada indeks ke –n, maka artinya data yang
dicari TIDAK ADA (tidak ketemu), sedangkan jika pencarian tidak mencapai indeks ke-n,
maka data yang dicari ADA (ketemu).

Program 1.2
• Syntax program 1.2
package Pertemuan1_PSDA;

import javax.swing.JOptionPane;

public class SequentialSearchSentinel {

public static void main(String[] args) {


int a[] = new int[9];
a[0] = 1;
a[1] = 5;
a[2] = 7;
a[3] = 4;
a[4] = 8;
a[5] = 3;
a[6] = 6;
a[7] = 2;
int flag = 0;
int j = 0;
j = Integer.parseInt(JOptionPane.showInputDialog("Masukkan Angka
yang dicari : "));
a[8] = j;

while (j != a[flag]) {
flag++;
}
if (flag < (a.length - 1)) {
System.out.println("Data yang dicari : " + j + " ada ");
} else {
System.out.println("Data yang dicari: " + j + " tidak ada ");
}
}
}

• Screenshot output
- Jika data yang ingin dicari terdapat didalam array maka akan menampilkan
output seperti pada gambar berikut.

- Jika data yang ingin dicari tidak terdapat didalam array maka akan
menampilkan output seperti pada gambar berikut.
Tugas 1.2
Buatlah program untuk mencari sebuah data pada sebuah array berdimensi satu dengan
metode sequential search (data tidak terurut, dan jumlah elemen beserta data elemennya
merupakan inputan user).
Jawab :
• Program tugas 1.2
package Pertemuan1_PSDA;

import javax.swing.JOptionPane;

public class Tugas_2 {

public static void main(String[] args) {


int flag = 0;
int input = Integer.parseInt(JOptionPane.showInputDialog("Berapa
banyak data yang akan di masukkan?"));
int data[] = new int[input];

System.out.println("Isi Data Array");


System.out.print("[");
for (int i = 0; i < input; i++) {
data[i] = Integer.parseInt(JOptionPane.showInputDialog("Inputkan
Data ke " + (i + 1)));
System.out.print(" " + data[i]);
}
System.out.print(" ]\n\n");

int cari = Integer.parseInt(JOptionPane.showInputDialog("Inputkan Data


yang akan dicari!"));
data[data.length - 1] = cari;
while (cari != data[flag]) {
flag++;
}

if (flag < data.length - 1) {


System.out.println(
"Data yang dicari : " + cari + " ada ");
} else {
System.out.println("Data yang dicari : " + cari + " Tidak Ada ");
}
}
}

• Screenshot output
- Jika data yang ingin dicari terdapat didalam array maka akan menampilkan
output seperti pada gambar berikut.

- Jika data yang ingin dicari tidak terdapat didalam array maka akan
menampilkan output seperti pada gambar berikut.
1.3 Binary Search
Binary Search adalah teknik pencarian data dengan cara membagi data menjadi dua
bagian setiap kali terjadi proses pengurutan. Data yang ada harus diurutkan terlebih dahulu
berdasarkan urutan tertentu yang dijadikan kunci pengurutan.
Algoritma pencarian data dengan teknik binary search adalah sebagai berikut :
• Data ada dalam keadaan terurut
• Mengambil data dari posisi 1 hingga posisi terakhir N
• Mencari posisi tengah (pt) dari data dengan menggunakan rumus :
Pt = (posisi awal + posisi akhir) / 2
• Membandingkan data yang dicari dengan data yang berada pada posisi tengah,
apakah lebih kecil, sama atau malah lebih besar.
• Jika lebih kecil, maka posisi akhir (N) adalah posisi tengah -1 atau N=(pt-1)
• Jika lebih besar, maka posisi awal (pa) adalah posisi tengah + 1 atau pa=(pt+1)
• Jika data yang dicari sama dengan data yang berada pada posisi tengah, maka data
tersebut ADA (ketemu)

Program 1.3
• Syntax program 1.3
package Pertemuan1_PSDA;

import javax.swing.JOptionPane;

public class SimpleBinSearch {

public static void main(String[] args) {


int[] c = {3, 5, 7, 9, 11, 17, 33};
int awal = 0;
int akhir = 0;

int nt = 0;
int flag = 0;
int cari;
cari = Integer.parseInt(JOptionPane.showInputDialog("Masukkan
angka yang dicari: "));
akhir = c.length - 1;
while (awal < akhir && flag == 0) {
nt = Math.abs((awal + akhir) / 2);
if (c[nt] == cari) {
flag = 1;
} else if (cari < c[nt]) {
akhir = nt - 1;
} else {
awal = nt + 1;
}
}
if (flag == 1) {
JOptionPane.showMessageDialog(null, "Data ditemukan !!");
} else {
JOptionPane.showMessageDialog(null, "Data tidak ditemukan
!!");
}

System.exit(0);

}
}

• Screenshot output
- Jika data yang ingin dicari terdapat didalam array maka akan
menampilkan output seperti pada gambar berikut.
• Jika data yang ingin dicari tidak terdapat didalam array maka akan
menampilkan output seperti pada gambar berikut.
Tugas 1.3
Buatlah program untuk mencari sebuah data pada sebuah array berdimensi satu
dengan metode binary search (asumsikan data sudah terurut, dan jumlah elemen
beserta data elemennya merupakan inputan user)!
Jawab :
• Program tugas 1.3
package Pertemuan1_PSDA;

import javax.swing.JOptionPane;

public class Tugas_3 {

public static void main(String[] args) {


int awal = 0;
int akhir = 0;
int nt = 0;
int flag = 0;
int input = Integer.parseInt(JOptionPane.showInputDialog("Berapa
banyak data yang akan di masukkan?"));
int data[] = new int[input];

System.out.println("Isi Data Array");


System.out.print("[");
for (int i = 0; i < input; i++) {
data[i] =
Integer.parseInt(JOptionPane.showInputDialog("I
nputkan Data ke " + (i + 1)));
System.out.print(" " + data[i]);
}
System.out.print(" ]\n\n");

int cari =
Integer.parseInt(JOptionPane.showInputDialog("I
nputkan data yang akan dicari!"));
akhir = data.length - 1;
while (awal <= akhir && flag == 0) {
nt = Math.abs((awal + akhir) / 2);
if (data[nt] == cari) {
flag = 1;
} else if (cari < data[nt]) {
akhir = nt - 1;
} else {
awal = nt + 1;
}
}
if (flag == 1) {
JOptionPane.showMessageDialog(null, "Data ditemukan!");

} else {
JOptionPane.showMessageDialog(null, "Data tidak
ditemukan!");
System.exit(0);
}
}
}

• Screenshot output
- Jika data yang ingin dicari terdapat didalam array maka akan
menampilkan output seperti pada gambar berikut.
- Jika data yang ingin dicari tidak terdapat didalam array maka akan
menampilkan output seperti pada gambar berikut.
1.4 Interpolation Search
Interpolation search adalah suatu teknik pencarian pada data\yang telah terurut
berdasarkan kunci tertentu. Teknik dari pencarian ini dilakukan dengan perkiraan data.
Contohnya adalah ketika mencari arti kata yang berawalan N pada kamus, maka kita akan
mencarinya pada 1/2 atau 1/3 halaman pertama pada kamus. Jadi kita mencari data secara
relatif terhadap jumlah data. Rumus untuk mencari posisi relatif adalah sebagai berikut :
𝒌𝒖𝒏𝒄𝒊−𝒅𝒂𝒕𝒂 [𝒍𝒐𝒘]
Posisi = 𝒅𝒂𝒕𝒂 [𝒉𝒊𝒈𝒉]−𝒅𝒂𝒕𝒂 [𝒍𝒐𝒘] x (high – low) + low

Contoh :
Misalkan ada sekumpulan data yang telah terurut :
2,4,6,36,38,40,42,45, 60
Data yang akan dicari pada data tersebut diatas adalah 40, maka proses pencarian adalah
sebagai berikut :
Low = 0
High = 8
Data [low]= Data[0] =2
Data [High]=Data[8] = 60
Posisi = (40-4) / (60-4) * (8-0) + 0 = 5
Data [5] = 40, maka Data Ada
Program 1.4
• Syntax program 1.4
package Pertemuan1_PSDA;

import javax.swing.JOptionPane;

public class simpleInterpolationSearch {

static int[] a = {3, 9, 11, 17, 25, 34, 31};

public static void main(String[] args) {


int posisi;
int cari;

cari = Integer.parseInt(JOptionPane.showInputDialog("Masukkan
angka yang dicari: "));
posisi = search(cari, a.length);

if (posisi == -1) {
JOptionPane.showMessageDialog(null, "Data tidak ditemukan
!!");
} else {
JOptionPane.showMessageDialog(null, "Data ditemukan !!");
}
}

public static int search(int b, int n) {


int flag = 0;
int awal = 0;
int akhir = 0;
int nt = 0;
int pos = 0;
akhir = n - 1;

do {
nt = (int) ((b - a[awal]) / (a[akhir] - a[awal]) * (akhir - awal) +
awal);

if (a[nt] == b) {
return nt;
} else if (b < a[nt]) {
akhir = nt - 1;
} else {
awal = nt = 1;
}
} while (b > a[awal] && b <= a[akhir]);
return -1;
}
}

• Screenshot output
- Jika data yang ingin dicari terdapat didalam array maka akan
menampilkan output seperti pada gambar berikut.
- Jika data yang ingin dicari terdapat didalam array maka akan
menampilkan output seperti pada gambar berikut.
Tugas 1.4
Buatlah program untuk mencari sebuah data pada sebuah array berdimensi satu dengan
metode interpolation search (asumsikan data sudah terurut, dan jumlah elemen beserta
data elemennya merupakan inputan user)!
Jawab :
• Program tugas 1.4
package Pertemuan1_PSDA;

import javax.swing.JOptionPane;

public class Tugas_4 {

static int byk =


Integer.parseInt(JOptionPane.showInputDialog("Masukkan
jumlah elemen: "));
static int[] a = new int[byk];

public static void main(String[] args) {

int posisi;
int cari;

for (int i = 0; i < a.length; i++) {


a[i] = Integer.parseInt(JOptionPane.showInputDialog("Masukkan
nilai ke-" + (i + 1) + ": "));
}

cari = Integer.parseInt(JOptionPane.showInputDialog("Masukkan
angka yang dicari: "));
posisi = search(cari, a.length);
if (posisi == -1) {
JOptionPane.showMessageDialog(null, "Data tidak ditemukan !!");
} else {
JOptionPane.showMessageDialog(null, "Data ditemukan !!");
}

public static int search(int b, int n) {


int flag = 0;
int awal = 0;
int akhir = 0;
int nt = 0;
int pos = 0;
akhir = n - 1;
do {
nt = (int) ((b - a[awal]) / (a[akhir] - a[awal]) * (akhir - awal) +
awal);
if (a[nt] == b) {
return nt;
} else if (b < a[nt]) {
akhir = nt - 1;
} else {
awal = nt + 1;
}
} while (b >= a[awal] && b <= a[akhir]);
return -1;
}
}
• Screenshot output
- Jika data yang ingin dicari terdapat didalam array maka akan menampilkan
output seperti pada gambar berikut.

- Jika data yang ingin dicari tidak terdapat didalam array maka akan
menampilkan output seperti pada gambar berikut.

Anda mungkin juga menyukai