Bilgisayar arama yöntemleri

tarantula90125.01.2014 - 02:35
              Bu  bölümde  bir  dizi  içerisinde  istenen  elemanı  arayıp  bulma yöntemleri  anlatılacaktır. 
Kullanılan  belli  başlı  iki  yöntem  mevcuttur.   Bunlar ;


     1 – Sıralı  arama  ( Sequential  search )
     2 – İkiye  bölerek ( ikili )  arama  ( Binary  search )


1-   SIRALI  ARAMA  ( SEQUENTIAL SEARCH )

              Dizinin  sıralı  ve  sırasız  olması  önemli  değildir.  Daha  önce  DİZİLER  bölümünde  yazılan  programlarda  kullanılan  arama yöntemidir.  Yani  dizinin  ilk  elemanından  başlayarak  aranan  eleman  bulununcaya  kadar  işlem  devam  eder.  Dizide  1000  elemanın  olması  durumunda  ve  aranan  eleman  900.  Sırada  ise  bu  durumda  900 adet  test  işleminin  yapılması  gerekir.  Bu  da  zaman  alıcı  bir  işlemdir.  Şimdi  bu  sıralama  yöntemi  ile  ilgili  programı  yazalım:

Kod: [Seç]
Program   Sequential_Search;
Uses  Crt ;
Type


     Stip = Array[1..10]   of   Integer;
Const
    S   :   Stip   =( 27, 3, 4, 5, 32, 56, 33, 33, 63, 1 ) ;
    N  =  10 ;
Var
    İ ,  yer ,  ara :  Integer ;
Baction  SiraliAra  ( ara   :   Integer ;   S :   Stip )  :   Integer ;
Begin
    For   i := 1  To  n  Do
    If   s [ i ] =ara   Then
    Begin
         SiraliAra :=i ; Exit ;
    End;
    SiraliAra:=0 ;
End;
Begin
     Write ( ; Aradiginiz  Sayi  : ` ) ; Readln (Ara ) ;
     Yer : = SiraliAra  ( Ara, S ) ;
     If   yer = 0   Then   Writeln ( ara , `    Kayitli   degil ` )
     Else     
         Writeln (ara, `    sayisi  dizinin   `, yer ,`  .  elemani ` )  ;
     Readln ;
End.


              Bu  programda  sabit  olarak  10  adet  sayı  S  dizi  değişkenine  aktarılmıştır.  Program  kullanıcıdan  bir  sayı  istemekte  ve  bu  sayının  olup  olmadığını  araştırmak  için  SiraliAra  isimli  fonction’a  gitmektedir.  Sayının  bulunması durumunda,  sayını  adis  numarası,  bulunmaması  durumunda  ise  0  değeri  gönderilmektedir.



2 – İKİLİ  ARAMA  ( BINARY  SEARCH )


              Bu  arama  yöntemi  sıralı  olan  diziler  arama  yapar.  Sıralama  işleminin  küçükten  büyüğe  doğru  olması  durumu  için  işlem  anlatılacaktır.  Arama  işlemine  dizinin  ortasındaki  eleman  ile  başlanmakta  ve  bir  test  işlemi  ile  sayının  ortadaki  elemandan  önce  veya  sonra  olduğu  belirlenmektedir.  Eğer  aranan  sayı  ortadaki  elemandan  sonra  ise,  orta  elemanın  indis  numarası  alt  değer,  değilse  üst  değer  olarak  alınmaktadır.  Bu  üst  ve  alt  değerin  ortası  bulunmakta  ve  buna  göre  karşılaştırma işlemine  devam  edilmektedir.  Yani  her  defasında  aralık  ikiye  bölünüyor.  Buna  göre  bir  alt  ve  üst  değer  belirleniyor.  Bu  alt  ve  üst  değer  arasında  kalan  alanda  arama  yapılmaktadır.  Dizinin  diğer  kısmı  için  arama  yapılmasına  gerek  kalmamaktadır.  Binary  Search  yöntemine  göre  arama  yapan  program  aşağıda  verilmiştir.


Kod: [Seç]
Program  Binary_Sort ;
Uses Crt ;
Teyp 
    Stip  =  Array [1..10]  of  Integer  ;
Const 
     S  :  Stip  =  (3, 10, 24, 14, 37, 66, 63, 25, 80, 23 ) ;
     N :  10 ;
Var
     Yer , Ara  :  Integer ;
Procedure  Selection  ( Var  S  :  Stip ;  N  :  Integer  )  ;
Var
     İ , j  :  Integer  ;
Procedure  Degis  (  Var  a , b  :  Integer  )  ;
Var
     C :  Integer ;
Begin
     C  : = A ;     A : = B ;     B : = C ;
End ;
Begin       (   slection  )
     For  i  : = 1   To  n – 1   Do
         For  j : = i + 1   To  n  Do
            If   S [ i ]  >  S [ j ]   Then  Degis  (   s [ i ] ,   s [ j ]  )  ;
End ;


Function   İkiliAra  (   Ara  :  Integer ;  s  :  Stip  ) :  Integer ;
Var
     Orta , alt , üst  :  Integer ;
Begin
     Alt  : = 1 ;
     Üst  : =  N ;
     İkiliAra : = 0 ;
     While  üst > alt + 1  Do
     Begin
          Orta : = ( Üst + Alt )   Div  2 ;
           If   ara = s [ orta ]   Then
          Begin
               İkiliAra : = Orta  ;  Exit  ;
          End ;
          If   ara < s  [ orta ]   Then  ust : = orta
          Else   alt  : = orta ;
    End ;
    If   ara = s [ üst ]   Then   İkiliara : = üst
    Else
        If    ara = s [ alt ]   Then   ikiliara : = alt
    Else   ikiliara : = 0 ;
End ;
Begin
     Selection ( s , n ) ;
     Write ( ‘ Aradığınız Sayı ‘ ) ; readln ( Ara ) ;
      Yer : = IkiliAra ( Ara , S ) ;
      Write ( Ara , ‘     sayısı  dizinin  ‘ , yer , ‘ .  elemanı ‘ ) ;
      Readln ;
End .

           Yukarıdaki  programda ;  dizi  ilk  önce  sıralanmakta,  dizi  içerisinde  aranacak  eleman  istenmekte  ve  arama  işlemi  için  IkiliAra  function ‘ ına  gidilmektedir.  Aranan  sayının  63  olması  durumu  için  işlemi  algoritma  olarak  inceleyelim:



Alt     Ust     Orta     S[orta]

 1        10        5         24   =  63 ? hayır (alt :=orta)
 5        10        7         37   =  63 ? hayır (alt :=orta)
 7        10        8         63   =  63 ? Evet(sayıbulundu)(yer:=orta)


Linkback: https://www.buyuknet.com/bilgisayar-arama-yontemleri-t42611.0.html


Etiket:

Bu bilgi size yardimci oldu mu?

EvetHayır
Bilgisayar arama yöntemleri
Bilgisayar arama yöntemleri
(Ortalama: 5 üzerinden 2.5 - 2 Oy)
2