13.3. Fibonacci Search.

Download Report

Transcript 13.3. Fibonacci Search.

13.3. Fibonacci Search.
Fibonacci Search adalah pencarian sebuah elemen dalam sebuah array satu dimensi dengan
menggunakan angka Fibonacci sebagai titik-titik (index) elemen array yang isinya dibandingkan dengan
nilai yang dicari (misal N).
Sama dengan Binary Search, Fibonacci Search menyaratkan data sudah urut baik menaik maupun
menurun. Dibandingkan dengan Binary Search, jumlah langkah pada Fibonacci Search dalam
memeriksa suatu nilai adalah lebih banyak, hanya keuntungan Fibonacci Search, prosesnya hanya
menggunakan operasi tambah dan kurang yang memerlukan waktu jauh lebih cepat dibandingkan
dengan proses pembagian seperti yang digunakan pada Binary Search.
Contoh :
Sudah ada array satu dimensi yang dibuat dengan int A[16].Sudah ada isinya urut
menaik. A[0] tidak diisi, A[1] sampai dengan A[15] isininya sebagai berikut :
0
1
2
5
7
3
4
5
6
7
8
9
10
12
15
17
19
22
25
27
32
11
35
12
13
14
37
40
45
15
53
Susun algoritma untuk menginput sebuah nilai, (misal N) kemudian memeriksa dengan cara atau
metoda Fibonacci Search apakah ada isi array yang sama dengan nilai N. Bila ada cetak perkataan
“ADA”, sedangkan bila tidak ada maka cetak perkataan “TIDAK ADA”.
Contoh, untuk isi array yang diilustrasikan diatas.
Bila diinput untuk N = 25, maka tercetak “ADA”.
Bila diinput untuk N = 10, maka tercetak “TIDAK ADA”
Jawab :
Fibonacci Search, memanfaatkan nilai nilai yang ada dalam Deret Fibonacci (Fibonacci number). Deret
Fibonacci adalah deret yang nilai suatu suku sama dengan jumlah nilai dua buah suku sebelumnya,
atau :
Fn = Fn-1 + Fn-2
untuk
n >= 2 ,
n adalah nomor suku dimulai dari nomor 0
dimana suku nomor 0 = 0, dan suku nomor 1 = 1
Nomor Suku (n) :
0
1
2
3
4
5
6
7
8
9
dan seterusnya
Deret Fibonacci :
0
1
1
2
3
5
8
13
21
34
dan seterusnya
Bagian ini yang dimanfaatkan dalam Fibonacci Search
Untuk contoh data diatas, maka nomor index yang dalam lingkaran adalah index yang nilainya sama
dengan nilai deret Fibonacci.
Nomor-nomor inilah yang dipakai sebagai titik-titik utama pemeriksaan.
0
1
2
3
5
7
12
4
15
5
17
6
7
19
22
378
8
25
9
10
27
32
11
35
12
37
13
40
14
15
45
53
Ilustrasi urutan proses
I
Untuk jumlah elemen n = 15
0
1
2
3
5
7
12
Data yang tersedia :
4
15
5
17
6
7
19
22
8
25
9
10
27
32
8 25
3 12
2 7
p=1
q=0
4 15
i=8
p=3
q=2
i=7
p=1
q=1
7 22
i=6
p=1
q=0
15
45
53
q=0 p=1
i=14
p=2
q=1
11 35
14 45i=15
8 25 i=10
p=1
q=0
p=1
q=1
6 19
10 32
i=9
p=1
q=0
1 5
40
14
Untuk nilai N > 25
,
maka pintu masuknya
adalah titik 11
i=11
p=5
q=3
5 17
i=3
p=2
q=1
i=1
p=1
q=0
37
13
i=8
p=5
q=3
i=5
p=3
q=2
i=2
p=1
q=1
35
12
Kebetulan m = 3,
Akar
Urutan
proses
bila
diiulustrasikan dengan
pohon biner
11
q=0
p=1
9 27 p=1
q=0
p=1
13 40 15 53
p=1
Catatan :
12 37
q=0
q=0 p=1
p=1
Maksud gambar
Gambar pohon diatas, bukan berarti data yang ada didalam array
satu dimensi dijadikan pohon biner. Pohon biner hanya digunakan
untuk menggambarkan ilustrasi proses. Sebagai contoh, untuk
mencari nilai N = 19, maka titik-titik yang dilalui adalah : 8, 5, 7, 6, dan
ditemukan pada titik 6.
Index elemen array
5
17
Isi elemen
array tersebut
n = 15, diambil angka Fibonacci 8 sebagai titik awal penelusuran karena dari 1 sampai 15 ,
angka 8 yang kira-kira berada di tengah. Jadi A[8] adalah titik pertama yang diperiksa. Cara mencari
titik 8 akan dijelaskan kemudian.
Untuk
Misal ingin memeriksa apakah N = 19 ada dalam array A[ ].
Langkah-1 : Bandingkan dulu dengan A[8] yaitu 25.
Karena 19 < 25, maka penelusuran dilanjutkan ke kiri, ke A[5], yaitu 17
Langkah-2 : Karena 19 > 17, maka penelusuran beralih ke cabang kanan, ke A[7] yaitu 22.
Langkah-3 : Karena 19< 22, maka penelusuran beralih ke cabang kiri, ke A[6] yaitu 19
Langkah-4 : Dititik ini, di A[6] ditemukan nilai 19 yang sama dengan nilai N.
Jadi pada langkah ke-4 ditemukan bahwa angka 19 ada dalam array A[ ].
Terlihat angka-angka Fibonacci yaitu :
1, 2, 3, 5, 8, dan 13 diambil sebagai titik-titik
penelusuran utama. Perhatikan angka-angka cabang sebelah kanan, penyusunannya mengikuti pola
penempatan angka fibanacci mulai dari 1, 2, 3 dan seterusnya.
379
Konsep diatas, bila diterapkan dalam langkah-langkah algoritma dapat dibuat sebagai berikut :
Menyiapkan parameter-parameter.
TAHAP - I.
1. Cari angka Fibonacci ( Fk) yang paling dekat dengan n + 1 (misal n = 15)
Karena n = 16, maka 13 adalah angka Fibonacci yang paling mendekati n + 1.
q=3
1
2
3
5
7
12
A[ ]
p=5
4
5
6
7
8
9
10
11
12
13
14
15
15
17
19
22
25
27
32
35
37
40
45
53
Fk-3
1
2
3
4
5
6
1
2
3
5
8
13
16
yaitu angka
Fibonacci yang
terdekat dengan
nilai n+ 1 = 16
Menyiapkan data
int i, j, F0, F1, Fibo, n, m, N, Flag;
int FK, FK1, FK2, FK3, s, p, q, t;
int A[16] = { 0, 5, 7, 12, 15, 17,
19, 22, 25, 27, 32,
35, 37, 40, 45, 53 };
int FIBO[8];
Fk
Fk-3
Fk = 13
Fk-1
Fk-2
Untuk menentukan lokasi angka-angka Fibonacci
diatas, maka angka angka tersebut harus disimpan
dalam array (misal FIBO[ ] ), sehingga
akan terlihat sebagai berikut :
FIBO[ ]
m=3
Fk-1
Fk-2
2.
Fk
3.
Mengisi FIBO dan menghitung :
i, p, q, dan m
Cari nilai Fk-1 dan Fk-2 dan Fk-3
nyatakan nilai
i dengan Fk-1,
p dengan nilai Fk-2
q dengan nilai Fk-3
sehingga didapat:
clrscr();
n = 15;
F0 = 1; F1 = 1; Fibo = 1;
j = 1;
while(Fibo <= n+1)
{ FIBO[j] = Fibo;
Fibo = F0+F1; F0=F1; F1=Fibo;
j++; }
s = j - 1;
= 13
Fk-1 =
8
i = 8
Fk-2 =
5
p = 5
Fk-3 = 3
q = 3
FK
FK1
FK2
FK3
Cari nilai increament (penambah) m
dengan rumus :
=
=
=
=
FIBO[s];
FIBO[s-1];
FIBO[s-2];
FIBO[s-3];
i = FK1;
p = FK2;
q = FK3;
m = (n+1) - FK;
m = ( n+1 ) - Fk
= 15 + 1 - 13
= 3
Catatan : m >= 0
m ini digunakan hanya bila untuk pertama kali N > A[ i ]
380
i
sebagai
titik
awal
pencarian.
TAHAP - II.
Menentukan nilai index i sebagai titik awal pemeriksaaan (search)
Sebelumnya sudah didapat nilai i = 8, sehingga A[ i ] adalah 25,
Periksa nilai yang akan dicari (misal N)
scanf("%d", &N);
if(N > A[i])
i = i + m;
1. Bila N lebih besar dari A[ i ], maka ubah nilai i menjadi
i=i+m
= 8 + 3 = 11
2. Bilai N tidak lebih besar dari A[ i ], nilai i tetap = 8.
q=3
1
2
3
5
7
12
p=5
m=3
4
5
6
7
8
9
10
11
12
13
14
15
15
17
19
22
25
27
32
35
37
40
45
53
Fk-3
Fk-2
Fk-1
TAHAP - III. Proses Search
Selama nilai i <> 0, ulangi proses loop berikut ini :
Bila N = = A[ i]
berarti N ditemukan pada langkah ini.
dan proses dibuat selesai.
Bila N < A[ i ],
berarti harus mencari ke sisi kiri,
cari nilai i yang baru dengan cara :
-Bila q == 0, berarti nilai N tidak ditemukan dan
proses dibuat selesai dengan cara
membuat nilai i = 0,
- Bila q != 0, maka i = i - q (mundur sebanyak q)
t = p
p = q
q = t - q
kemudian ulangi mengerjakan loop
Bila N > A[ I ],
berarti harus mencari ke sisi kanan,
cari nilai i yang baru dengan cara:
- Bila p == 1, berarti N tidak ditemukan, dan
proses dibuat selesai dengan cara
membuat nilai i = 0
- Bila p != 1, maka i = i + q (maju sebanyak q)
p = p- q
q = q - p
kemudian ulangi mengerjakan loop
381
Fk = 13
16
yaitu angka
Fibonacci yang
terdekat dengan
nilai n+ 1 = 16
Flag = 0;
while( i != 0 && Flag == 0)
{if(N == A[i]) Flag = 1;
else
if(N < A[i])
{if(q == 0) i = 0;
else { i = i - q;
t = p;
p = q;
q = t - q;
}
}
else
{ if(p==1)
i = 0;
else
{ i = i + q;
p = p – q;
q = q - p;
}
}
}
if(Flag == 1)
printf("\nFOUND");
else printf("\nNOT FOUND" );
}
Contoh Proses : untuk jumlah elemen n = 15.
1
Untuk nilai yang dicari : N = 19
q=3
p=5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
5
7
12
15
17
19
22
25
27
32
35
37
40
45
53
Fk-3
Fk-1
Fk-2
TAHAP - I didapat :
Fk
Fk
Akar
Pintu masuk
untuk N <= 25
= 13
Fk-1 = 8
i =8
Fk-2 = 5
p =5
Fk-3 = 3
q= 3
i=8
p=5
q=3
Kebetulan m = 3,
8 25
i=5
p=3
q=2
TAHAP - II.
3 12
i=2
p=1
q=1
N = 19
A[ i ] = A[ 8 ] = 25
p=1
q=0
4 15
2 7
i tetap = 8 i=1
p=1
q=0
i=8
p=3
q=2
i=7
p=1
q=1
7 22
i=6
p=1
q=0
q=0 p=1
i=14
p=2
q=1
11 35
14 45i=15
8 25 i=10
p=1
q=0
p=1
q=1
6 19
10 32
i=9
p=1
q=0
1 5
Pintu masuk
untuk N > 25
i=11
p=5
q=3
5 17
i=3
p=2
q=1
m = (15 + 1) - 13 = 3
N < 25
16
q=0
p=1
12 37
9 27 p=1
q=0
p=1
13 40 15 53
p=1
q=0
q=0 p=1
p=1
TAHAP - III Proses
Akar
i=8
p=5
q=3
i = 8, A[8] = 25
Langkah - 1. N < 25
19
8 25
i=5
p=3
q=2
5 17
i=3
p=2
q=1
3 12
q=0
7 22
i=6
p=1
q=0
4 15
p=1
i=7
p=1
q=1
6 19
q=0
p=1
cari ke kiri :
q != 0
i=i- q
t=p
p=q
q = t–q
i=8-3=5
t= 5
p= 3
q=5-3=2
i = 5, A[5] = 17
Langkah - 2. N > 17 cari ke kanan :
p != 1
i=i+ q
i=5+2=7
19
p=p-q
p= 3-2=1
q =q-p
q=2-1=1
i = 7, A[7] = 22
Langkah - 3. N < 22
cari ke kiri :
q != 0
i=i- q
i=7-1=6
19
t=p
t= 1
p=q
p= 1
q = t–q
q=1-1=0
i = 6, A[6] = 19
Langkah - 4. N = 19
Ditemukan nilai yang = 19 (N)
19
pada langkah ke - 4.
382
2
Untuk nilai yang dicari : N = 20
q=3
1
2
3
5
7
12
p=5
4
5
6
7
8
9
10
11
12
13
14
15
15
17
19
22
25
27
32
35
37
40
45
53
Fk-3
Fk-2
Fk-1
16
Fk
TAHAP - I didapat :
Fk
= 13
Fk-1 = 8
i =8
Fk-2 = 5
p =5
Fk-3 = 3
q= 3
FIBO[]
1
2
3
4
5
6
1
2
3
5
8
13
Fk
Fk-3
Fk-1
Fk-2
m = (15 + 1) - 13 = 3
TAHAP - II.
N = 20
A[ i ] = A[ 8 ] = 25
i tetap = 8
N < 25
TAHAP - III Proses mencari nilai 20
i = 8, A[8] = 25
Langkah - 1. N < 25
20
Akar
i=8
p=5
q=3
8 25
i = 5, A[5] = 17
Langkah - 2. N > 17
20
i=5
p=3
q=2
5 17
i=3
p=2
q=1
3 12
i=6
p=1
q=0
4 15
i=7
p=1
q=1
7 22
i = 7, A[7] = 22
Langkah - 3. N < 22
20
6 19
q=0
p=1
i = 6, A[6] = 19
Langkah - 4. N > 19
20
cari ke kiri :
q != 0
i=i- q
t=p
p=q
q = t–q
i=8-3=5
t= 5
p= 3
q=5-3=2
cari ke kanan :
p != 1
i=i+ q
p=p-q
q =q-p
i=5+2=7
p= 3-2=1
q=2-1=1
cari ke kiri :
q != 0
i=i- q
t=p
p=q
q = t-q
i=7-1=6
t= 1
p= 1
q=1-1=0
cari ke kanan :
p=1
20 Tidak ditemukan
sampai dengan langkah
terakhir (pada langkah ke-4)
dan proses selesai.
3831
12. 7
3
Untuk nilai yang dicari : N = 45
q=3
1
2
3
5
7
12
4
5
6
7
8
9
10
11
12
13
14
15
15
17
19
22
25
27
32
35
37
40
45
53
Fk-3
Fk-1
Fk-2
TAHAP - I sama dengan proses
sebelumnya didapat :
i
p
q
m
TAHAP - II.
p=5
16
Fk
FIBO[]
1
2
3
4
5
6
1
2
3
5
8
13
= 8
= 5
= 3
=3
Fk
Fk-3
Fk-1
Fk-2
N = 45
A[ i ] = A[ 8 ] = 25
N > 25
i=8
p=3
q=2
i , dibuat menjadi :
i = i+m = 8+3 = 11
i=14
p=2
q=1
11 35
14 45i=15
8 25 i=10
p=1
q=0
p=1
q=1
Titik pemeriksaan awal = titik 11
10 32
yaitu yang nilainya = 35
i=9
p=1
q=0
9 27
13 40 15 53
12 37
q=0
p=1
TAHAP - III Proses mencari nilai 45
q=0
i=11
p=5
q=3
p=1
q=0
p=1
i = 11, A[11] = 35
i=14
p=2
q=1
11 35
Langkah - 1. N > 35
45
14 45 i=15
i=13
p=1
q=1
p=1
q=0
13 40
15 53
cari ke kanan :
p != 1
i=i+ q
i = 11 + 3 = 14
p=p-q
p= 5–3=2
q =q-p
q=3–2=1
i=12
p=1
q=0
12 37
q=0
p=1
q=0 p=1
i = 14, A[14] = 45
Langkah - 2. N = 45
45
384
45 Ditemukan pada langkah-2
12. 8
4
Untuk nilai yang dicari : N = 27
q=3
p=5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
5
7
12
15
17
19
22
25
27
32
35
37
40
45
53
Fk-3
Fk-2
Fk-1
Fk
1
TAHAP - I sama dengan proses
sebelumnya didapat :
i
p
q
m
TAHAP - II.
FIBO[] 1
2
2
3
5
5
6
8
13
Fk
Fk-3
Fk-
Fk-2
i=8
p=3
q=2
N = 27
A[ i ] = A[ 8 ] = 25
1
i=14
p=2
q=1
11 35
14 45i=15
8 25 i=10
i
p=1
q=0
p=1
q=1
dibuat menjadi :
i +
4
3
= 8
= 5
= 3
=3
N > 25
16
10 32
m = 8 + 3 = 11
i=9
p=1
q=0
Titik pemeriksaan awal = titik 11
Yaitu yang nilainya = 35
9 27
q=0 p=1
13 40 15 53
12 37
q=0 p=1
q=0 p=1
TAHAP - III Proses mencari nilai 27
i=11
p=5
q=3
i=8
p=3
q=2
i = 11, A[11] = 35
Langkah - 1. N < 35
27
11 35
q = t–q
8 25 i=10
p=1
q=1
i = 8, A[8] = 25
Langkah - 2. N > 25
27
10 32
i=9
p=1
q=0
9 27
i = 10, A[10] =32
Langkah - 3. N < 32
27
q=0
cari ke kiri :
q != 0
i=i- q
t=p
p=q
p=1
Terlihat titik 8 dikunjungi
sekali lagi, tapi tentu saja
nilainya tidak sama dengan
nilai N
i = 9, A[9] = 27
Langkah - 4. N == 27
27
385
i = 11 - 3 = 8
t= 5
p= 3
q=5-3=2
cari ke kanan :
p != 1
i=i+ q
p=p-q
q =q-p
i = 8 + 2 = 10
p= 3-2=1
q=2-1=1
cari ke kiri :
q != 0
i=i- q
t=p
p=q
q = t-q
i = 10 - 1 = 9
t= 1
p= 1
q=1-1=0
27 Ditemukan
pada langkah ke-4
// FiboPrg1
#include<stdio.h>
#include<conio.h>
void main()
{ int i, j, F0, F1, Fibo, n, m, N, Flag;
int FK, FK1, FK2, FK3, s, p, q, t;
int A[16] = { 0, 5, 7, 12, 15, 17,
19, 22, 25, 27, 32,
35, 37, 40, 45, 53 };
int FIBO[8];
clrscr();
n = 15;
F0 = 1; F1 = 1; Fibo = 1;
j = 1;
while(Fibo <= n+1)
{ FIBO[j] = Fibo;
Fibo = F0+F1; F0=F1; F1=Fibo;
j++; }
s = j - 1;
FK = FIBO[s];
FK1 = FIBO[s-1];
FK2 = FIBO[s-2];
FK3 = FIBO[s-3];
i = FK1;
p = FK2;
q = FK3;
Program Fibonacci Search
dalam Bahaca C
Menyiapkan array A[0..16]
beserta isinya, dan yang akan disearch
isinya adalah A[1] s.d. A[15]
Mengisi array FIBO[1..j]
yang menyimpan deret fibonacci
1,2,3,5 .. dan seterusnya sampai
mendekati nilai n+1
Untuk contoh n = 15, maka angka Fibonacci
yang paling mendekati n+1 adalah 13,
yaitu pada FIBO[6],
dan pada saat keluar dari loop nilai j = 7.
Keluar dari loop nilai J = 7
sedangkan angka Fibonacci = 13
ada di A[6]
Menyiapkan nilai i, p, q, dan m
m = (n+1) - FK;
printf("\n Inputkan sebuah nilai : " );
scanf("%d", &N);
if(N > A[i])
i = i + m;
Flag = 0;
while( i != 0 && Flag == 0)
{ if(N == A[i]) Flag = 1;
else
if(N < A[i])
{ if(q == 0) i = 0;
else { i = i - q;
t = p;
p = q; q = t - q;
}
}
else
{ if(p==1)
i = 0;
else
{ i = i + q;
p = p – q; q = q - p;
}
}
}
if(Flag == 1)
printf("\nFOUND");
else
printf("\nNOT FOUND" );
}
386
Menginput nilai N
Untuk pertama kali,
bila N > A[ i], maka i harus ditambah
dengan nilai m
Flag dibuat = 1
bila ditemui A[I] = N
Kurangkan
nilai i untuk
menelusuri
ke kiri
i dibuat = 0
agar keluar
dari loop, tanpa
menemukan nilai N
i dibuat = 0
agar keluar
dari loop, tanpa
menemukan nilai N
Tambahkan
nilai i untuk
menelusuri
ke kanan
Ilustrasi urutan proses
II
Untuk jumlah elemen n = 20
Misal data yang tersedia dalam array sebagai berikut :
0
1
5
2
7
3
4
5
6
7
8
9
10
12
15
17
19
22
25
27
32
6
Untuk n = 20
FIBO[]
1
2
3
4
5
1
2
3
5
8 13 21
Fk-1
Fk-2
Fk-3
i
p
q
m
=
=
=
=
35
12
13
14
37
40
45
15
16
17
18
19
20
57
62
66
69
73
53
clrscr();
n = 15;
F0 = 1; F1 = 1; Fibo = 1;
j = 1;
while(Fibo <= n+1)
{ FIBO[j] = Fibo;
Fibo = F0+F1; F0=F1; F1=Fibo;
j++; }
s = j - 1;
7
Fk
m = n+1 – Fk
= 21 – 21
= 0
11
FK
FK1
FK2
FK3
13
8
5
0
=
=
=
=
FIBO[s];
FIBO[s-1];
FIBO[s-2];
FIBO[s-3];
i = FK1;
p = FK2;
q = FK3;
m = (n+1) - FK;
Alur
penelusurannya
bila
diilustrasikan
denganpohon biner, dapat digambarkan sebagai
berikut :
i=8
p=5
q=3
i=1
p=1
q=0
2 7
4 15
i=6
p=1
q=0
13 40
8 25
18 66
i=11
p=2
q=1
5 17
3 12
i=2
p=1
q=1
p=8
q=5
i=18
p=3
q=2
i=5
p=3
q=2
i=3
p=2
q=1
Pintu masuk untuk semua
nilai N, karena m = 0
Akar i=13
i=10
p=1
q=1
i=7
p=1
q=1
7 22 i=9
p=1
q=0
6 19
10 32
9 27
1 5
387
11 35
i=16
p=2
q=1
i=12 i=15
p=1
p=1
q=0
q=1
12 35
16 57
15 53
14 45
i=20
p=1
q=1
20 73
17 62 19 69
Ilustrasi urutan proses
III Untuk jumlah elemen n = 30
Fk-1
Fk-2
0
1
2
5
7
3
4
5
6
7
8
q = 5
9
10
p = 8
11
12
13
14
15
16
17
18
19
20
10 12 17 19 25 27 29 31 34 35 39 42 44 45 48 49 52 55
Fk
q=8
m = 10
21
22
23 24
25
26 27
28
29
30
31
57 58 64 68 70 72 74 75 77 80
n
= 50
Fk = 34
Fk-1
= 13
i = 13
Fk-2
= 8
p = 8
Fk-3
= 5
q = 5
m
= (30 + 1)-21 = 10
m = 10
i=13
p=8
q=5
13
Bagian
ini
Sudah
Jelas
Pintu masuk untuk N > 39
i=23
p=8
q=5
8
18
i=15
p=3
q=2
i=i- q
t=p
p=q
q=t–q
15
i=13
p=2
q=1
13
i=17
p=1
q=1
17
i=14
p=1
q=1
14
q=0
23
i=18
p=5
q=3
p=1
16
q=0 p=1
i=21
p=2
q=1
i=20
p=1
q=1
21
i=19 20
p=1
q=0
p=1
i=22
p=1
q=0
i=25
p=1
q=1
q=0
25
p=1
q=0
p=1
388
24
i=30
p=1
30 q=1
26
i=29
29 p=1 p=1
27
q=0
p=1
i=i+ q
p=p-q
q =q-p
28
i=26
p=2
q=1
22
p=1
19
q=0
i=28
p=3
q=2
q=0
q=0
p=1
12. 12
Contoh Soal -1
Dalam array yang dibuat dengan int A[51] kolom A[1] sampai dengan A[50] sudah ada isinya nilai
nilai numerik yang urut menaik dari nilai terkecil sampai dengan nilai terbesar sebagai berikut :
0
1
2
5
7
21
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
10 12 17 19 25 27 29 31 34 35 39 42 44 45 48 49 52 55
22
23 24
25
26 27
28
29
30
31
32
33
34
35
36
37
38
39
40
57 58 64 68 70 72 74 75 77 80 81 82 85 89 90 95 98 100 101 105
41
42 43
44
45
46
47
48
49
50
107 112 115 117 120 122 125 128 133 137
Catatan : Indeks yang ditandai dengan panah,(yaitu : 1,2,3,5,8,13,21,34) adalah nilai-nilai deret Fibonacci
yang dipakai sebagai key.
Soal :
Susun tabel yang memuat langkah-langkah untuk memeriksa suatu nilai N secara
Fibonacci Search, apakah ditemukan atau tidak ditemukan isi array yang nilainya
sama dengan nilai N.
bila nilai N sama dengan : a. 5
g. 100
d. 57
b. 9
e. 85
h. 150
c. 17
f. 89
i. 2
q = 8
0
1
2
5
7
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
10 12 17 19 25 27 29 31 34 35 39 42 44 45 48 49 52 55
q=8
p = 13
21
22
23 24
25
26 27
28
29
30
31
32
33
34
35
36
37
38
39
40
57 58 64 68 70 72 74 75 77 80 81 82 85 89 90 95 98 100 101 105
41
42 43
44
45
46
47
48
49
50
107 112 115 117 120 122 125 128 133 137
n
Fk
=
=
50
34
Fk-1 = 21
i = 21
Fk-2 = 13
p = 13
Fk-3 = 8
q= 8
m = (50 + 1) - 34 = 17
389
12. 13
Jawab :
Catatan untuk menghitung i, p, dan q
serta konndisi “Tidak Ditemukan “
Untuk data diatas, A[1]
sampai dengan A[50],
didapat:
n
=
=
50
34
Fk-1 =
21
i = 21
Fk-2 =
13
p = 13
Fk
Fk-3 = 8
(1) i = i - q
(2) t = p
(3) p = q
(4) q = t - q
(5) i = i + q
(6) p = p -q
(7) q = q - p
q= 8
m = (50 + 1) - 34 = 17
a.
q <= 0 --> tidak ditemukan
p <= 1 --> tidak ditemukan
Untuk : N = 5
A[i] = 57
N = 5, ---> N Tidak Lebih besar dari A[i], sehingga i tidak dirobah.
q = 8
0
1
2
5
7
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
10 12 17 19 25 27 29 31 34 35 39 42 44 45 48 49 52 55
q=8
p = 13
21
22
23 24
25
26 27
28
29
30
31
32
33
34
35
36
37
38
39
40
57 58 64 68 70 72 74 75 77 80 81 82 85 89 90 95 98 100 101 105
Ke kiri
Langkah
ke-
p
q
A[i]
Kondisi
N & A[I]
I
21
13
8
57
5 < 57
Ke kiri
q != 0
II
13
8
5
39
5 < 39
ke kiri
III
8
5
3
27
5 < 27
IV
5
3
2
17
3
2
1
2
1
1
1
V
VI
VII
Cari ke
kiri / kanan
Kondisi
i
Ke kanan
i
t
p
(1)
(2)
(3) (4)
13
13
8
5
q != 0
8
8
5
3
ke kiri
q != 0
5
5
3
3
5 < 17
ke kiri
q != 0
3
3
2
1
10
5 < 10
ke kiri
q != 0
2
2
1
1
1
7
5<7
ke kiri
q != 0
1
1
1
0
0
5
5 = 5
q
q
Kondisi
p
i
p
q
(5)
( 6)
(7)
Pada langkah ke-VII
ditemukan bahwa nilai 5 ada dalam array di lokasi A[ 1 ]
390