Као што знамо да је ХасхСет позната класа у Јави. ХасхСет се користи за чување вредности помоћу хеш табеле. У овом водичу ћемо покрити ХасхСет у Питхон-у. Такође ћемо научити како можемо дизајнирати ХасхСет у Питхон-у.
ХасхСет је основна структура података у програмирању, која се обично налази у језицима као што је Јава. Припада Јава Цоллецтионс Фрамеворк-у и служи као имплементација постављеног интерфејса. Посебност ХасхСета је његова способност да складишти елементе на начин који олакшава ефикасну проверу постојања специфичних елемената и обезбеђује јединственост унутар скупа. За разлику од структура као што су листе, ХасхСет не одржава никакав специфичан редослед међу својим елементима.
Једна кључна карактеристика ХасхСета је његова гаранција јединствености; не дозвољава дуплирање елемената. Операције као што су додавање, уклањање и провера присуства елемената обично имају просечне перформансе у константном времену, што га чини ефикасним избором за такве задатке. Међутим, битно је напоменути да редослед елемената у ХасхСет-у није загарантован.
Кључне карактеристике:
Јединственост: ХасхСет не дозвољава дупле елементе. Користи методу екуалс() за проверу дупликата, обезбеђујући да је сваки елемент у скупу јединствен.
Без наруџбине: Елементи у ХасхСет-у се не чувају у неком одређеном редоследу. Ако треба да задржите редослед елемената, размислите о коришћењу ЛинкедХасхСет-а, који одржава редослед уметања.
Основна структура података: Интерно, ХасхСет користи хеш табелу за складиштење елемената. Ово омогућава просечну сложеност у константном времену за основне операције као што су додавање, уклањање и садржи.
Нулл елементи: ХасхСет дозвољава један нулл елемент. Ако покушате да додате дупликат нулти елемент, он ће заменити постојећи.
Увод
Можемо дизајнирати ХасхСет без коришћења икаквих библиотека хеш табела. Испод је више различитих функција -
додај(к) - Метод адд(к) се углавном користи за уметање вредности к у ХасхСет.
садржи(к) - Метод цонтаинс(к) се углавном користи за проверу да ли је вредност к присутна у ХасхСет-у или не.
уклони (к) - Метод ремове(к) се углавном користи за брисање к из ХасхСет-а. Ако ХасхСет нема никакву вредност, неће учинити ништа.
Хајде да разумемо ове методе на примеру у наставку.
Прво, иницијализујте ХасхСет и позовите адд(1) функцију. То ће додати 1 у хеш скуп. Позовите адд(3), који ће додати 3, а затим позвати садржи(1). Провериће да ли је 1 присутан или не у хеш скупу. Сада позивамо цонтаинс(2), адд(2), цонтаинс(2), ремове(2), цонтаинс(2).
Излаз ће бити враћен као тачно за 1 је присутно, нетачно за 2 није присутно, тачно за 2 је присутно, нетачно за 2 није присутно, респективно.
Основне операције ХасхСет-а у Питхон-у
Неке основне операције у ХасхСет-у можемо извршити помоћу следећих метода. Хајде да разумемо ове методе.
Додавање нових вредности у ХасхСет
У примеру испод, додаћемо вредност у хеш скуп помоћу функције адд(). Функција адд() додаје вредност једну по једну. Хајде да видимо следећи код.
Пример -
from hs import HashSet obj = HashSet() obj.add(2) obj.add(7) obj.add(6)
Излаз:
закључајте Андроид апликацију
Adding value: 2 Adding value: 7 Adding value: 6
Уклањање вредности у ХасхСет-у
Можемо уклонити постојећу вредност помоћу функције ремове(). Хајде да разумемо следећи код.
Пример -
from hs import HashSet obj = HashSet() obj.add(2) obj.add(7) obj.add(6) obj.remove(7) obj.remove(6)
Излаз:
Adding value: 2 Adding value: 7 Adding value: 6 Removed value: 7 Removed value: 6
Провера да ли постоје вредности у ХасхСет-у
У овом примеру ћемо показати како можемо да проверимо да ли одређена вредност постоји или не користи садржи() функција. Хајде да разумемо следећи код.
Пример -
from hs import HashSet obj = HashSet() obj.add(2) obj.add(7) obj.add(6) obj.contains(2)
Излаз:
Adding value: 2 Adding value: 7 Adding value: 6 It contains: 2
Алгоритам за ХасхСет у Питхон-у
У првом кораку дефинишемо једну структуру података под називом ХасхЛист. Затим иницијализујемо празну листу као а нев_лист . Затим дефинишемо функцију упдате() у којој ће пронађена бити ускладиштена логичка вредност Фалсе. Сада користимо фор петљу за сваки индекс И и К. ако је кључ исти као 'к', онда нова_листа[и]=к и пронађена вредност постављена на Тачно. Вредност ће бити уметнута на последњу листу ако није пронађена вредност.
Следећи корак је дефинисање функције гет() коју ћемо користити за петљу, а ако је вредност к иста као и кључ, излаз ће бити Тачан; иначе, Нетачно. Ако је кључ исти као 'к', обришите вредност са листе нова_лист. Исти процес ће бити примењен у функцији ремове().
Сада ћемо креирати главну класу ХасхСет. Ова класа ће декларисати функцију иницијализације где је вредност кеи_спаце = 2096. Хасх_табле ће имати листу објеката типа нев_лист величине кеи_спаце . Затим ћемо креирати адд() функцију, у којој хасх_кеи = кеи%кеи_спаце и ажурирајте кључ хасх_табле[хасх_кеи]. Након тога, позваћемо уклонити функцију , у којој хасх_кеи = кеи % кеи_спаце, и избришите кључ хасх_табле[хасх_кеи]. Након тога, позваћемо садржи функцију , у којима
хасх_кеи = кеи % кеи_спаце, и добијете кључ хасх_табле[хасх_кеи].
Погледајмо постепени алгоритам имплементације.
алгоритам -
- Креирајте структуру података под називом ХасхСет, иницијализирајте је као испод
- нова_лист = []
- Дефинишите функцију упдате(). Ово ће узети кључ
- пронађено := Нетачно
- за сваки индекс и и кључ к у новој_листи, урадите
- ако је кључ исти као к, онда
- нова_листа[и]:= кључ
- пронађено:= Тачно
- изаћи из петље
- ако се нађе нетачним, онда
- уметни кључ на крају нове_листе
- Дефинишите функцију гет(). Ово ће узети кључ
- за сваки к у новој_листи, уради
- ако је к исто што и кључ, онда
- ретурн Тачно
- ретурн Фалсе
- Дефинишите функцију ремове(). Ово ће узети кључ
- за сваки индекс и и кључ к у новој_листи, урадите
- ако је кључ исти као к, онда
- избриши нову_листу[и]
- Сада креирајте прилагођени хасхСет. Биће неколико метода на следећи начин
- Иницијализујте ово на следећи начин -
- кључ_размак := 2096
- хасх_табле:= листа објеката типа буцкет величине кеи_спаце
- Дефинишите функцију адд(). Ово ће узети кључ
- хасх_кеи:= мод кључа кеи_спаце
- позови ажурирање(кључ) хасх_табле[хасх_кеи]
- Дефинишите функцију ремове(). Ово ће узети кључ
- хасх_кеи:= кеимодкеи_спаце
- избриши кључ из хасх_табле[хасх_кеи]
- Дефинишите функцију садржи(). Ово ће узети кључ
- хасх_кеи:= кеимодкеи_спаце
- врати гет(кључ) од хасх_табле[хасх_кеи]
Имплементација ХасхСет-а у Питхон-у
Овде ћемо имплементирати горњи алгоритам и креирати Питхон програм. Дефинисаћемо две класе: ХасхСет и ЦреатеХасхсет. Хајде да видимо доњи код.
код -
# 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))
Излаз:
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]
Објашњење: