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: