logo

¿Cómo diseñar un Hashset en Python?

Como sabemos, HashSet es una clase famosa en Java. HashSet se utiliza para almacenar los valores mediante una tabla hash. En este tutorial, cubriremos HashSet en Python. También aprenderemos cómo podemos diseñar HashSet en Python.

archivo de cambio de Linux

Un HashSet es una estructura de datos fundamental en programación, que se encuentra comúnmente en lenguajes como Java. Pertenece al marco de colecciones de Java y sirve como implementación de la interfaz establecida. La característica distintiva de un HashSet es su capacidad para almacenar elementos de una manera que facilite la verificación eficiente de la existencia de elementos específicos y garantice la unicidad dentro del conjunto. A diferencia de estructuras como las listas, un HashSet no mantiene ningún orden específico entre sus elementos.

Una característica clave de un HashSet es su garantía de unicidad; no permite elementos duplicados. Operaciones como agregar, eliminar y verificar la presencia de elementos generalmente tienen un rendimiento promedio en tiempo constante, lo que las convierte en una opción eficiente para tales tareas. Sin embargo, es esencial tener en cuenta que el orden de los elementos en un HashSet no está garantizado.

Caracteristicas claves:

Unicidad: Un HashSet no permite elementos duplicados. Utiliza el método equals() para comprobar si hay duplicados, asegurando que cada elemento del conjunto sea único.

No Order: Los elementos de un HashSet no se almacenan en ningún orden particular. Si necesita mantener el orden de los elementos, podría considerar utilizar un LinkedHashSet, que mantiene el orden de inserción.

Estructura de datos subyacente: Internamente, un HashSet utiliza una tabla hash para almacenar elementos. Esto permite una complejidad promedio en tiempo constante para operaciones básicas como agregar, eliminar y contener.

Elementos nulos: Un HashSet permite un elemento nulo. Si intenta agregar un elemento nulo duplicado, reemplazará el existente.

Introducción

Podemos diseñar HashSet sin utilizar ninguna biblioteca de tablas hash. A continuación se muestran las múltiples funciones diferentes:

agregar(x) - El método add(x) se utiliza principalmente para insertar un valor x en el HashSet.

contiene(x) - El método contiene(x) se utiliza principalmente para comprobar si un valor x está presente en el HashSet o no.

eliminar(x) - El método remove(x) se utiliza principalmente para eliminar x del HashSet. Si HashSet no tiene ningún valor, no hará nada.

Entendamos estos métodos con el siguiente ejemplo.

Primero, inicialice HashSet y llame a la función add(1). Agregará 1 al conjunto de hash. Llame a add(3), que sumará 3, luego llame a contains(1). Verificará si 1 está presente o no en el conjunto hash. Ahora llamamos contiene(2), agrega(2), contiene(2), elimina(2), contiene(2).

La salida se devolverá como verdadero si 1 está presente, falso si 2 no está presente, verdadero si 2 está presente y falso si 2 no está presente, respectivamente.

Operaciones básicas de HashSet en Python

Podemos realizar algunas operaciones básicas en HashSet utilizando los siguientes métodos. Entendamos estos métodos.

Agregar nuevos valores en HashSet

En el siguiente ejemplo, agregaremos el valor en el conjunto hash usando la función add(). La función add() agrega el valor uno a la vez. Veamos el siguiente código.

Ejemplo -

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

Producción:

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

Eliminar valores en HashSet

Podemos eliminar el valor existente usando la función remove(). Entendamos el siguiente código.

Ejemplo -

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

Producción:

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

Comprobando si existen valores en HashSet

En este ejemplo, demostraremos cómo podemos verificar si un valor particular existe o no utiliza el contiene() función. Entendamos el siguiente código.

Ejemplo -

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

Producción:

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

Algoritmo para HashSet en Python

En el primer paso, definimos una estructura de datos llamada HashList. Luego, inicializamos una lista vacía como una nueva_lista . Luego, definimos una función update() en la que found almacenará un valor booleano Falso. Ahora, usamos el bucle for para cada índice I y K. Si la clave es la misma que 'k', entonces nueva_lista[i]=k y el valor encontrado establecido en Verdadero. El valor se insertará al final de la lista si no se encuentra ningún valor.

El siguiente paso es definir la función get(), que usaremos para el bucle, y si el valor de k es el mismo que el de la clave, la salida será Verdadera; en caso contrario, Falso. Si la clave es la misma que 'k', elimine el valor de la lista lista nueva. El mismo proceso se aplicará en la función remove().

Ahora crearemos la clase principal HashSet. Esta clase declarará la función de inicialización donde el valor key_space = 2096. Hash_table tendrá una lista de objetos de tipo new_list de tamaño espacio_clave . Luego, crearemos la función add(), en la que hash_key = clave%key_space y actualice la clave de hash_table[hash_key]. Después de eso, llamaremos al eliminar función , en el cual hash_key = key % key_space, y elimina la clave de hash_table[hash_key]. Después de eso, llamaremos al contiene función , en el cual

hash_key = key % key_space y obtiene la clave de hash_table[hash_key].

Veamos el algoritmo de implementación paso a paso.

Algoritmo -

  • Cree una estructura de datos llamada HashSet, inicialícela como se muestra a continuación
  • nueva_lista = []
  • Defina una función de actualización(). Esto tomará clave
  • encontrado := Falso
  • para cada índice i y clave k en new_list, haga
    • si la clave es la misma que k, entonces
      • nueva_lista[i]:= clave
      • encontrado: = Verdadero
      • salir del bucle
    • si se encuentra falso, entonces
      • insertar clave al final de new_list
  • Defina una función get() . Esto tomará clave
    • para cada k en new_list, haz
      • si k es igual que la clave, entonces
        • devolver verdadero
      • falso retorno
  • Defina una función eliminar(). Esto tomará clave
    • para cada índice i y clave k en new_list, haga
      • si la clave es la misma que k, entonces
        • eliminar nueva_lista[i]
  • Ahora cree un hashSet personalizado. Habrá algunos métodos de la siguiente manera.
  • Inicialice esto de la siguiente manera:
  • espacio_clave: = 2096
  • hash_table:= una lista de objetos de tipo depósito de tamaño key_space
  • Defina una función agregar(). Esto tomará clave
    • hash_key:= clave mod key_space
    • llamar a la actualización (clave) de hash_table[hash_key]
  • Defina una función eliminar(). Esto tomará clave
    • hash_key:= clavemodkey_space
    • eliminar clave de hash_table[hash_key]
  • Definir una función contiene(). Esto tomará clave
    • hash_key:= clavemodkey_space
    • devolver obtener (clave) de hash_table [hash_key]

Implementación de HashSet en Python

Aquí implementaremos el algoritmo anterior y crearemos un programa Python. Definiremos las dos clases: HashSet y CreateHashset. Veamos el siguiente código.

Código -

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

Producción:

 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] 

Explicación:

    clase de valores de verificación:Esta clase trata con un resumen de valores (new_list) y brinda técnicas para actualizar, verificar la presencia y eliminar valores.Técnica __init__:Presenta un resumen vacante para cada ocasión.técnica de actualización:Actualiza un valor existente o agrega otro valor a la lista.obtener técnica:Comprueba si existe un valor en la lista.eliminar estrategia:Elimina una estimación predefinida del resumen.Clase HashSet:Esta es la ejecución principal de HashSet.Técnica __init__:Presenta HashSet con un espacio de claves predefinido y crea un grupo (hash_table) de ejemplos de valores de verificación para ocuparse de los impactos.técnica hash_values:Calcula la clave hash para una clave de información determinada utilizando la actividad del módulo.agregar estrategia:Agrega una clave al HashSet actualizando el objeto de comparación de valores de verificación en hash_table.eliminar técnica:Elimina una clave del HashSet.contiene estrategia:Comprueba si existe un elemento vital en HashSet.técnica de espectáculo:Imprime el componente principal de cada lista de valores de verificación no nulos, ofreciendo una descripción de la circulación de la información.Ejemplo de uso:El código muestra el uso de HashSet agregando claves (10, 6, 5), verificando su presencia y mostrando algunos datos sobre el estado interno.