logo

Hogyan tervezzünk Hashset-et Pythonban?

Mint tudjuk, a HashSet egy híres osztály a Java nyelven. A HashSet az értékek tárolására szolgál egy hash tábla segítségével. Ebben az oktatóanyagban a Python HashSettel foglalkozunk. Megtanuljuk azt is, hogyan tervezhetjük meg a HashSet-et Pythonban.

A HashSet a programozás alapvető adatszerkezete, amely gyakran megtalálható olyan nyelvekben, mint a Java. A Java Collections Framework-hez tartozik, és a beállított felület megvalósításaként szolgál. A HashSet megkülönböztető jellemzője, hogy képes olyan elemeket tárolni, amelyek megkönnyítik az egyes elemek létezésének hatékony ellenőrzését, és biztosítják a halmazon belüli egyediséget. Az olyan struktúrákkal ellentétben, mint a listák, a HashSet nem tart fenn meghatározott sorrendet az elemei között.

A HashSet egyik legfontosabb jellemzője az egyediség garanciája; nem engedélyezi az elemek duplikálását. Az olyan műveletek, mint az elemek hozzáadása, eltávolítása és meglétének ellenőrzése, általában állandó idejű átlagos teljesítményt nyújtanak, így hatékony választás az ilyen feladatokhoz. Fontos azonban megjegyezni, hogy a HashSet elemeinek sorrendje nem garantált.

Főbb jellemzők:

Egyediség: A HashSet nem engedélyezi az elemek ismétlődését. Az equals() metódus segítségével ellenőrzi a duplikációkat, biztosítva, hogy a halmaz minden eleme egyedi legyen.

egy karakterlánc felosztása c++-ban

Nincs rendelés: A HashSet elemei nem tárolódnak semmilyen meghatározott sorrendben. Ha fenn kell tartania az elemek sorrendjét, fontolóra veheti a LinkedHashSet használatát, amely fenntartja a beillesztési sorrendet.

Mögöttes adatstruktúra: Belsőleg a HashSet hash táblát használ az elemek tárolására. Ez lehetővé teszi az állandó idejű átlagos bonyolultságot az alapvető műveleteknél, mint például a hozzáadás, az eltávolítás és a tartalom.

Null elemek: A HashSet egy null elemet engedélyez. Ha ismétlődő null elemet kísérel meg hozzáadni, az lecseréli a meglévőt.

Bevezetés

Tervezhetjük a HashSet-et hash táblakönyvtárak használata nélkül. Az alábbiakban több különböző funkció található -

add (x) - Az add(x) metódus főleg x érték beszúrására szolgál a HashSetbe.

tartalmaz (x) - A include(x) metódus elsősorban annak ellenőrzésére szolgál, hogy van-e x érték a HashSetben vagy sem.

távolítsa el (x) - A remove(x) metódus főleg x törlésére szolgál a HashSetből. Ha a HashSetnek nincs értéke, akkor semmit sem fog csinálni.

Nézzük meg ezeket a módszereket az alábbi példán keresztül.

bájtok a python karakterlánchoz

Először inicializálja a HashSet-et, és hívja meg az add(1) függvényt. Ez hozzáad 1-et a hash készlethez. Hívja az add(3) hívást, amely hozzáad 3-at, majd a hívás tartalmazza (1). Ellenőrzi, hogy az 1 szerepel-e a hash készletben vagy sem. Most meghívjuk a include(2), add(2), include(2), remove(2), include(2) parancsokat.

A kimenet úgy kerül visszaadásra, hogy az igaz, ha 1 van jelen, hamis ha 2 nincs jelen, igaz 2 esetén van, hamis ha 2 nincs jelen, ill.

A HashSet alapvető műveletei Pythonban

Néhány alapvető műveletet elvégezhetünk a HashSetben a következő módszerekkel. Értsük meg ezeket a módszereket.

Új értékek hozzáadása a HashSetben

Az alábbi példában hozzáadjuk az értéket a hash halmazhoz az add() függvény segítségével. Az add() függvény egyesével adja hozzá az értéket. Lássuk a következő kódot.

Példa -

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

Kimenet:

: java-ban
 Adding value: 2 Adding value: 7 Adding value: 6 

Értékek eltávolítása a HashSetben

A meglévő értéket a remove() függvénnyel távolíthatjuk el. Értsük meg a következő kódot.

Példa -

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

Kimenet:

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

Annak ellenőrzése, hogy vannak-e értékek a HashSetben

Ebben a példában bemutatjuk, hogyan ellenőrizhetjük, hogy egy adott érték létezik-e, vagy nem használja a tartalmazza () funkció. Értsük meg a következő kódot.

Példa -

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

Kimenet:

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

Algoritmus a HashSethez Pythonban

Első lépésben meghatározunk egy adatstruktúrát, a HashList nevet. Ezután inicializálunk egy üres listát mint egy new_list . Ezután meghatározunk egy update() függvényt, amelyben a found egy False logikai értéket fog tárolni. Most minden I és K indexhez for ciklust használunk. Ha a kulcs ugyanaz, mint a 'k', akkor új_lista[i]=k és talált értéket igazra állítva. Ha nem talál értéket, az érték a lista utolsó részébe kerül be.

A következő lépés a get() függvény definiálása, amit a ciklushoz fogunk használni, és ha k értéke megegyezik a kulccsal, a kimenet True lesz; egyébként hamis. Ha a kulcs ugyanaz, mint a „k”, törölje az értéket a listából new_list. Ugyanezt a folyamatot alkalmazzuk a remove() függvényben is.

Most létrehozzuk a HashSet főosztályt. Ez az osztály deklarálja az inicializálási függvényt, ahol a key_space értéke = 2096. A hash_table tartalmazni fog egy listát a new_list típusú objektumok méretéről key_space . Ezután létrehozzuk az add() függvényt, amelyben hash_key = kulcs%key_space és frissítse a hash_table[hash_key] kulcsát. Ezt követően felhívjuk a eltávolítás funkció , amelyben hash_key = kulcs % kulcsszóköz, és törölje a hash_table[hash_key] kulcsát. Ezt követően felhívjuk a funkciót tartalmaz , amiben

hash_key = kulcs % key_space, és kapja meg a hash_table[hash_key] kulcsát.

Lássuk a lépésenkénti megvalósítási algoritmust.

Algoritmus -

  • Hozzon létre HashSet nevű adatstruktúrát, és inicializálja az alábbiak szerint
  • new_list = []
  • Határozzon meg egy függvényfrissítést (). Ehhez kulcsra lesz szükség
  • talált := Hamis
  • az új_listában minden i indexhez és k kulcshoz do
    • ha a kulcs ugyanaz, mint a k, akkor
      • new_list[i]:= kulcs
      • találtam:= Igaz
      • kijön a hurokból
    • ha hamisnak találják, akkor
      • beszúrás kulcs a new_list végén
  • Határozzon meg egy get() függvényt. Ehhez kulcsra lesz szükség
    • az új_listában minden egyes k-hez do
      • ha k ugyanaz, mint a kulcs, akkor
        • vissza True
      • return False
  • Határozzon meg egy remove() függvényt. Ehhez kulcsra lesz szükség
    • az új_listában minden i indexhez és k kulcshoz do
      • ha a kulcs ugyanaz, mint a k, akkor
        • új_lista[i] törlése
  • Most hozzon létre egyéni hashSet-et. Az alábbiak szerint néhány módszer lesz
  • Inicializálja ezt a következőképpen -
  • key_space := 2096
  • hash_table:= a key_space méretű vödör típusú objektumok listája
  • Adjon meg egy add() függvényt. Ehhez kulcsra lesz szükség
    • hash_key:= kulcs mod key_space
    • a hash_table[hash_key] update(key) hívása
  • Határozzon meg egy remove() függvényt. Ehhez kulcsra lesz szükség
    • hash_key:= keymodkey_space
    • törlés kulcsa a hash_table[hash_key]
  • Határozzon meg egy függvényt, amely tartalmazza(). Ehhez kulcsra lesz szükség
    • hash_key:= keymodkey_space
    • return get(key) of hash_table[hash_key]

A HashSet megvalósítása Pythonban

Itt megvalósítjuk a fenti algoritmust, és létrehozzuk a Python programot. Meghatározzuk a két osztályt: HashSet és CreateHashset. Lássuk az alábbi kódot.

Kód -

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

Kimenet:

 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] 

Magyarázat:

    verifyvalues ​​osztály:Ez az osztály az értékek lebontásával foglalkozik (new_list), és technikákat ad a frissítéshez, a jelenlét ellenőrzéséhez és az értékek eltávolításához.__init__ technika:Minden alkalomra bemutat egy üres rovatot.Frissítési technika:Frissít egy aktuális értéket, vagy egy másik értéket ad hozzá az összefoglalóhoz.szerezd be a technikát:Ellenőrzi, hogy van-e érték a lefutásban.a stratégia megszüntetése:Kiküszöböli az előre meghatározott megbecsülést a lerohanásból.HashSet osztály:Ez a HashSet elsődleges végrehajtása.__init__ technika:Bevezeti a HashSet-et egy előre meghatározott kulcstérrel, és egy fürtöt (hash_table) készít a verifyvalues ​​példákból a hatások gondozása érdekében.hash_values ​​technika:Kidolgozza egy adott információs kulcs hash kulcsát a modulo tevékenység felhasználásával.stratégia hozzáadása:Kulcsot ad a HashSet-hez az összehasonlító verifyvalues ​​objektum frissítésével a hash_table-ban.a technika kiküszöbölése:Eltávolít egy kulcsot a HashSet-ből.stratégiát tartalmaz:Ellenőrzi, hogy létezik-e létfontosságú elem a HashSetben.bemutató technika:Kinyomtatja az egyes nem-üres ellenőrzőérték-lista fő összetevőit, bemutatva az információáramlást.Használati példa:A kód a HashSet használatát mutatja kulcsok (10, 6, 5) hozzáadásával, a jelenlét ellenőrzésével és néhány adat megjelenítésével a belső állapotról.