0Pricing
Competitive Programming Academy · Lección

Hash polinómico de cadenas

Compare subcadenas en tiempo constante

Hash polinómico de cadenas es una lección gratuita de Competitive Programming Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Competitive Programming Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Competitive Programming Academy incluye 4 lecciones en total.

Comparar subcadenas rápidamente

A menudo necesita comprobar si dos subcadenas son iguales. Compararlas carácter por carácter es lento, así que convertimos cada cadena en un número. 🔢

La idea del hashing

Un hash asigna una cadena a un único entero. Si dos cadenas son diferentes, sus hashes casi siempre también serán diferentes.

Tratar las cadenas como polinomios

Leemos cada carácter como un dígito en base p. Esta visión polinómica convierte la cadena en una gran suma ponderada.

h = ord(s[0]) + ord(s[1]) * p + ord(s[2]) * p * p

Elegir una base y un módulo

Elija una base prima, como 31, y un módulo primo grande. El módulo mantiene pequeños los números y evita el desbordamiento.

BASE = 31
MOD = 10**9 + 9

Calcular un hash

Recorra la cadena e incorpore cada carácter con la regla de Horner, tomando el módulo en cada paso.

h = 0
for c in s:
    h = (h * BASE + ord(c)) % MOD

Hashes de prefijo

Almacene un hash de prefijo para cada posición. Después, el hash de cualquier subcadena se obtiene mediante una resta rápida.

pre[i + 1] = (pre[i] * BASE + ord(s[i])) % MOD

Potencias de la base

También debe precalcular las potencias de la base. Estas alinean los dos prefijos al realizar la resta.

pw[i] = (pw[i - 1] * BASE) % MOD

Hash de una subcadena en O(1)

El hash de s[l..r] se obtiene restando dos hashes de prefijo y escalando mediante una potencia. Tiempo constante por consulta.

def sub(l, r):
    return (pre[r] - pre[l] * pw[r - l]) % MOD

Vigile las colisiones

Dos cadenas diferentes pueden compartir un hash; eso es una colisión. Es poco frecuente, pero en los concursos a veces se diseñan entradas para provocarla.

Hashing doble para mayor seguridad

Use dos módulos independientes y compare ambos hashes. Es prácticamente imposible que se produzca una colisión en los dos a la vez.

Dónde destaca el hashing

El hashing permite comparar subcadenas, encontrar repeticiones y buscar patrones. Es una herramienta muy versátil.

Comprobación rápida

Elija la herramienta adecuada para comparar muchas subcadenas de forma segura.

Repaso: ventajas del hashing

Ahora puede convertir cadenas en hashes polinómicos, consultar cualquier subcadena en O(1) y protegerse contra las colisiones. 🚀

Preguntas frecuentes

¿La lección «Hash polinómico de cadenas» es gratis?

Sí — el texto completo de «Hash polinómico de cadenas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Competitive Programming Academy, actualiza a CoddyKit PRO. El curso de Competitive Programming Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Hash polinómico de cadenas»?

Compare subcadenas en tiempo constante Practicas Competitive Programming Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Competitive Programming Academy?

No se requiere experiencia previa. Competitive Programming Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Hash polinómico de cadenas»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Competitive Programming Academy?

Sí. Cada lección de Competitive Programming Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Función de prefijo de KMP
  2. Hash polinómico de cadenas
  3. Función Z para buscar patrones
  4. Tries para búsquedas por prefijo
← Volver a Competitive Programming Academy