logo

Hoe ontwerp je een hashset in Python?

Zoals we weten is HashSet een beroemde klasse in Java. HashSet wordt gebruikt om de waarden op te slaan met behulp van een hashtabel. In deze tutorial behandelen we HashSet in Python. We zullen ook leren hoe we HashSet in Python kunnen ontwerpen.

Een HashSet is een fundamentele datastructuur bij programmeren, die vaak voorkomt in talen zoals Java. Het behoort tot het Java Collections Framework en dient als implementatie van de ingestelde interface. Het onderscheidende kenmerk van een HashSet is de mogelijkheid om elementen op te slaan op een manier die een efficiënte controle op het bestaan ​​van specifieke elementen mogelijk maakt en de uniciteit binnen de set garandeert. In tegenstelling tot structuren zoals lijsten, onderhoudt een HashSet geen specifieke volgorde tussen de elementen.

Een belangrijk kenmerk van een HashSet is de garantie voor uniciteit; het staat geen dubbele elementen toe. Bewerkingen zoals het toevoegen, verwijderen en controleren op de aanwezigheid van elementen hebben doorgaans een constante gemiddelde prestatie, waardoor het een efficiënte keuze is voor dergelijke taken. Het is echter essentieel op te merken dat de volgorde van elementen in een HashSet niet gegarandeerd is.

Sleuteleigenschappen:

Uniciteit: Een HashSet staat geen dubbele elementen toe. Het gebruikt de equals()-methode om te controleren op duplicaten, zodat elk element in de set uniek is.

b+ boom

Geen bestelling: De elementen in een HashSet worden niet in een bepaalde volgorde opgeslagen. Als u de volgorde van de elementen wilt behouden, kunt u overwegen een LinkedHashSet te gebruiken, die de volgorde van invoeging handhaaft.

Onderliggende gegevensstructuur: Intern gebruikt een HashSet een hashtabel om elementen op te slaan. Dit zorgt voor een constante gemiddelde complexiteit voor basisbewerkingen zoals toevoegen, verwijderen en bevat.

Nulelementen: Een HashSet staat één nulelement toe. Als u probeert een duplicaat null-element toe te voegen, wordt het bestaande vervangen.

Invoering

We kunnen HashSet ontwerpen zonder hashtabelbibliotheken te gebruiken. Hieronder staan ​​de verschillende functies -

voeg(x) toe - De add(x)-methode wordt voornamelijk gebruikt om een ​​waarde x in de HashSet in te voegen.

bevat(x) - De methode contain(x) wordt voornamelijk gebruikt om te controleren of een waarde x aanwezig is in de HashSet of niet.

wiskundige methoden in Java

verwijder(x) - De remove(x)-methode wordt voornamelijk gebruikt om x uit de HashSet te verwijderen. Als de HashSet geen enkele waarde heeft, zal deze niets doen.

Laten we deze methoden begrijpen aan de hand van onderstaand voorbeeld.

Initialiseer eerst de HashSet en roep de functie add(1) aan. Er wordt 1 toegevoegd aan de hashset. Roep add(3) aan, wat 3 optelt, en roep vervolgens contain(1) aan. Er wordt gecontroleerd of 1 aanwezig is of niet in de hashset. Nu noemen we bevat(2), add(2), bevat(2), remove(2), bevat(2).

De uitvoer wordt respectievelijk geretourneerd als waar voor 1 aanwezig is, onwaar voor 2 niet aanwezig is, waar voor 2 aanwezig is en onwaar voor 2 niet aanwezig is.

Basisbewerkingen van HashSet in Python

We kunnen enkele basisbewerkingen in HashSet uitvoeren met behulp van de volgende methoden. Laten we deze methoden begrijpen.

Nieuwe waarden toevoegen in HashSet

In het onderstaande voorbeeld voegen we de waarde toe aan de hashset met behulp van de functie add(). De functie add() voegt de waarde één voor één toe. Laten we de volgende code bekijken.

Voorbeeld -

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

Uitgang:

Junit-testgevallen
 Adding value: 2 Adding value: 7 Adding value: 6 

Waarden verwijderen in HashSet

We kunnen de bestaande waarde verwijderen met behulp van de functie remove(). Laten we de volgende code begrijpen.

Voorbeeld -

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

Uitgang:

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

Controleren of er waarden bestaan ​​in HashSet

In dit voorbeeld laten we zien hoe we kunnen controleren of een bepaalde waarde bestaat of niet bevat() functie. Laten we de volgende code begrijpen.

Voorbeeld -

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

Uitgang:

C#-codevoorbeelden
 Adding value: 2 Adding value: 7 Adding value: 6 It contains: 2 

Algoritme voor de HashSet in Python

In de eerste stap definiëren we één gegevensstructuur genaamd HashList. Vervolgens initialiseren we een lege lijst als een nieuwe_lijst . Vervolgens definiëren we een functie update() waarin found een Booleaanse waarde False zal opslaan. Nu gebruiken we for-lus voor elke index I en K. Als de sleutel hetzelfde is als 'k', dan nieuwe_lijst[i]=k en gevonden waarde ingesteld op True. De waarde wordt onderaan de lijst ingevoegd als er geen waarde wordt gevonden.

De volgende stap is het definiëren van de functie get(), die we voor de lus zullen gebruiken, en als de waarde van k hetzelfde is als de sleutel, zal de uitvoer True zijn; anders, Vals. Als de sleutel hetzelfde is als 'k', verwijdert u de waarde uit de lijst nieuwe lijst. Hetzelfde proces wordt toegepast in de functie remove().

Nu gaan we de hoofdklasse HashSet maken. Deze klasse declareert de initialisatiefunctie waarbij de key_space-waarde = 2096. De hash_table zal een lijst hebben met objecten van het type new_list van grootte sleutel_spatie . Vervolgens zullen we de functie add() maken, waarin hash_key = sleutel%sleutel_spatie en update de sleutel van hash_table[hash_key]. Daarna bellen wij met de functie verwijderen , waarin hash_key = sleutel % key_space, en verwijder de sleutel van hash_table[hash_key]. Daarna bellen wij met de bevat functie , waarin

hash_key = sleutel % key_space, en haal de sleutel op van hash_table[hash_key].

java string indexof

Laten we het stapsgewijze implementatie-algoritme bekijken.

algoritme -

  • Maak een datastructuur met de naam HashSet, initialiseer deze zoals hieronder
  • nieuwe_lijst = []
  • Definieer een functie update(). Dit zal de sleutel vergen
  • gevonden := Onwaar
  • voor elke index i en sleutel k in new_list, doe dat
    • als sleutel hetzelfde is als k, dan
      • nieuwe_lijst[i]:= sleutel
      • gevonden:= Waar
      • kom uit de lus
    • als het vals wordt bevonden, dan
      • plaats de sleutel aan het einde van new_list
  • Definieer een functie get() . Dit zal de sleutel vergen
    • voor elke k in new_list, doe dat
      • als k hetzelfde is als sleutel, dan
        • terugkeer Waar
      • terugkeer Vals
  • Definieer een functie remove(). Dit zal de sleutel vergen
    • voor elke index i en sleutel k in new_list, doe dat
      • als sleutel hetzelfde is als k, dan
        • verwijder nieuwe_lijst[i]
  • Maak nu een aangepaste hashSet. Er zullen enkele methoden zijn als volgt
  • Initialiseer dit als volgt -
  • sleutel_spatie := 2096
  • hash_table:= een lijst met bucket-type objecten met de grootte key_space
  • Definieer een functie add(). Dit zal de sleutel vergen
    • hash_key:= sleutel mod key_space
    • bel update(sleutel) van hash_table[hash_key]
  • Definieer een functie remove(). Dit zal de sleutel vergen
    • hash_key:= keymodkey_spatie
    • sleutel verwijderen uit hash_table[hash_key]
  • Definieer een functie bevat(). Dit zal de sleutel vergen
    • hash_key:= keymodkey_spatie
    • return get(key) van hash_table[hash_key]

Implementatie van HashSet in Python

Hier zullen we het bovenstaande algoritme implementeren en een Python-programma maken. We zullen de twee klassen definiëren: HashSet en CreateHashset. Laten we de onderstaande code bekijken.

Code-

 # 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)) 

Uitgang:

 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] 

Uitleg:

    verificatiewaarden klasse:Deze klasse behandelt een overzicht van waarden (new_list) en geeft technieken om waarden te vernieuwen, op aanwezigheid te controleren en te elimineren.__init__ techniek:Introduceert een leegstaand overzicht voor elke gelegenheid.updatetechniek:Werkt een huidige waarde bij of voegt een andere waarde toe aan het overzicht.techniek krijgen:Controleert of er een waarde bestaat in de lijst.strategie elimineren:Elimineert een vooraf gedefinieerde waardering uit het overzicht.HashSet-klasse:Dit is de primaire uitvoering van de HashSet.__init__ techniek:Introduceert de HashSet met een vooraf gedefinieerde sleutelruimte en maakt een cluster (hash_table) van verificatiewaardenvoorbeelden voor het opvangen van impacts.hash_values ​​techniek:Berekent de hash-sleutel voor een bepaalde infosleutel met behulp van de modulo-activiteit.strategie toevoegen:Voegt een sleutel toe aan de HashSet door het vergelijkende verificatiewaardenobject in de hash_table te vernieuwen.techniek elimineren:Elimineert een sleutel uit de HashSet.bevat strategie:Controleert of er een vitale waarde bestaat in de HashSet.techniek tonen:Drukt het hoofdbestanddeel af van elke niet-ongeldige lijst met verificatiewaarden, en biedt een weergave van de informatiecirculatie.Gebruiksvoorbeeld:De code toont het gebruik van de HashSet door sleutels (10, 6, 5) toe te voegen, te controleren op aanwezigheid en enkele gegevens over de innerlijke toestand weer te geven.