100% YES! The Energy of Success: Release Your Resistance Align Your Values Go for Your Goals U

100% YES! The Energy of Success: Release Your Resistance Align Your Values Go for Your Goals U

TI Buatlah sebuah program (Python/Java) yang dapat menghasilkan 50 bilangan bulat acak pada rentang 500 hingga 1000, menyimpannya ke dalam array/list, dan kemudian mencari sebuah bilangan dari array/list tersebut sesuai input user dengan algoritma Pencarian Biner.
VISUALISASIKAN proses pencariannya.
Ket. : tidak perlu animatif/berbasis GUI, cukup dalam mode teks.
____________
Note: masih soal dari sepupu, dan masih ada lagi

Buatlah sebuah program (Python/Java) yang dapat menghasilkan 50 bilangan bulat acak pada rentang 500 hingga 1000, menyimpannya ke dalam array/list, dan kemudian mencari sebuah bilangan dari array/list tersebut sesuai input user dengan algoritma Pencarian Biner.
VISUALISASIKAN proses pencariannya.
Ket. : tidak perlu animatif/berbasis GUI, cukup dalam mode teks.
____________
Note: masih soal dari sepupu, dan masih ada lagi

Kode Program (Python)

# binarysearch.py
# Program oleh HY
import random
iterator = 0
# Wrapper function untuk binary search
def binary_search(data, x):
   # data: array/list yang sudah terurut
   def binary_search_internal(data, bawah, atas, x):
       globals()['iterator'] += 1
       if atas >= bawah:
           tengah = (atas + bawah) // 2
           print("=================================")
           print("Langkah ke-" + str(iterator))
           if atas == bawah or atas-bawah+1 <= 5:
               print("data = " + str(data[bawah:atas+1]))
           else:
               print("data = [{db:d}, ..., {dtmin:d}, {dt:d}, {dtplus:d}, ..., {da:d}]"
                   .format(db = data[bawah],
                       dtmin = data[tengah-1],
                       dtplus = data[tengah+1],
                       dt = data[tengah],
                       da = data[atas-1]
                           if atas == len(data) else data[atas]))
           if data[tengah] == x:
               print("==>  {dt:d} = {xval:d}"
                   .format(dt = data[tengah], xval = x))
               return tengah
           elif data[tengah] > x:
               print("==>  {dt:d} > {xval:d}"
                   .format(dt = data[tengah], xval = x))
               print("==>  Pencarian Biner di subarray kiri")
               return binary_search_internal(data, bawah, tengah - 1, x)
           else:
               print("==>  {dt:d} < {xval:d}"
                   .format(dt = data[tengah], xval = x))
               print("==>  Pencarian Biner di subarray kanan")
               return binary_search_internal(data, tengah + 1, atas, x)
       else:
           return -1
   # end of binary_search_internal()
   return binary_search_internal(data, 0, len(data), x)
# end of binary_search()
### Program Utama ###
if __name__ == '__main__':
   system("clear")
   print()
   data = random.sample(range(500, 1000), 50)
   sorted_data = data.copy()
   sorted_data.sort()
   print("data (terurut) = " + str(sorted_data), end="\n\n")
   x = int(input("Data yang ingin dicari: "))
   print()
   hasil = binary_search(sorted_data, x)
   print("=================================")
   if hasil != -1:
       print("\n{xval:d} ditemukan pada elemen ke-{idx:d} dari data terurut,\natau pada elemen ke-{idx2:d} pada data asli.\n"
           .format(xval = x, idx = hasil, idx2 = data.index(x)))
   else:
       print("\n{xval:d} tidak ditemukan.\n"
           .format(xval = x))
### END OF __main__ ###

_______________

Pembahasan

Pada program di atas, algoritma utama Pencarian Biner diimplementasikan pada fungsi binary_search_internal(data, bawah, atas, x). Karena harus menampilkan visualisasi proses pencarian, maka dalam fungsi tersebut juga disertakan kode program untuk menampilkan output.

Pada dasarnya, implementasi algoritma Pencarian Biner pada program di atas adalah:
def binary_search(data, bawah, atas, x):
   if atas >= bawah:
       if data[tengah] == x:
           return tengah
       elif data[tengah] > x:
           return binary_search(data, bawah, tengah - 1, x)
       else:
           return binary_search(data, tengah + 1, atas, x)
   else:
       return -1

Contoh Hasil Eksekusi Program

(data random)

data (terurut) = [507, 509, 512, 552, 554, 586, 598, 602, 604, 610, 619, 631, 638, 646, 653, 662, 667, 668, 672, 677, 694, 702, 730, 747, 757, 809, 815, 834, 842, 845, 846, 850, 854, 868, 879, 893, 895, 897, 903, 904, 907, 908, 911, 912, 914, 915, 938, 949, 957, 974]

Data yang ingin dicari: 604

=================================
Langkah ke-1
data = [507, ..., 757, 809, 815, ..., 974]
==>  809 > 604
==>  Pencarian Biner di subarray kiri
=================================
Langkah ke-2
data = [507, ..., 631, 638, 646, ..., 757]
==>  638 > 604
==>  Pencarian Biner di subarray kiri
=================================
Langkah ke-3
data = [507, ..., 554, 586, 598, ..., 631]
==>  586 < 604
==>  Pencarian Biner di subarray kanan
=================================
Langkah ke-4
data = [598, ..., 602, 604, 610, ..., 631]
==>  604 = 604
=================================

604 ditemukan pada elemen ke-8 dari data terurut,
atau pada elemen ke-43 pada data asli.

[answer.2.content]