Cómo logró ejecutarse Unix Spell con 64 kB de RAM
¿Cómo se puede hacer caber un diccionario en 64 kB de RAM?
- Los ingenieros de Unix resolvieron el problema de hacer caber un diccionario de 250 kB en 64 kB de RAM usando estructuras de datos y técnicas de compresión.
- En la década de 1970, Douglas McIlroy se enfrentó a este problema al implementar el corrector ortográfico de Unix en AT&T.
- Aprovechó las características de los datos para desarrollar un algoritmo de compresión que se acercaba al límite teórico de compresión.
TL;DR
- El corrector ortográfico de Unix comenzó como un prototipo creado por Steve Johnson de AT&T en la década de 1970.
- McIlroy desarrolló un algoritmo de stemming basado en el lenguaje para reducir el diccionario a 25,000 palabras.
- Para búsquedas rápidas se usó un filtro de Bloom, con una implementación proporcionada por Dennis Ritchie.
- Cuando el diccionario creció a 30,000 palabras, el enfoque con filtro de Bloom se volvió ineficiente y se introdujo una técnica de compresión por hashing.
- Usando códigos hash de 27 bits para reducir la probabilidad de colisiones y el código de Golomb, se logró una compresión de 13.60 bits por palabra.
El origen del comando de ortografía de Unix
- Unix fue propuesto al departamento de patentes de AT&T como un sistema de procesamiento de texto, y se necesitaba un corrector ortográfico.
- La versión inicial fue escrita por Steve Johnson en 1975, pero su precisión era baja.
- Douglas McIlroy reescribió el proyecto para mejorar la precisión y el rendimiento.
Algoritmo de eliminación de prefijos
- McIlroy desarrolló un algoritmo que eliminaba prefijos y sufijos comunes de las palabras para consultar el diccionario.
- Este método no era 100% preciso, pero en ese momento se consideraba aceptable.
Búsqueda basada en filtros de Bloom
- El filtro de Bloom ahorraba memoria y permitía búsquedas rápidas.
- Se utilizó para cargar en 64 kB de RAM un diccionario de 25,000 palabras.
- El filtro de Bloom se ajustó para mantener una baja tasa de falsos positivos.
Técnica de hashing comprimido para consultar el diccionario
- Cuando el tamaño del diccionario aumentó a 30,000 palabras, hizo falta una estructura de datos más eficiente en memoria.
- McIlroy usó un método que ahorraba memoria almacenando las diferencias entre códigos hash.
- Comprimió las diferencias de hash usando el código de Golomb.
Conclusión
- El comando de ortografía de Unix es una historia de ingeniería fascinante nacida de las limitaciones de memoria del PDP-11.
- Ofreció una solución elegante que combinaba filtros de Bloom, teoría de la información, teoría de la probabilidad y algoritmos de compresión.
- Demuestra que, cuando hay restricciones de recursos, es posible resolver problemas con gran profundidad.
1 comentarios
Comentarios en Hacker News
El filtro de Bloom originalmente se llamaba "superimposed code scheme", y es un tipo específico de superimposed code
Es posible implementar un corrector ortográfico con memoria externa usando poca RAM
El ancho de banda de memoria y el del disco eran similares, y el trabajo podía hacerse en varias pasadas
Había correctores ortográficos por hardware para IBM PC en la década de 1980
Unix fue propuesto a AT&T como un sistema de procesamiento de texto, y necesitaba un corrector ortográfico
Un artículo de Byte de principios de la década de 1980 explicaba cómo hacer el corrector ortográfico de Unix
Puede haber errores tipográficos comunes que se escapen debido al hashing
A mediados de la década de 1980, se procesaban datos con 640KB de RAM y 64KB de heap y stack
Alrededor de 1983, Grammatik en CP/M corría con menos de 64k e incluía revisión gramatical y reglas de sistema experto
La primera versión de UNIX requería 24kB, de los cuales la mitad la ocupaba el kernel