logo

Cum să proiectați un Hashset în Python?

După cum știm că HashSet este o clasă faimoasă în Java. HashSet este folosit pentru a stoca valorile folosind un tabel hash. În acest tutorial, vom acoperi HashSet în Python. Vom afla, de asemenea, despre cum putem proiecta HashSet în Python.

Un HashSet este o structură de date fundamentală în programare, întâlnită în mod obișnuit în limbaje precum Java. Aparține cadrului Java Collections și servește ca implementare a interfeței set. Caracteristica distinctivă a unui HashSet este capacitatea sa de a stoca elemente într-un mod care facilitează verificarea eficientă a existenței unor elemente specifice și asigură unicitatea în cadrul setului. Spre deosebire de structuri precum liste, un HashSet nu menține nicio ordine specifică între elementele sale.

O caracteristică cheie a unui HashSet este garanția sa de unicitate; nu permite elemente duplicate. Operațiuni precum adăugarea, eliminarea și verificarea prezenței elementelor au de obicei performanțe medii în timp constant, ceea ce o face o alegere eficientă pentru astfel de sarcini. Cu toate acestea, este esențial să rețineți că ordinea elementelor dintr-un HashSet nu este garantată.

Caracteristici cheie:

unicitate: Un HashSet nu permite elemente duplicate. Folosește metoda equals() pentru a verifica dacă există duplicate, asigurându-se că fiecare element din set este unic.

Nicio comandă: Elementele dintr-un HashSet nu sunt stocate într-o anumită ordine. Dacă trebuie să mențineți ordinea elementelor, ați putea lua în considerare utilizarea unui LinkedHashSet, care menține ordinea de inserare.

java cu leagăn

Structura de date de bază: Intern, un HashSet folosește un tabel hash pentru a stoca elemente. Acest lucru permite o complexitate medie în timp constant pentru operațiuni de bază, cum ar fi adăugarea, eliminarea și conținutul.

Elemente nule: Un HashSet permite un element nul. Dacă încercați să adăugați un element nul duplicat, acesta îl va înlocui pe cel existent.

Introducere

Putem proiecta HashSet fără a folosi biblioteci de tabele hash. Mai jos sunt multiplele funcții diferite -

adauga (x) - Metoda add(x) este folosită în principal pentru a introduce o valoare x în HashSet.

conține (x) - Metoda contains(x) este folosită în principal pentru a verifica dacă o valoare x este prezentă sau nu în HashSet.

elimina (x) - Metoda remove(x) este folosită în principal pentru a șterge x din HashSet. Dacă HashSet-ul nu are nicio valoare, nu va face nimic.

Să înțelegem aceste metode prin exemplul de mai jos.

Mai întâi, inițializați HashSet și apelați funcția add(1). Se va adăuga 1 în setul hash. Apelați add(3), care va adăuga 3, apoi apelați conține (1). Se va verifica dacă 1 este prezent sau nu în setul hash. Acum numim contains(2), add(2), contains(2), remove(2), contains(2).

Ieșirea va fi returnată ca adevărat pentru 1 este prezent, false pentru 2 nu este prezent, adevărat pentru 2 este prezent, respectiv false pentru 2 nu este prezent.

Operații de bază ale HashSet în Python

Putem efectua câteva operații de bază în HashSet folosind următoarele metode. Să înțelegem aceste metode.

Adăugarea de noi valori în HashSet

În exemplul de mai jos, vom adăuga valoarea în setul hash folosind funcția add(). Funcția add() adaugă valoarea pe rând. Să vedem următorul cod.

Exemplu -

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

Ieșire:

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

Eliminarea valorilor din HashSet

Putem elimina valoarea existentă folosind funcția remove(). Să înțelegem următorul cod.

Exemplu -

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

Ieșire:

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

Verificarea dacă valorile există în HashSet

În acest exemplu, vom demonstra cum putem verifica dacă o anumită valoare există sau nu folosește conține() funcţie. Să înțelegem următorul cod.

Exemplu -

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

Ieșire:

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

Algoritm pentru HashSet în Python

În primul pas, definim o structură de date numită HashList. Apoi, inițializam o listă goală ca o listă_nouă . Apoi, definim o funcție update() în care find va stoca o valoare booleană False. Acum, folosim bucla for pentru fiecare index I și K. dacă cheia este aceeași cu „k”, atunci listă_nouă[i]=k și a găsit valoarea setată la True. Valoarea va fi inserată la ultima listă dacă nu este găsită nicio valoare.

Următorul pas este definirea funcției get(), pe care o vom folosi pentru buclă, iar dacă valoarea lui k este aceeași cu cheia, rezultatul va fi True; altfel, fals. Dacă cheia este aceeași cu „k”, ștergeți valoarea din listă listă_nouă. Același proces va fi aplicat în funcția remove().

Acum, vom crea clasa principală HashSet. Această clasă va declara funcția de inițializare unde valoarea key_space = 2096. Hash_table va avea o listă de obiecte de tip new_list de dimensiune key_space . Apoi, vom crea funcția add(), în care hash_key = cheie%key_space și actualizați cheia hash_table[hash_key]. După aceea, vom apela la funcția de eliminare , în care hash_key = cheia % key_space și ștergeți cheia hash_table[hash_key]. După aceea, vom apela la conţine funcţia , in care

hash_key = cheie % key_space și obțineți cheia hash_table[hash_key].

Să vedem algoritmul de implementare în pas.

algoritm -

25 din 100
  • Creați o structură de date numită HashSet, inițializați-o ca mai jos
  • listă_nouă = []
  • Definiți o actualizare a funcției(). Aceasta va lua cheia
  • găsit := Fals
  • pentru fiecare index i și cheie k din listă_nouă, faceți
    • dacă cheia este aceeași cu k, atunci
      • listă_nouă[i]:= cheie
      • găsit:= Adevărat
      • ieși din buclă
    • dacă este găsit fals, atunci
      • inserați cheia la sfârșitul listei_nouve
  • Definiți o funcție get() . Aceasta va lua cheia
    • pentru fiecare k din new_list, do
      • dacă k este același cu cheia, atunci
        • returnează Adevărat
      • return False
  • Definiți o funcție remove(). Aceasta va lua cheia
    • pentru fiecare index i și cheie k din listă_nouă, faceți
      • dacă cheia este aceeași cu k, atunci
        • șterge lista_nouă[i]
  • Acum creați hashSet personalizat. Vor exista câteva metode, după cum urmează
  • Inițializați acest lucru după cum urmează -
  • key_space := 2096
  • hash_table:= o listă de obiecte tip bucket de dimensiune key_space
  • Definiți o funcție add(). Aceasta va lua cheia
    • hash_key:= cheie mod key_space
    • Apelați actualizarea (cheia) a tabelului_hash[cheie_hash]
  • Definiți o funcție remove(). Aceasta va lua cheia
    • hash_key:= keymodkey_space
    • șterge cheia din hash_table[hash_key]
  • Definiți o funcție conține(). Aceasta va lua cheia
    • hash_key:= keymodkey_space
    • returnează get(cheie) din tabel_hash[cheie_hash]

Implementarea HashSet în Python

Aici vom implementa algoritmul de mai sus și vom crea programul Python. Vom defini cele două clase: HashSet și CreateHashset. Să vedem codul de mai jos.

Cod -

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

Ieșire:

 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] 

Explicaţie:

    clasa de verificare a valorilor:Această clasă se ocupă cu o listă de valori (listă_nouă) și oferă tehnici de reîmprospătare, de verificare a prezenței și de eliminare a valorilor.__init__ tehnica:Introduce o listă liberă pentru fiecare ocazie.tehnica de actualizare:Actualizează o valoare actuală sau afișează o altă valoare la lista.obtine tehnica:Verificări în cazul în care există o valoare în rundown.eliminarea strategiei:Elimina o stima predefinita din lista.Clasa HashSet:Aceasta este execuția principală a HashSet-ului.__init__ tehnica:Introduce HashSet cu un spațiu de cheie predefinit și creează un cluster (hash_table) de exemple de verificvalues ​​pentru a avea grijă de impact.tehnica hash_values:Elaborează cheia hash pentru o anumită cheie de informații utilizând activitatea modulo.adauga strategie:Adaugă o cheie la HashSet prin reîmprospătarea obiectului de comparare verifyvalues ​​din hash_table.elimina tehnica:Elimină o cheie din HashSet.contine strategia:Verifică dacă un element vital există în HashSet.tehnica de prezentare:Tipărește componenta principală a fiecărei liste de valori de verificare non-void, oferind o descriere a circulației informațiilor.Exemplu de utilizare:Codul arată utilizarea HashSet-ului adăugând chei (10, 6, 5), verificând prezența și afișând câteva date despre starea interioară.