bölüm 6. karma - haydut.isikun.edu.trhaydut.isikun.edu.tr/veriyapilari-sunum/karma.pdf · karma...

31
O. T. Yıldız, C && Java ile Veri Yapılarına Giri¸ s, Bo ˘ gaziçi Üniversitesi Yayınevi, 2013 1 / 31 Bölüm 6. Karma Olcay Taner Yıldız 2014

Upload: hadieu

Post on 16-Feb-2019

297 views

Category:

Documents


2 download

TRANSCRIPT

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 1 / 31

Bölüm 6. Karma

Olcay Taner Yıldız

2014

Karma Tablosu

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 2 / 31

5 eleman içeren örnek bir karma tablosu

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 3 / 31

6 76

5

4 11

3 423

2 9

1 71

0

Tam sayılar içeren karma tablosu tanımı

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 4 / 31

1 public class Karma{2 Ornek[] tablo ;3 boolean[] silindi ;4 int N;5 public Karma(int N){6 tablo = new Ornek[N];7 silindi = new boolean[N];8 this.N = N;9 }

10 }

Tamsayılar için kullanılabilecek örnek birkarma fonksiyonu

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 5 / 31

1 int karma(int sayi){2 return sayi % N;3 }

Katarlar (karakter dizileri) içinkullanılabilecek örnek bir karma fonksiyonu

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 6 / 31

1 int karma(String katar){2 int i, pozisyon = 0;3 for (i = 0; i < katar.length; i++){4 pozisyon = 39 * pozisyon + katar.charAt(i );5 }6 pozisyon = pozisyon % N;7 return pozisyon;8 }

Baglı Liste ile Karma Tablosu Tanımı

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 7 / 31

Her elemanı bir baglı liste olan örnek birkarma tablosu

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 8 / 31

9 49 29 19

8

7

6 36 6

5 75

4 64 14 24

3

2

1 71 1

0 10

Her elemanı bir baglı liste olan karmatablosu tanımı

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 9 / 31

1 public class Karma{2 Liste [] tablo ;3 int N;4 public Karma(int N){5 int i;6 tablo = new Liste[N];7 for (i = 0; i < N; i++)8 tablo [ i ] = new Liste ();9 this.N = N;

10 }11 }

Her elemanı baglı liste olan bir karmatablosunda bir sayı arama

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 10 / 31

1 Eleman karmaAra(int icerik){2 int adres;3 adres = karma(icerik);4 return tablo[adres].listeAra( icerik );5 }

Her elemanı baglı liste olan bir karmatablosuna yeni bir eleman ekleme

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 11 / 31

1 void karmaEkle(Eleman eleman){2 int adres;3 adres = karma(eleman.icerik);4 tablo [adres]. listeyeEkle (eleman);5 }

Her elemanı baglı liste olan bir karmatablosundan bir elemanı silme

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 12 / 31

1 void karmaSil(int icerik){2 Eleman eleman;3 int adres;4 adres = karma(icerik);5 eleman = tablo[adres]. listeAra ( icerik );6 if (eleman != null)7 tablo [adres]. listedenSil (eleman);8 }

Karma Tablosu Islemleri (Baglı Liste)

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 13 / 31

● Arama: O(1)● Ekleme: O(1)● Silme: O(1)

Açık Adresleme

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 14 / 31

Dogrusal strateji ile düzenlenmis açıkadreslemeli bir karma tablosu

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 15 / 31

9 89 89 89 89 89

8 18 18 18 18

7

6

5

4

3

2 69

1 58 58

0 49 49 49

Karma tablosunda bir sayı arama (dogrusalstrateji)

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 16 / 31

1 Ornek karmaAra(int icerik){2 int adres;3 adres = karma(icerik);4 while (tablo[adres] != null){5 if (!( silindi [adres]) && tablo[adres]. icerik == icerik )6 break;7 adres = (adres + 1) % N;8 }9 return tablo[adres];

10 }

Karma tablosunda yeni bir eleman ekleme(dogrusal strateji)

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 17 / 31

1 void karmaEkle(Ornek ornek){2 int adres;3 adres = karma(ornek.icerik);4 while (tablo[adres] != null && !(silindi [adres]))5 adres = (adres + 1) % N;6 if (tablo [adres] != null)7 silindi [adres] = false;8 tablo [adres] = ornek;9 }

Karma tablosundan eleman silme (dogrusalstrateji)

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 18 / 31

1 void karmaSil(int icerik){2 int adres;3 adres = karma(icerik);4 while (tablo[adres] != null){5 if (!( silindi [adres]) && tablo[adres]. icerik == icerik )6 break;7 adres = (adres + 1) % N;8 }9 silindi [adres] = true;

10 }

Ikinci derece strateji ile düzenlenmis açıkadreslemeli bir karma tablosu

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 19 / 31

9 89 89 89 89 89

8 18 18 18 18

7

6

5

4

3 69

2 58 58

1

0 49 49 49

Çift karma strateji ile düzenlenmis açıkadreslemeli bir karma tablosu

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 20 / 31

9 89 89 89 89 89

8 18 18 18 18

7

6 49 49 49

5

4

3 58 58

2

1

0 69

Karma Tablosu Islemleri (Dizi)

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 21 / 31

● Arama: O(1)● Ekleme: O(1)● Silme: O(1)

Tekrar Karma

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 22 / 31

Önceki sekildeki karma tablosunun tekrarkarılması

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 23 / 3113

12

11 11

10

9 9

8

7

6 76

5

4

3 423

2

1 71

0

Bir karma tablosunu tekrar karma

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 24 / 31

1 void tekrarKarma(){2 int i;3 Ornek[] tablo ;4 boolean[] silindi ;5 tablo = new Ornek[N];6 silindi = new boolean[N];7 for (i = 0; i < N; i++){8 tablo [ i ] = this.tablo[i ];9 silindi [ i ] = this. silindi [ i ];

10 }11 this.tablo = new Ornek[2 * N];12 this. silindi = new boolean[2 * N];13 N = 2 * N;14 for (i = 0; i < N / 2; i++)15 if (tablo [ i ] != null && !silindi [ i ])16 karmaEkle(tablo[i ]);17 }

Uygulama: Hedef Tahtası

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 25 / 31

Hedef tahtası probleminin genis aramayöntemiyle çözümü (1)

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 26 / 31

1 String hedefTahtasi(int[] tahta){2 int i, t ;3 String a;4 Eleman e;5 Kuyruk k;6 Ornek o;7 Karma kt;8 e = new Eleman(0, "");9 k = new Kuyruk();

10 k.kuyrugaEkle(e);11 o = new Ornek(0);12 kt = new Karma();13 kt .karmaEkle(o);

Hedef tahtası probleminin genis aramayöntemiyle çözümü (2)

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 27 / 31

14 while (!k.kuyrukBos()){15 e = k.kuyrukSil ();16 if (e.toplam == 100)17 return e.atis;18 for (i = 0; i < 5; i++){19 t = e.toplam + tahta[ i ];20 if (t <=100)21 if (kt .karmaAra(t) != null){22 a = e. atis ;23 a = a + " " + tahta[ i ];24 e = new Eleman(t, a);25 k.kuyrugaEkle(e);26 o = new Ornek(t);27 kt .karmaEkle(o);28 }29 }30 }31 return null;32 }

Uygulama: Karma Dizini

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 28 / 31

Ögrenci bilgilerini (no, ad, soyad) içerenörnek yapısı

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 29 / 31

1 public class Ornek{2 String ad;3 String soyad;4 int icerik ;5 public Ornek(int no, String ad, String soyad){6 this.icerik = no;7 this.ad = ad;8 this.soyad = soyad;9 }

10 }

Ögrenci dosyasındaki bilgilerle karmatablosunu doldurmak

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 30 / 31

1 Karma dosyaOku(){2 Scanner dosya;3 Ornek e;4 String ad;5 String soyad;6 int no, yas, i , sayi ;7 Karma k;8 dosya = new Scanner(new File("ogrenci.txt"));9 sayi = dosya.nextInt ();

10 k = new Karma();11 for (i = 0; i < sayi ; i++){12 no = dosya.nextInt ();13 ad = dosya.next();14 soyad = dosya.next();15 e = new Ornek(no, ad, soyad);16 k.karmaEkle(e);17 }18 return k;19 }

Numarası 18 olan ögrencinin ad ve soyadınıbulan karma dizini kullanarak fonksiyon

Karma Tablosu

Baglı Liste ile KarmaTablosu Tanımı

Açık Adresleme

Tekrar Karma

Uygulama: HedefTahtası

Uygulama: KarmaDizini

O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 31 / 31

1 void sorgu(Karma k){2 Ornek o;3 o = k.karmaAra(18);4 System.out.print(o.ad);5 System.out.print(o.soyad);6 }