logo

Python'da Hashset Nasıl Tasarlanır?

HashSet'in Java'da ünlü bir sınıf olduğunu biliyoruz. HashSet, karma tablosu kullanarak değerleri saklamak için kullanılır. Bu derste Python'da HashSet'i ele alacağız. Ayrıca HashSet'i Python'da nasıl tasarlayabileceğimizi de öğreneceğiz.

HashSet, programlamada yaygın olarak Java gibi dillerde bulunan temel bir veri yapısıdır. Java Koleksiyonları Çerçevesine aittir ve set arayüzünün bir uygulaması olarak hizmet eder. HashSet'in ayırt edici özelliği, belirli öğelerin varlığının etkili bir şekilde kontrol edilmesini kolaylaştıracak ve küme içinde benzersizliği garanti edecek şekilde öğeleri saklama yeteneğidir. Listeler gibi yapılardan farklı olarak HashSet, elemanları arasında belirli bir sırayı korumaz.

HashSet'in temel özelliklerinden biri benzersizliğin garantisidir; yinelenen öğelere izin vermez. Öğelerin eklenmesi, çıkarılması ve varlığının kontrol edilmesi gibi işlemler genellikle sabit zamanlı ortalama performansa sahiptir, bu da onu bu tür görevler için verimli bir seçim haline getirir. Ancak HashSet'teki öğelerin sırasının garanti edilmediğini unutmamak önemlidir.

Temel özellikler:

Benzersizlik: HashSet, yinelenen öğelere izin vermez. Kümedeki her öğenin benzersiz olmasını sağlamak için kopyaları kontrol etmek için equals() yöntemini kullanır.

Sipariş yok: HashSet'teki öğeler belirli bir sırayla saklanmaz. Öğelerin sırasını korumanız gerekiyorsa ekleme sırasını koruyan LinkedHashSet kullanmayı düşünebilirsiniz.

Temel Veri Yapısı: Dahili olarak bir HashSet, öğeleri depolamak için bir karma tablosu kullanır. Bu, ekleme, kaldırma ve içerme gibi temel işlemler için sabit zamanlı ortalama karmaşıklığa olanak tanır.

Boş Öğeler: Bir HashSet bir boş öğeye izin verir. Yinelenen bir boş öğe eklemeye çalışırsanız, mevcut öğenin yerini alacaktır.

giriiş

HashSet'i herhangi bir hash tablosu kütüphanesi kullanmadan tasarlayabiliriz. Aşağıda birden fazla farklı işlev bulunmaktadır -

ekle(x) - add(x) yöntemi esas olarak HashSet'e bir x değeri eklemek için kullanılır.

içerir(x) - include(x) yöntemi esas olarak HashSet'te bir x değerinin bulunup bulunmadığını kontrol etmek için kullanılır.

flip flop

kaldır(x) - Remove(x) yöntemi esas olarak x'i HashSet'ten silmek için kullanılır. HashSet'in herhangi bir değeri yoksa hiçbir şey yapmaz.

Bu yöntemleri aşağıdaki örnekle anlayalım.

Öncelikle HashSet'i başlatın ve add(1) fonksiyonunu çağırın. Hash setine 1 ekleyecektir. 3 ekleyecek olan add(3)'ü çağırın, sonra da include(1)'i çağırın. Hash setinde 1'in var olup olmadığını kontrol edecektir. Şimdi içerir(2), ekle(2), içerir(2), sil(2), içerir(2) diyoruz.

Çıktı sırasıyla 1 mevcutsa doğru, 2 mevcut değilse yanlış, 2 mevcutsa doğru, 2 mevcut değilse yanlış olarak döndürülür.

Python'da HashSet'in Temel İşlemleri

HashSet'te bazı temel işlemleri aşağıdaki yöntemleri kullanarak gerçekleştirebiliriz. Bu yöntemleri anlayalım.

HashSet'e yeni değerler ekleme

Aşağıdaki örnekte hash setindeki değeri add() fonksiyonunu kullanarak ekleyeceğiz. add() işlevi, değeri birer birer ekler. Aşağıdaki kodu görelim.

java lambda

Örnek -

 from hs import HashSet obj = HashSet() obj.add(2) obj.add(7) obj.add(6) 

Çıktı:

 Adding value: 2 Adding value: 7 Adding value: 6 

HashSet'teki değerleri kaldırma

Remove() fonksiyonunu kullanarak mevcut değeri kaldırabiliriz. Aşağıdaki kodu anlayalım.

Örnek -

 from hs import HashSet obj = HashSet() obj.add(2) obj.add(7) obj.add(6) obj.remove(7) obj.remove(6) 

Çıktı:

 Adding value: 2 Adding value: 7 Adding value: 6 Removed value: 7 Removed value: 6 

HashSet'te değerlerin olup olmadığını kontrol etme

Bu örnekte, belirli bir değerin var olup olmadığını veya bu değeri kullanıp kullanmadığını nasıl kontrol edebileceğimizi göstereceğiz. içerir() işlev. Aşağıdaki kodu anlayalım.

Örnek -

 from hs import HashSet obj = HashSet() obj.add(2) obj.add(7) obj.add(6) obj.contains(2) 

Çıktı:

 Adding value: 2 Adding value: 7 Adding value: 6 It contains: 2 

Python'da HashSet Algoritması

İlk adımda HashList adında bir veri yapısı tanımlıyoruz. Daha sonra boş bir listeyi şu şekilde başlatıyoruz: yeni_liste . Daha sonra, bulunanın False Boolean değerini depolayacağı bir update() fonksiyonu tanımlarız. Şimdi, her I ve K indeksi için for döngüsünü kullanırız. Eğer anahtar 'k' ile aynıysa, o zaman yeni_liste[i]=k ve bulunan değer True olarak ayarlandı. Herhangi bir değer bulunamazsa değer listenin sonuna eklenecektir.

Bir sonraki adım döngü için kullanacağımız get() fonksiyonunu tanımlamaktır ve eğer k değeri anahtar ile aynı ise çıktı True olacaktır; aksi halde Yanlış. Anahtar 'k' ile aynıysa değeri listeden silin yeni liste. Remove() fonksiyonunda da aynı işlem uygulanacaktır.

Şimdi HashSet ana sınıfını oluşturacağız. Bu sınıf, key_space değerinin = 2096 olduğu yerde başlatma işlevini bildirecektir. Hash_table, boyuttaki new_list türü nesnelerin bir listesine sahip olacaktır. anahtar_boşluğu . Daha sonra add() fonksiyonunu yaratacağız. hash_key = anahtar%key_space ve hash_table[hash_key] anahtarını güncelleyin. Bundan sonra arayacağız işlevi kaldır , burada hash_key = key % key_space ve hash_table[hash_key] anahtarını silin. Bundan sonra arayacağız işlev içerir , hangisinde

merhaba dünya java

hash_key = anahtar % key_space ve hash_table[hash_key] anahtarını alın.

Adım adım uygulama algoritmasını görelim.

Algoritma -

  • HashSet adında bir veri yapısı oluşturun, aşağıdaki gibi başlatın.
  • yeni_liste = []
  • Bir işlev güncellemesi () tanımlayın. Bu anahtar alacak
  • Bulundu := Yanlış
  • new_list'teki her i indeksi ve k anahtarı için şunu yapın:
    • anahtar k ile aynıysa, o zaman
      • yeni_liste[i]:= anahtar
      • bulundu:= Doğru
      • döngüden çıkmak
    • yanlış bulunursa, o zaman
      • new_list'in sonuna anahtarı ekleyin
  • get() işlevini tanımlayın. Bu anahtar alacak
    • new_list'teki her k için şunu yapın
      • k anahtarla aynıysa, o zaman
        • Doğruyu döndür
      • Yanlış dönüş
  • Bir kaldırma() işlevi tanımlayın. Bu anahtar alacak
    • new_list'teki her i indeksi ve k anahtarı için şunu yapın:
      • anahtar k ile aynıysa, o zaman
        • new_list'i sil[i]
  • Şimdi özel hashSet oluşturun. Aşağıdaki gibi birkaç yöntem olacak
  • Bunu aşağıdaki gibi başlatın -
  • anahtar_boşluk := 2096
  • hash_table:= key_space boyutunda paket tipi nesnenin listesi
  • Add() işlevini tanımlayın. Bu anahtar alacak
    • hash_key:= anahtar mod key_space
    • hash_table[hash_key] güncellemesini (anahtar) çağırın
  • Bir kaldırma() işlevi tanımlayın. Bu anahtar alacak
    • hash_key:= keymodkey_space
    • anahtarı hash_table[hash_key]'den sil
  • İçeren() işlevini tanımlayın. Bu anahtar alacak
    • hash_key:= keymodkey_space
    • hash_table[hash_key]'in get(key) değerini döndür

HashSet'in Python'da uygulanması

Burada yukarıdaki algoritmayı uygulayıp Python programını oluşturacağız. İki sınıfı tanımlayacağız: HashSet ve CreateHashset. Aşağıdaki kodu görelim.

Kod -

 # Here, we are Designing the HashSet in python # Here, we are checking the values and will return the output class class verifyvalues: # Here, we are initialization function which has list new_list def __init__(self): self.new_list=[] # Here, we have the function to update values def update(self, key): found=False for i,k in enumerate(self.new_list): if key==k: self.new_list[i]=key found=True break if not found: self.new_list.append(key) # Here, we have function to get values def get(self, key): for k in self.new_list: if k==key: return True return False # Here, we have function to remove values def remove(self, key): for i,k in enumerate(self.new_list): if key==k: del self.new_list[i] # Here, we have defined a class as HashSet class HashSet: # Here, we have defined an Initialization function def __init__(self): self.key_space = 2096 self.hash_table=[verifyvalues() for i in range(self.key_space)] def hash_values(self, key): hash_key=key%self.key_space return hash_key # Here, we have also defined an add function def add(self, key): self.hash_table[self.hash_values(key)].update(key) # Here, we have also defined a remove function def remove(self, key): self.hash_table[self.hash_values(key)].remove(key) # Here, we have defined the contains function def contains(self, key): return self.hash_table[self.hash_values(key)].get(key) def display(self): ls=[] for i in self.hash_table: if len(i.new_list)!=0:ls.append(i.new_list[0]) print(ls) ob = HashSet() print(ob.hash_values(10)) print('Add 10') ob.add(10) print(ob.hash_values(6)) print('Add 6 ') ob.add(6) print(ob.hash_values(5)) print('Add 5 ') ob.add(5) print('Contains 10 : ',ob.contains(10)) print('Contains 3: ',ob.contains(3)) print('Contains 8 : ',ob.contains(9)) 

Çıktı:

 10 Add 10 6 Add 6 5 Add 5 Contains 10 : True Contains 3: False Contains 8 : False 2 Add 2 3 Add 3 Contains 2 : True Remove 2 Contains 2 : False Contains 3 : True [3, 5, 6, 10] 

Açıklama:

    doğrulamadeğerleri sınıfı:Bu sınıf, değerlerin özetiyle (new_list) ilgilenir ve değerleri yenilemek, varlığını kontrol etmek ve ortadan kaldırmak için teknikler verir.__init__ tekniği:Her durum için boş bir özet sunar.güncelleme tekniği:Geçerli bir değeri günceller veya listeye başka bir değer ekler.tekniği edinin:Özette bir değerin bulunup bulunmadığını kontrol eder.stratejiyi ortadan kaldırmak:Özetten önceden tanımlanmış bir saygınlığı ortadan kaldırır.HashSet sınıfı:Bu, HashSet'in birincil yürütülmesidir.__init__ tekniği:HashSet'i önceden tanımlanmış bir anahtar alanıyla tanıtır ve etkilerin dikkate alınması için doğrulama değerleri örneklerinden oluşan bir küme (hash_table) oluşturur.hash_values ​​tekniği:Modulo etkinliğini kullanarak belirli bir bilgi anahtarının karma anahtarını hesaplar.strateji ekle:Hash_table'daki karşılaştırma doğrulamadeğerleri nesnesini yenileyerek HashSet'e bir anahtar ekler.tekniği ortadan kaldırmak:HashSet'ten bir anahtarı ortadan kaldırır.strateji içerir:HashSet'te hayati önem taşıyan bir şeyin olup olmadığını kontrol eder.gösteri tekniği:Bilgi dolaşımının bir tasvirini sunarak, her bir geçersiz olmayan doğrulama değerleri listesinin ana bileşenini yazdırır.Kullanım örneği:Kod, anahtarlar (10, 6, 5) ekleyerek, varlığı kontrol ederek ve iç durumla ilgili bazı verileri göstererek HashSet'in kullanımını gösterir.