Anda di halaman 1dari 18

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

10

11

12

13

12

15

17

19

22

25

27

32

35

37

40

14

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) :
Deret Fibonacci
:

dan
seterusnya
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

12

4
15

5
17

19

22

378
3783

8
25

10

27

32

11
35

12
37

13

14

15

40

45

53

Ilustrasi urutan proses


I

Untuk jumlah elemen n = 15


0

12

Data yang tersedia :

4
15

5
17

i=1
p=1
q=0

1 5

q=0

p=1

25

10

27

32

11

12

35

37

13

14

15

40

45

53

Kebetulan m = 3,

Untuk nilai N > 25


,
maka pintu masuknya
adalah titik 11

3 12

p=1

22

25

i=7
p=1
q=1

i=8
p=3
q=2

7 22

8 25

5 17

2 7

19

q=3

i=5
p=3
q=2

i=2
p=1
q=1

Akar i=8
p=5

Urutan
proses
bila
diiulustrasikan dengan
pohon biner

i=3
p=2
q=1

4 15
q=0 p=1

i=6
p=1
q=0

6 19
q=0

p=1

i=9
p=1
q=0

i=11
p=5
q=3

14 45
5 i=1

i=10
p=1
q=1

p=1
q=0

10 32
9 27

q=0

p=1

Catatan :
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.

i=14
p=2
q=1

11 35

p=1

13
40
12 37

q=0

15 53
q=0 p=1

p=1

Maksud gambar
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.

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

A[ ]

12

15

Fk-3

17

19

22

p=5
8

2.

27

11

35

12

37

13

40

14

45

15

53

16

Fk= 13

yaitu angka
Fibonacci
yang terdekat
dengan
nilai n+ 1 = 16

Menyiapkan data
g;

int i, j, F0, F1, Fibo, n, m,6 N, Fla

Fk-1
Fk-2
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

Mengisi FIBO dan menghitung :


Catatan : m >= 0

sehingga didapat:

Fk

3.

10

32

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 :
2
5

25

m=3

= 13

Fk-1 = 8

i = 8

Fk-2 = 5

p = 5

Fk-3 = 3

q = 3

Cari nilai increament (penambah)


m
dengan rumus :
m = ( n+1 ) - Fk
= 15 + 1 - 13
=
3
380
3803

i, p, q, dan m

FK
FK1
FK2
FK3

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;

=
=
=
=

FIBO[s];
FIBO[s-1];
FIBO[s-2];
FIBO[s-3];

i = FK1;
p = FK2;
q = FK3;

m = (n+1) - FK;

sebagai
titik
awal

m ini digunakan hanya bila untuk pertama kali N


> A[ i ]

381
3813

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

12

p=5

10

15

17

19

22

25

27

32

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

11

35

12

37

m=3
13

40

14

45

15

53

16

Fk= 13

yaitu angka
Fibonacci
yang terdekat
dengan nilai
n+ 1 = 16

- Bila p != 1, maka i = i +
q (maju sebanyak q)
p
=
p
q
q
=
q
p
kemudian
ulangi
mengerjakan
loop

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 dicar i : N = 19


1
2

q=
3
3

15

12

Fk-3

5
7

17

19

22

8
11

25

Pintu masuk
untuk N <= 25

= 13

Fk-1 =
=8

Fk-2 =
=5

Fk-3 = 3
= 3

27

TAHAP - II.

i=2
p=1
q=1

N=
19
A[ i ] = A[ 8 ] = 25

i=1
p=1
q=0

N < 25

tetap = 8

3 12

4 15

1 5
q=0

p=1

q=0 p=1

i=6
p=1
q=0

q=0

p=1

45

15

53

i=8
p=5
q=3

Kebetulan m =
3,
i=11
p=5
q=3

i=8
p=3
q=2

Pintu masuk
untuk N > 25

i=14
p=2
q=1

11 35

8 25 i=10
p=1

7 22

6 19

14

40

25

i=7
p=1
q=1

5 17

2 7

37

13
16

Fk

i=5
p=3
q=2

i=3
p=2
q=1

12

35

32

Akar

m = (15 + 1) - 13
= 3

10

Fk-1

Fk-2

TAHAP - I didapat :
Fk

p=5

14 45i=15

q=1

i=9
p=1
q=0

10 32

9 27

p=1

p=1
q=0

q=0

p=1

p=1

13
40
12 37
q=0

15 53

q=0 p=1

p=1

TAHAP - III
Proses
Akar i=8
p=5
q=3

8 25
i=5
p=3
q=2

5 17

i=3
p=2
q=1

3 12

4 15

q=0

7 22

i=6

p=1

p=1
q=0

i=7
p=1
q=1

6 19

q=0

p=1

i = 8, A[8] = 25
Langkah - 1. N < 25
cari ke kiri :
q != 0
i=i- q
19
8-3=5t=p
t= 5
p=q
q = tq
i = 5, A[5] =
=2
17
Langkah - 2. N > 17 cari ke kanan :
19

i = 7, A[7] =
22
Langkah - 3.
19

i = 6, A[6] =
19

p != 1

i=
p= 3
q=5-3

i=i+ q
i=5
+2=7p=p-q
p= 3-2=1q =q-p
q=2-1=1

N < 22
cari ke kiri :
q != 0
i=i- q
=6
t=p
p=q
q = tq
0

i=7-1
t= 1
p= 1
q=1-1=

Langkah - 4. N = 19
19

Ditemukan nilai yang = 19 (N)


pada langkah ke - 4.

Untuk nilai yang dicari : N = 20


q=3
1

12

p=5

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

FIBO[]

Fk-1 =
=8

Fk-2 =
=5

Fk-3 = 3

13
Fk

Fk-3

Fk-2

Fk-1

= 3 m = (15 + 1)
- 13 = 3

TAHAP - II.

N = 20
A[ i ] = A[ 8 ] = 25
N < 25

tetap = 8

i = 8, A[8] = 25
Langkah - 1. N < 25

cari ke kiri :

TAHAP - III Proses mencari nilai 20


20

Akar i=8
p=5
q=3

8 25

i=5
p=3
q=2

5 17
i=3
p=2
q=1

3 12

i=6
p=1
q=0

4 15
q=0

i=7
p=1
q=1

7 22
6

i = 5, A[5] =
17
Langkah - 2. N > 17
20

i = 7, A[7] =
22
Langkah - 3. N < 22
20

19
p=1

i = 6, A[6] =
19
Langkah - 4. N > 19
20

3831

q != 0
3=5

i=i- q
t=p
p=q
q = tq
=2

i=8t= 5
p= 3
q=5-3

cari ke kanan :
p != 1
i=i+ q
i=5
+2=7p=p-q
p= 3-2=1q =q-p
q=2-1=1

cari ke kiri :
q != 0
i=i- q
7-1=6t=p
t= 1
p=q
q = t-q
1=0
cari ke kanan :

i=
p= 1
q=1-

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

12

p=5

10

15

17

19

22

25

27

32

Fk-3

11

35

12

13

37

Fk-1

Fk-2

15

16

53

Fk

FIBO[]

TAHAP - I sama dengan


proses
sebelumnya
didapat :

14

45

40

13
Fk

i = 8
p = 5

Fk-3

q = 3
m =3

TAHAP - II.

Fk-2

Fk-1

N = 45
A[ i ] = A[ 8 ] =
25
N > 25
:

11 35

i=8
p=3
q=2

i , dibuat menjadi
i = i+m = 8+3 = 11

i=14
p=2
q=1

14 45i=15

8 25

Titik pemeriksaan awal = titik 11


yaitu yang nilainya = 35

i=9
p=1
q=0

i=10
p=1
q=1

10 32
9 27

p=1
q=0

13
40
12 37

15 53
q=0

p=1

TAHAP - III Proses mencari nilai


45
q=0

i=11
p=5
q=3

Langkah - 1.

i=14
p=2
q=1

13
40

12 37
p=1

N > 35

45

14 45

i=13
p=1
q=1

q=0

q=0

p=1

i = 11, A[11] =
35

11 35

i=12
p=1
q=0

p=1

p != 1

i=15
p=1
q=0

15 53
q=0 p=1

cari ke kanan :
i=i+ q
p=p-

i = 11 + 3 =
14
p= 53

qq =q

=2q=3

-p

2=1

i = 14, A[14] = 45
Langkah - 2. N = 45
45

384
3843

45 Ditemukan pada langkah-2

12. 8
4

Untuk nilai yang dicari : N = 27


1
4

12

15

q=3
5

17

Fk-3

19

Fk-2

22

p=5
8
10

25

27

12

13

35

37

40

Fk-1

14

15

45

16

53

Fk

FIBO[]

TAHAP - I sama dengan


proses
sebelumnya
didapat :

32

11

13
Fk

i = 8

Fk-3

p = 5
q = 3
m =3

TAHAP - II.

Fk1

A[ i ] = A[ 8 ] =
25
N > 25

11 35

i=8
p=3
q=2

N = 27

i=14
p=2
q=1

8 25

14 45i=15

i=10
p=1
q=1

dibuat menjadi :
i +

Fk-2

i=9
p=1
q=0

m = 8 + 3 = 11

Titik pemeriksaan awal = titik 11


Yaitu yang nilainya = 35

10 32
9 27

q=0 p=1

p=1
q=0

13
40
12 37

15 53
q=0 p=1

q=0 p=1

TAHAP - III Proses mencari nilai


i = 11, A[11] =
27
i=11
p=5
q=3

N < 35

27

11 35

i=8
p=3
q=2

8 25

35
Langkah - 1.

i = 8, A[8] = 25
Langkah - 2. N > 25

i=10

p=1
q=1

27

10 32
i=9
p=1
q=0

9 27

i = 10, A[10]
=32
Langkah - 3. N < 32
27

=9

q=0

p=1

cari ke kiri :
q != 0
i=i- q
t=p
p=q
q = tq

i = 11 - 3
t==8 5
p= 3
q=5-3=
2

cari ke kanan :
p != 1
i=i+ q
= 10
p=p-q
1
q =q-p

q=2-1=1

cari ke kiri :
q != 0
i=i- q

i = 10 - 1

i=8+2
p= 3-2=

t=p
t= 1
p=q
p= 1
q = t-q
q=1-1=
0
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

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 fbonacci
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" );
}

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
Tambahka
n nilai i
untuk
menelusuri
ke kanan

Ilustrasi urutan proses


II

Untuk jumlah elemen n = 20

Misal data yang tersedia dalam array sebagai berikut :


0

10

11

12

13

12

15

17

19

22

25

27

32

35

37

40

Untuk n = 20
1

FIBO[]

8 13 21

Fk-1
Fk-2
Fk-3
i
p
q
m

=
=
=
=

15

45

16

53

57

17

18

62

66

19

20

69

73

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

m = n+1 Fk
= 21 21
= 0

14

13
8
5
0

FK
FK1
FK2
FK3

=
=
=
=

FIBO[s];
FIBO[s-1];
FIBO[s-2];
FIBO[s-3];

i = FK1;
p = FK2;
q = FK3;

m = (n+1) - FK;
Akar i=13

13
i=8
p=5
q=3

17

25

18

i=2
p=1
q=1

3
2
7

i=1
p=1
q=0

i=6
p=1
q=0

12

7
6

15

19

i=11
p=2
q=1

i=10
p=1
q=1

i=7
p=1
q=1

i=3
p=2
q=1

40
i=18
p=3
q=2

i=5
p=3
q=2

Pintu masuk untuk semua


nilai N, karena m = 0

p=8
q=5

Alur penelusurannya bila diilustrasikan


denganpohon
biner,
dapat
digambarkan sebagai berikut :

22 i=9
p=1
q=0

10

11

32

35

i=16
p=2
q=1
i=12 i=15
p=1
p=1
q=0
q=1

12

14

II
I
U

Ilustrasi urutan proses


387
3873

15

35

27

66

16

53

i=20
p=1
q=1

20

57

17

62

19

73

69

45

ntuk jumlah
elemen n = 30

Fk-2

q = 5

Fk-1

4
7

p = 8

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

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

= (30 + 1)-21 = 10

m = 10

i=13
p=8
q=5
13

Pintu masuk untuk N > 39

Bagian
ini
Sudah
Jelas

i=23
p=8
q=5

23

i=28
p=3
q=2

i=18
p=5
q=3
i=15
p=3
q=2

i=21
p=2
q=1

18

15
i=iq
p t==q p
q=t
q

i=13
p=2

i=20
p=1
q=1

i=17
p=1
q=1

q=1

i=14
p=1
q=1

13

14

q=0

p=1

16

q=0 p=1

i=22
p=1
q=0

i=19 20
p=1
q=0

17

q=0

i=25
p=1
q=1

22
p=1

19

p=1

p=1

q=0

25

p=1

q=0

388
3883

28

i=26
p=2
q=1

21

24

p=1

i = i +
q p = p
- q q =
q-p

i=30
p=1
30 q=1

26

29 i=29 p=1

27

q=0

p=1
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
4

21
39

5
7

24

25

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
40

23

26

27

28

29

30

31

32

33

34

35

36

37

38

57 58 64 68 70 72 74 75 77 80 81 82 85 89 90 95 98 100 101 105


41

42

43

44
49

45
50

46

47

48

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.

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
g. 100
a. 5
d. 57
dengan :
h. 150
b. 9
e. 85

Soal :

c. 17

i. 2

f. 89

q = 8
0
19

1
20

10

11

12

13

14

15

16

17

18

10 12 17 19 25 27 29 31 34 35 39 42 44 45 48 49 52 55

q=8

p = 13
21
40

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

57 58 64 68 70 72 74 75 77 80 81 82 85 89 90 95 98 100 101 105

41

42

43

44
49

45
50

46

47

48

107 112 115 117 120 122 125 128


133 137

389
3893

Fk

=
=

50
34

Fk-1 = 21

i = 21

Fk-2 = 13

p = 13

Fk-3 = 8

q= 8

m = (50 + 1) - 34 = 17

39

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

Fk

34

Fk-1 =

21

i = 21

Fk-2 =

13

p = 13

Fk-3 = 8

(1)
(2)
(3)
q
(4)
q

q=tp <= 1 --> tidak ditemukan

q = 8

(5) i = i +
q (6) p =
p -q (7) q
=q-p

m = (50 + 1) - 34 = 17

a.

i=i-q
t=p
q <= 0 --> tidak ditemukan
p =

Untuk : N = 5
A[i] = 57
N = 5, ---> N Tidak Lebih besar dari A[i], sehingga i tidak dirobah.
q = 8
0

6
8

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
39

22
40

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

57 58 64 68 70 72 74 75 77 80 81 82 85 89 90 95 98 100 101 105

Langkah
ke-

A[i]

Kondisi
N & A[I]

Cari ke

Kondisi

kiri / kanan

Ke kiri

i
q

(1)

Kondisi

(2) (3)

(4)

8
13

8
13

8
5

5
3

II
I

13
21

8
13

5
8

39
57

5 < 39
5 < 57

ke kiri
Ke kiri

q != 0
q != 0

III

27

5 < 27

ke kiri

q != 0

IV

17

5 < 17

ke kiri

q != 0

10

5 < 10

ke kiri

q != 0

VI

5<7

ke kiri

q != 0

VII

5 = 5

i
(5)

Ke kanan

( 6)

(7)

Pada langkah ke-VII


ditemukan bahwa nilai 5 ada dalam array di lokasi A[ 1 ]

390
3903

38

Anda mungkin juga menyukai