¿Cómo funciona el algoritmo what3words?

La primera parte es aburrida, y solo se hace una vez: se toma una lista de palabras para inglés (o mejor aún, una lista de frecuencia de palabras), se filtran las palabrotas conocidas y demás, luego se paga a algunas personas para que revisen las 50 mil palabras principales a mano. Al final, tiene una lista de 40k palabras “políticamente correctas”. (En algún momento, es posible que también desee descartar algunos valores atípicos aleatorios, como palabras donde la misma ortografía tiene múltiples pronunciaciones diferentes).

Ahora viene la parte algorítmicamente interesante.

Que tenemos:

  • 57 billones de cuadrados de 3 por 3 metros de tierra
  • 64 billones de trillizos de palabras (un poco más, esto es bueno porque nos da libertad)

Lo que nosotros queremos:

  • Necesitamos poder asignar cada cuadrado (latitud + longitud) a sus tres palabras de manera eficiente.
  • Necesitamos poder asignar un triplete de palabras (válido) a un cuadrado de manera eficiente.
  • Queremos asegurarnos de que no haya dos cuadrados cercanos entre sí que tengan nombres cercanos.

Los primeros dos elementos serían fáciles de hacer: simplemente numere los cuadrados y las palabras de manera sistemática. Entonces, el cuadrado 0 será triplete (palabra 0, palabra 0, palabra 0), el cuadrado 1 será (palabra 0, palabra 0, palabra 1), …, el cuadrado 40007 será (palabra 0, palabra 1, palabra 7), y así. Esto facilitaría la conversión entre las dos representaciones.

De acuerdo, pero ¿cómo podemos asegurarnos de que también tengamos la tercera propiedad sin perder las dos primeras? Puedo pensar en múltiples formas. Trataré de explicar un enfoque bastante simple en un caso unidimensional.

Imagine que tenemos una fila de celdas que tienen números rojos de 0 a [matemática] n-1 [/ matemática], en orden. Ahora queremos asignar un número azul a cada celda de tal manera que podamos convertir fácilmente entre números rojos y azules, y no hay dos números azules que tengan un valor similar que estén cerca uno del otro. ¿Como hacer eso? Por ejemplo, elija dos números primos [matemática] p [/ matemática] y [matemática] q [/ matemática] de manera que [matemática] p [/ matemática] sea ligeramente mayor que [matemática] n [/ matemática] y [matemática] q [/ math] es aproximadamente [math] \ sqrt {n} [/ math]. Luego, por ejemplo, asigne el número rojo [matemática] x [/ matemática] al número azul [matemática] ((xq) \ bmod p) [/ matemática]. Cada celda tiene un número azul, los números azules son todos diferentes, los números azules de celdas que están cerca uno del otro están lejos el uno del otro, y podemos convertir fácilmente no solo de rojo a azul sino también de azul a rojo.

Por supuesto, el caso en una esfera es más complicado que el caso en una línea, y hay muchos más detalles con los que jugar (por ejemplo, “suena similar” no es lo mismo que “se escribe con letras similares”), pero el La idea general seguirá siendo la misma. Las coordenadas GPS le dan (en un orden sistemático simple) números rojos de una pieza cuadrada de la Tierra, esos se pueden convertir en números azules que tienen la tercera propiedad deseada, y esos son (nuevamente, en un simple forma sistemática) mapeado a trillizos de palabras . (Y cada paso en este mapeo se puede hacer fácilmente en la otra dirección también).

Cada cuadrado [matemático] 3 \ veces 3 m [/ matemático] en la Tierra recibe 3 palabras aleatorias, en un orden específico. Las palabras están tomadas de un diccionario del idioma que eligió. Luego, las 3 palabras en el orden específico se asignan a las coordenadas del cuadrado. Ahora puedes acceder instantáneamente a cualquier cuadrado usando las tres palabras.

Fuente: DONG en YouTube (¿necesita un enlace?)