Yazan : Şadi Evren ŞEKER

Hamming mesafesi bilgisayar bilimlerinde aynı uzunluktaki iki dizgi (string) arasında, birbirine dönüşmesi için gerekli olan yer değiştirme sayısını verir. Yani basitçe bir dizginin diğer dizgiden ne kadar farklı olduğunu gösterir.

Örneğin aşağıda bazı dizgiler arasındaki hamming mesafesi verilmiştir:

100011101 <-> 100101101 = 2
düğün <-> düşün = 1

Bu durum bir küp şeklinde düşünülebilir. Örneğin 3 ikillik (bit) bir sayısının hamming mesafesi aşağıdaki küpte gösterilmiştir:



Yukarıdaki şekilde dikkat edilirse küpün 8 köşesine 3 ikillik(bit) sayının alabileceği her ihtimal yazılmıştır. Bu ihtimaller arasında geçiş için gereken değiştirme miktarı hep 1’dir dolayısıyla bu küp hamming mesafesini gösteren bir küp olarak düşünülebilir.

Örneğin 010 sayısının 111 sayısına dönüşmesi küp üzerinde iki mesafe gerektirmektedir ve iki ayrı yoldan (011 veya 110) üzerinden uaşılabilmektedir.

Yorumlar

  1. Ozan

    dizilerde hamming uzaklığında sızde bılıyorsunuz ki aynı iki ayrı dizideki aynı indexteki sayılar birbiriyle karsılastırılıp farklı iseler sayac 1 arttırılır.Ben kodu boyle yazdım ama sonuc hep 9 veriyor sizce buradaki kodda hatam nedir?

    #include 
    #include 
    #include 
    int main(){
        int i;
        int sayac=0;
        int*dizi1;
        int*dizi2;
        printf("gir:");
        for(i=0;i<10;i++){
                          dizi1=(int*)malloc(sizeof(int)*10);
                          scanf("%d",&dizi1[i]);
        }
        printf("ngir:");
        for(int i=0;i<10;i++){
                    dizi2=(int*)malloc(sizeof(int)*10);
                    scanf("%d",&dizi2[i]);
        }
                                           
        for(i=0;i<10;i++){
                  if(dizi1[i]!=dizi2[i]){
                             sayac++;
                   }
        }
        printf("%d",sayac);
        getch();
        return 0;
    }
    
  2. Şadi Evren ŞEKER Article Author

    Diziler bir kere hafızada malloc ile tanımlandıktan sonra içerisine veri okunur, döngünün her adımında yeniden malloc yaptığınız için dizinin içindeki bilgiler sıfırlanıyor. Dizilerin boyutu ön tanımlı olduğu için malloc ile dinamik hafıza ayırma işlemine gerek yoktur, aşağıda dizinin doğru kullanımını veriyorum ayrıca yorum olarak malloc kullanılması durumu da bulunuyor.

    Başarılar

    #include 
    #include 
    #include 
    int main(){
        int i;
        int sayac=0;
        int *dizi1[10]; // veya int *dizi1=(int*)malloc(sizeof(int)*10);
        int *dizi2[10]; // veya int *dizi2=(int*)malloc(sizeof(int)*10);
        printf("gir:");
        for(i=0;i<10;i++){            
                          scanf("%d",&dizi1[i]);
        }
        printf("ngir:");
        for(int i=0;i<10;i++){
                    scanf("%d",&dizi2[i]);
        }
     
        for(i=0;i<10;i++){
                  if(dizi1[i]!=dizi2[i]){
                             sayac++;
                   }
        }
        printf("%d",sayac);
        getch();
        return 0;
    }
    

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir