Estructuras de datos · #7 de 11

Conjuntos

Unicidad + pertenencia rápida

Por qué importa

Los conjuntos eliminan duplicados y ofrecen comprobaciones de pertenencia O(1) en promedio: perfectos para muchos problemas de estructuras de datos y algoritmos.

La idea

Un conjunto es una bolsa de elementos únicos y hashables, sin ningún orden. Operaciones de la escuela: | unión, & intersección, - diferencia, ^ diferencia simétrica.

Pruébalo

Eliminación de duplicados y pertenencia:

nums = [1, 1, 2, 3, 3, 5, 5, 7]
unique = set(nums)
print(unique, "size:", len(unique))

print(5 in unique)   # O(1) average
print(9 in unique)
not loaded

Álgebra de conjuntos:

a = {"red", "green", "blue", "yellow"}
b = {"green", "blue", "purple"}
print("union        ", a | b)
print("intersection ", a & b)
print("a only       ", a - b)
print("xor          ", a ^ b)
not loaded

Un problema clásico de entrevista: el primer carácter que se repite:

def first_repeat(s):
  seen = set()
  for ch in s:
      if ch in seen:
          return ch
      seen.add(ch)
  return None

for w in ["abcdea", "abcde", "swiss"]:
  print(w, "->", first_repeat(w))
not loaded

Métodos principales

| Método | Qué hace | Ejemplo | | --- | --- | --- | | add(x) | agregar uno | st.add(3) | | update(iter) | agregar varios | st.update([4,5]) | | remove(x) | quitar; error si no existe | st.remove(2) | | discard(x) | quitar de forma segura | st.discard(2) | | pop() | quitar uno arbitrario | st.pop() | | clear() | quitar todo | st.clear() | | copy() | copia superficial | st.copy() |

Comprobaciones de subconjunto / superconjunto

A <= B   # subset
A <  B   # proper subset
A >= B   # superset

Comprensión de conjuntos y frozenset

squares = {x*x for x in range(5)}   # set comprehension
fs = frozenset([1, 2, 3])           # immutable, hashable set

Verificación rápida

Mini ejercicios

Buenas y malas prácticas

Profundizando — vistazo de complejidad
  • Pertenencia: ~O(1) en promedio
  • Álgebra de conjuntos (|, &, -, ^): O(n)

Errores comunes

Conclusiones clave