HASHING


1.     LINEAR PROBING
Dengan menambahkan suatu interval pada hasil yang diperoleh dari fungsi hash sampai ditemukan lokasi yang belum terisi. Berikut Sourcodenya:
table=[None]*11
def hash(x):
    return x%11
def insert(table,key,value):
    index = hash(key)
    if table[index] == None:
        table[index]=value
    else:
        collusion=index
        found = False
        ind = collusion+1
        if ind>=len(table)-1:
            ind = 0
        while (ind<=len(table)-1)and not(found):
            if table[ind]==None:
                found = True
                table[ind]=value
            ind = ind+1            
def search(cari,table):
    found = False
    keluar = False
    ind = hash(cari)
    if ind>=len(table)-1:
        ind = 0
    elif not found and ind:
        print('Data tidak ditemukan')
    while (ind<=len(table)-1)and not(found):
        if table[ind]==cari:
            print('Data ditemukan')
            found = True
        ind = ind+1
   
           
data = [54,26,93,17,77,31,44,55,20]
x = 0
import time
start = time.clock()
while x < len(data):
    insert(table,data[x],data[x])
    x += 1
print('Linier Probbing')
print(table)
cari = 44
print('cari : ', cari)
search(cari,table)
print('waktu yang dibutuhkan : ', round(time.clock()-start,5), ' detik')
2.      QUADRATIC PROBING
Hampir sama dengan linear probing, hanya saja pada quadratic probing, hasil yang diperoleh dari fungsi hash ditambahkan dengan kuadrat dari interval yang digunakan. Berikut Sourcodenya:
table=[None]*11
def hash(x):
    return x%11
def insert(table,key,value):
    index = hash(key)
    if table[index] == None:
        table[index]=value
    else:
        collusion=index
        found = False
        ind = collusion+1
        i = 1
        if ind>=len(table)-1:
            ind = 0
        while (ind<=len(table)-1)and not(found):
            if table[ind]==None:
                found = True
                table[ind]=value
            ind = (collusion+(i*i))%11
            i += 1

def search(cari,table):
    found = False
    keluar = False
    ind = hash(cari)
    if ind>=len(table)-1:
        ind = 0
    elif not found and ind:
        print('Data tidak ditemukan')
    while (ind<=len(table)-1)and not(found):
        if table[ind]==cari:
            print('Data ditemukan')
            found = True
        ind = ind+1
   
           
data = [54,26,93,17,77,31,44,55,20]
x = 0
import time
start = time.clock()
while x < len(data):
    insert(table,data[x],data[x])
    x += 1
print('Quadratic')
print(table)
cari = 44
print('cari : ', cari)
search(cari,table)
print('waktu yang dibutuhkan : ', round(time.clock()-start,5), ' detik')
3.     DOUBLE HASHING
Pada metode double hashing, jika lokasi yang diperoleh dengan fungsi hash sudah terisi, maka dilakukan proses hash lagi sampai ditemukan lokasi yang belum terisi.Keunggulan metode chaining dibanding open addressing:
1.     Lebih mudah diimplementasikan dengan efektif dan hanya membutuhkan struktur data dasar.
2.     Metode chaining tidak rawan terhadap data-data yang berkumpul di daerah tertentu. Metode open addressing membutuhkan algoritma hash yang lebih baik untuk menghindari pengumpulan data di sekitar lokasi tertentu.
3.     Performa menurun secara linier. Meskipun semakin banyak record yang dimasukkan maka semakin panjang senarai berantai, tabel hash tidak akan penuh dan tidak akan menimbulkan peningkatan waktu pencarian record yang tibatiba meningkat yang terjadi bila menggunakan metode open addressing.
4.     Jika record yang dimasukkan panjang, memori yang digunakan akan lebih sedikit dibandingkan dengan metode open addressing.
Berikut SourceCodenya:
table=[[]for _ in range(11)]
def hash(x):
    return x%11
def insert(table,key,value):
    table[hash(key)].append(value)
   
insert(table,54,54)
insert(table,26,26)
insert(table,93,93)
insert(table,17,17)
insert(table,77,77)
insert(table,31,31)
insert(table,44,44)
insert(table,55,55)
insert(table,20,20)
print(table)


Di post oleh :
1. FITRI ANISA (170411100014)
2. DHEA OKY SYAFITRI (170411100006)

Komentar

Postingan populer dari blog ini

Class and Object in Python

DOUBLE LINKED LIST

GRAPH