logo

Kako dizajnirati Hashset u Pythonu?

Kao što znamo, HashSet je poznata klasa u Javi. HashSet se koristi za pohranu vrijednosti pomoću hash tablice. U ovom vodiču ćemo obraditi HashSet u Pythonu. Također ćemo naučiti kako možemo dizajnirati HashSet u Pythonu.

HashSet je temeljna struktura podataka u programiranju, koja se obično nalazi u jezicima kao što je Java. Pripada Java Collections Frameworku i služi kao implementacija postavljenog sučelja. Posebnost HashSeta je njegova sposobnost pohranjivanja elemenata na način koji olakšava učinkovitu provjeru postojanja određenih elemenata i osigurava jedinstvenost unutar skupa. Za razliku od struktura kao što su popisi, HashSet ne održava nikakav određeni poredak među svojim elementima.

Jedna ključna karakteristika HashSeta je njegovo jamstvo jedinstvenosti; ne dopušta duple elemente. Operacije poput dodavanja, uklanjanja i provjere prisutnosti elemenata obično imaju prosječnu izvedbu u konstantnom vremenu, što ga čini učinkovitim izborom za takve zadatke. Međutim, bitno je napomenuti da redoslijed elemenata u HashSet-u nije zajamčen.

Ključne karakteristike:

Jedinstvenost: HashSet ne dopušta duplicirane elemente. Koristi se metodom equals() za provjeru duplikata, osiguravajući da je svaki element u skupu jedinstven.

Bez reda: Elementi u HashSet-u nisu pohranjeni u određenom redoslijedu. Ako trebate održavati redoslijed elemenata, razmislite o korištenju LinkedHashSeta, koji održava redoslijed umetanja.

Temeljna struktura podataka: Interno, HashSet koristi hash tablicu za pohranu elemenata. To omogućuje prosječnu složenost u konstantnom vremenu za osnovne operacije kao što su dodavanje, uklanjanje i sadržavanje.

Nulti elementi: HashSet dopušta jedan nulti element. Ako pokušate dodati duplicirani nulti element, on će zamijeniti postojeći.

Uvod

Možemo dizajnirati HashSet bez korištenja biblioteka hash tablica. Ispod je više različitih funkcija -

dodati(x) - Metoda add(x) se uglavnom koristi za umetanje vrijednosti x u HashSet.

sadrži (x) - Metoda contains(x) se uglavnom koristi za provjeru je li vrijednost x prisutna u HashSet-u ili ne.

ukloniti(x) - Metoda remove(x) se uglavnom koristi za brisanje x iz HashSeta. Ako HashSet nema nikakvu vrijednost, neće učiniti ništa.

Razmotrimo ove metode pomoću primjera u nastavku.

Prvo inicijalizirajte HashSet i pozovite funkciju add(1). Dodat će 1 u hash set. Pozovite add(3), koji će dodati 3, zatim pozovite contains(1). Provjerit će je li 1 prisutan ili ne u hash skupu. Sada pozivamo contains(2), add(2), contains(2), remove(2), contains(2).

Izlaz će biti vraćen kao true za 1 je prisutan, false za 2 nije prisutan, true za 2 je prisutan, false za 2 nije prisutan, redom.

Osnovne operacije HashSeta u Pythonu

Možemo izvesti neke osnovne operacije u HashSet-u pomoću sljedećih metoda. Razumimo ove metode.

Dodavanje novih vrijednosti u HashSet

U primjeru u nastavku dodat ćemo vrijednost u hash skup pomoću funkcije add(). Funkcija add() dodaje vrijednost jednu po jednu. Pogledajmo sljedeći kod.

Primjer -

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

Izlaz:

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

Uklanjanje vrijednosti u HashSet-u

Možemo ukloniti postojeću vrijednost pomoću funkcije remove(). Razumimo sljedeći kod.

Primjer -

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

Izlaz:

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

Provjera postoje li vrijednosti u HashSet-u

U ovom primjeru ćemo pokazati kako možemo provjeriti postoji li određena vrijednost ili ne koristi sadrži () funkcija. Razumimo sljedeći kod.

Primjer -

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

Izlaz:

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

Algoritam za HashSet u Pythonu

U prvom koraku definiramo jednu podatkovnu strukturu koja se zove HashList. Zatim inicijaliziramo praznu listu kao novi_popis . Zatim definiramo funkciju update() u kojoj će found pohranjivati ​​Booleovu vrijednost False. Sada koristimo for petlju za svaki indeks I i K. ako je ključ isti kao 'k', tada nova_popis[i]=k a pronađena vrijednost postavljena na True. Vrijednost će biti umetnuta na zadnjem mjestu popisa ako nije pronađena vrijednost.

Sljedeći korak je definiranje funkcije get(), koju ćemo koristiti za petlju, i ako je vrijednost k ista kao ključ, izlaz će biti True; inače, False. Ako je ključ isti kao 'k', izbrišite vrijednost s popisa novi_popis. Isti postupak primijenit će se u funkciji remove().

Sada ćemo kreirati glavnu klasu HashSet. Ova klasa će deklarirati funkciju inicijalizacije gdje je vrijednost key_space = 2096. Hash_table će imati popis objekata tipa new_list veličine razmak_ključa . Zatim ćemo kreirati add() funkciju u kojoj hash_key = tip%key_space i ažurirajte ključ hash_table[hash_key]. Nakon toga ćemo nazvati ukloniti funkciju , u kojem hash_key = ključ % key_space, i izbrišite ključ hash_table[hash_key]. Nakon toga ćemo nazvati sadrži funkciju , u kojem

hash_key = ključ % key_space, i dobiti ključ hash_table[hash_key].

Pogledajmo postupni algoritam implementacije.

Algoritam -

  • Stvorite strukturu podataka pod nazivom HashSet, inicijalizirajte je kao ispod
  • nova_popis = []
  • Definirajte funkciju update(). Ovo će uzeti ključ
  • pronađeno := Netočno
  • za svaki indeks i i ključ k u new_list, do
    • ako je ključ isti kao k, tada
      • new_list[i]:= ključ
      • pronađeno:= Istina
      • izaći iz petlje
    • ako se utvrdi lažno, onda
      • umetni ključ na kraj new_list
  • Definirajte funkciju get(). Ovo će uzeti ključ
    • za svaki k u new_list, do
      • ako je k isto što i ključ, tada
        • vratiti True
      • vrati False
  • Definirajte funkciju remove(). Ovo će uzeti ključ
    • za svaki indeks i i ključ k u new_list, do
      • ako je ključ isti kao k, tada
        • izbriši novi_list[i]
  • Sada izradite prilagođeni hashSet. Bit će nekoliko sljedećih metoda
  • Inicijalizirajte ovo na sljedeći način -
  • razmak_ključa := 2096
  • hash_table:= popis objekata tipa spremnika veličine key_space
  • Definirajte funkciju add(). Ovo će uzeti ključ
    • hash_key:= ključ mod key_space
    • poziv update(key) hash_table[hash_key]
  • Definirajte funkciju remove(). Ovo će uzeti ključ
    • hash_key:= keymodkey_space
    • brisanje ključa iz hash_table[hash_key]
  • Definirajte funkciju contains(). Ovo će uzeti ključ
    • hash_key:= keymodkey_space
    • return get(key) of hash_table[hash_key]

Implementacija HashSeta u Pythonu

Ovdje ćemo implementirati gornji algoritam i kreirati Python program. Definirat ćemo dvije klase: HashSet i CreateHashset. Pogledajmo donji kod.

Šifra -

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

Izlaz:

vlc preuzimanje youtube
 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] 

Obrazloženje:

    klasa verifyvalues:Ova klasa bavi se nizom vrijednosti (new_list) i daje tehnike za osvježavanje, provjeru prisutnosti i uklanjanje vrijednosti.__init__ tehnika:Uvodi prazan pregled za svaku prigodu.tehnika ažuriranja:Ažurira trenutnu vrijednost ili dodaje drugu vrijednost na pregled.dobiti tehniku:Čekovi u slučaju da vrijednost postoji u rundownu.eliminirati strategiju:Eliminira unaprijed definirano poštovanje iz niza.HashSet klasa:Ovo je primarno izvršenje HashSeta.__init__ tehnika:Predstavlja HashSet s unaprijed definiranim prostorom ključeva i stvara klaster (hash_table) primjera verifyvalues ​​za brigu o utjecajima.tehnika hash_values:Razrađuje hash ključ za dati info ključ koristeći modulo aktivnost.dodaj strategiju:Dodaje ključ u HashSet osvježavanjem usporednog objekta verifyvalues ​​u hash_table.eliminirati tehniku:Eliminira ključ iz HashSeta.sadrži strategiju:Provjerava postoji li vital u HashSet-u.pokazati tehniku:Ispisuje glavnu komponentu svakog popisa verifyvalues ​​koji nije void, nudeći prikaz kruženja informacija.Primjer upotrebe:Kod pokazuje korištenje HashSet-a dodavanjem ključeva (10, 6, 5), provjerom prisutnosti i prikazivanjem nekih podataka o unutarnjem stanju.