PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS PADJAJARAN 2017 1. Progressive Overflow Salah satu konversi yang sederhana adalah penggunaan overflow yang progresif atau probing secara linier. Sesuai namanya bila lokasi yang akan ditempati telah terisi, maka lokasi selanjutnya dilihat apakah masih belum terisi. Secara progresif lokasi selanjutnya di overflow. Memiliki struktur yang melingkar, dengan lokasi pertama brada tepat sesudah lokasi terakhir. Pencarian dilanjutkan sampai ditemukan slot yang kosong atau sampai ditemukan home-address rekaman untuk kedua-kalinya. Menandakan bahwa berkas telah penuh.
int records[n] = {13,75,64,51,94,35,25,80,54,7,89,67,55,32,92,53,28,48,56,22,60,59,17,46,19,4 2,90,9,97,27,78,14,69,52,11,26,84,34}; int address[p];
void fillAddressWithZero () { for (int i = 0; i < p; i++) { address[i] = 0; } }
int getAddress (int record) { return record % p; }
void assignRecordToAddress () { for (int i = 0; i < n; i++) { int alamat = getAddress (records[i]); if (address[alamat] == 0) { address[alamat] = records[i]; }else { int j = alamat+1; while (j < p) { if (address[j] == 0) { address[j] = records[i]; break; }else { if (j == p-1) { j = 0; }else { j++; } } } } } }
void printAddress () { cout<<endl <<setw(8) << left << "Address" <<setw(7) << left << "Record" <<endl;
for (int i = 0; i < p; i++) { cout<<setw(8) << left << i <<setw(7) << left << address[i] <<endl; } }
int main () { fillAddressWithZero(); assignRecordToAddress(); printAddress(); getch(); }
2. use of buckets Dalam diskusi mengenai prosedur resolusi kolisi, diasumsikan bahwa hanya sebuah rekaman saja yang dapat disimpan pada sebuah alamat penyimpanan. Jumlah pengaksesan dapat direduksi dengan meletakkan lebih dari satu rekaman pada satu alamat penyimpanan. Kemungkinan tersebut dapat direalisir bila digunakan sistem buckets (disebut juga blok atau halaman). Jadi, bucket dapat didefinisikan sebagian unit penyimpanan yang berada di antara rekaman dengan berkas, juga sebuah unit dengan informasi yang dapat di akses dan dipindahkan antar peralatan penyimpanan. Jumlah rekaman yang dapat diletakkan pada satu bucket disebut factor-blocking. Jika factor-blocking meningkat, jumlah akses terhadap penyimpanan akan mengecil karena beberapa rekaman yang berkolisi dapat disimpan dalam satu alamat yang sama.
const int n = 38; const int p = 41; int bucket = 0;
int records[n] = {13,75,64,51,94,35,25,80,54,7,89,67,55,32,92,53,28,48,56,22,60,59,17,46,19,4 2,90,9,97,27,78,14,69,52,11,26,84,34}; int address[p][n];
void fillAddressWithZero () { for (int i = 0; i < p; i++) { for (int j = 0; j < n; j++) { address[i][j] = 0; } } }
int getAddress (int record) { return record % p; }
void assignRecordToAddress () { for (int i = 0; i < n; i++) { int alamat = getAddress (records[i]); for (int j = 0; j < n; j++) { if (address[alamat][j] == 0) { address[alamat][j] = records[i]; if (bucket < j+1) { bucket = j+1; } break; }else { if (bucket < j+1) { bucket = j+1; } } } } }
void printAddress () { cout<<endl <<setw(8) << left << "Address"; for (int i = 0; i < bucket; i++) { cout<<setw(7)<< left <<"Record " <<setw(3) << left << i; } cout<<endl;
for (int i = 0; i < p; i++) { cout<<setw(8) << left << i;
int j = 0;
while (j < bucket && address[i][j] != 0) { cout<<setw(7) << left << address[i][j] <<setw(3) << left << ""; j++; } cout<<endl; } }
int main () { fillAddressWithZero(); assignRecordToAddress(); printAddress(); getch(); }
3. linear quotient #include <stdio.h> #include <iostream> //#include <conio.h>
int main() { int data[7] = {27,18,29,28,39,13,16}; int lokasi[11] = {0,0,0,0,0,0,0,0,0,0,0}; int z; int i,j,x; system("cls"); for(i=0;i<7;i++) printf("%2d ",data[i]); printf("\n"); for(i=0;i<7;i++){ x = data[i] % 11; z = (int(data[i]/11)) % 11; if (lokasi[x] == 0) lokasi[x] = data[i]; else{ for(j=x+z; (j>=0 && j<11); j++){ if (lokasi[j] == 0) { lokasi[j] = data[i]; j = -2; } else { if (j>=7) j=j%11;} } } printf("%2d ",x); } printf("\n "); // printf("\n \n"); // for(i=0;i<11;i++){ // printf("%4d %4d \n",i,lokasi[i]); // } // system("pause"); // return 0; }