Entendiendo Matemáticas Base-36

Mi nombre tiene 13 caracteres de longitud. Hay muchos DeWolfes, muchos Shawns, algunos Shawn DeWolfes. Mi nombre de 13 caracteres no significa nada único. Incluso mi número de seguro social de nueve dígitos solo llega hasta ahora. En mi país, Canadá, me define específicamente, pero cualquier otra nación con un sistema de número de seguro social de nueve dígitos probablemente tendrá un miembro con un número igual al mío..

¿Qué pasaría si un número pudiera dirigirse a cada persona viva, ser más corto que un nombre y más corto que un número de seguro social? No puedes hacerlo con los números de Base-10, pero con Base-36, es muy fácil.

Utilizamos la base diez tanto que descontamos la utilidad de aumentar los pedidos de diez con cada dígito que agregamos a un número. Con dos dígitos podemos ir de 0 a 99. El hexadecimal lo lleva más lejos: con dos dígitos hexadecimales, podemos llegar a 255, de 0 a FF. 

Los números hexadecimales superan la marca de diez dígitos sin tener que inventar nuevos números. Lo hace utilizando A, B, C, D, E y F para hacer referencia a los dígitos digitales número 11 al 16. Base-36 lleva ese paso un paso más allá y utiliza todos los caracteres disponibles convencionalmente con los que estamos familiarizados. Base-36 usa números para manejar los primeros diez dígitos. Los dígitos 11 a 36 están referenciados con el alfabeto de la A a la Z. Sabemos el orden de los números del 0 al 9, y conocemos el alfabeto, por lo que podemos anticipar la progresión.


Al usar el número base-36, se puede hacer referencia a números masivamente grandes con una economía de tamaño. Mientras que un número de dos dígitos te lleva a 99; ZZ, una expresión de Base-36 de dos dígitos llega a 1295. Z, ZZZ, ZZZ es la base diez equivalente de 78,364,164,095. 

Con ese número de siete dígitos debajo de la base 36, puede hacer referencia a todas las personas con vida y casi a todas las personas que hayan estado con su propio número de 7 dígitos.. 

Cuando llegues a ocho dígitos, podrías tener cubierto el Internet de las cosas. Ocho dígitos en la base-36 cuentan con más de dos billones (2,821,109,907,455 para ser exactos).

Base-36 es un buen techo práctico para trabajar en lugar de base diez o secuencias hexadecimales. PHP y MySQL tienen funciones de conversión que pueden convertir números hacia y desde base-36. La funcionalidad está ahí. Permite el almacenamiento de datos más compactos.. 

Desde la perspectiva humana, se ha dicho que muchas personas pueden recordar una lista de 5 cosas más o menos dos. Muchos pueden recordar números de teléfono importantes. Y así como la mayoría de las personas pueden recordar un número de teléfono de siete dígitos, se puede argumentar que pueden retener una representación de cadena de siete caracteres de algo grande, en lugar de un número de teléfono de 1 en un millón, una base de siete caracteres-36 La cifra representará una de las 78 mil millones de referencias..   

¿Por qué son importantes los números grandes??

Como se muestra arriba, los grandes números pueden ser útiles para tratar grandes cantidades de datos. Facebook almacena sus publicaciones con números de identificación que están en espiral hacia arriba. 

Una publicación que acabo de sacar tiene el número de identificación 902352183124757. Quince dígitos: 902 trillones. Si están en 902 trillones, y un tipo como yo lanza una cantidad loca de publicaciones por día y decenas de millones hacen lo mismo que yo, ese odómetro de post se rodará pronto. 

Si las publicaciones tuvieran un formato de 10 dígitos base-36, la base de datos tendría más espacio para las piernas (por ejemplo, casi 4 cuatrillones (3,656,158,440,062,980) referencias disponibles). Si Facebook llegó a este punto a través de un crecimiento exponencial y ese crecimiento exponencial se está nivelando, entonces 2+ cuatrillones de publicaciones le darán a esa base de datos el espacio que necesita para hacer referencia a las nuevas publicaciones sin ir a un valor googolplex.

No es intensivo el procesamiento de números de Base-36?

Si y no. Dentro de una base de datos, los enteros son la forma más económica de almacenar datos. Los números de base 36 se consideran cadenas y las cadenas son más costosas de almacenamiento. 

Del mismo modo, el incremento automático en MySQL solo incrementará los enteros. Puedes formatear cadenas para ser consistente. Por ejemplo, los 10 caracteres podrían usarse con ceros a la izquierda del número, de modo que 0000000008 sería ocho, mientras que 00000000ZZ sería 1295. Cuando se ordenan alfabéticamente, la progresión se vería como una progresión numérica. Si bien el incremento automático está integrado en MySQL y en la mayoría de las otras bases de datos relacionales, no es el único juego en la ciudad. Puede crear nuevos números base-36 generados automáticamente asociando un disparador a una tabla (que analizaremos momentáneamente) para introducir valores nuevos y ordenados cuando se insertan nuevos registros.

Donde se puede usar la Base-36

El objetivo de la base-36 es la compactación y la relevancia. En lugar de 10 dígitos para hacer referencia a las personas en la Tierra, siete caracteres los abordarán a todos. En lugar de 16 dígitos para abordar todas las actualizaciones de estado de Facebook, se pueden usar 10 caracteres. Cuando se trata de relevancia, la secuencia puede ser tanto un valor incremental como parte del valor que puede reservarse para declarar cualidades adicionales en lo que se define..

Base-36 se puede utilizar para hacer referencia a este tipo de elementos:

  • Gente. Un número base de 36 dígitos puede hacer referencia a 78 mil millones de personas. Si convierte la referencia de un usuario en 7 caracteres..
  • Códigos de país. Los códigos de país ya son representaciones de dos caracteres. Hay 193 países reconocidos (al escribir eso, solo sé que un país se dividirá en dos cuando llegue el momento de cierre). La norma ISO-3166 es una lista de códigos de país de dos dígitos. Con dos caracteres alfabéticos, se puede hacer referencia a 676 países específicos, los códigos de país son buenos para usar solo dos caracteres. El uso de la norma ISO-3166 deja más de 400 referencias sin usar, pero aún así proporciona una referencia común y reconocible.
  • Ciudades. China, con sus mil millones de habitantes, tiene más de 1020 ciudades. Esas comunidades podrían ser referenciadas dentro de dos dígitos base-36. Muchos países tendrán menos de 1000 comunidades. Digamos que las referencias de la comunidad se vuelven realmente particulares y para satisfacer todas las referencias, tres dígitos pueden asociar 46,655 comunidades dentro de un país.
  • Dispositivos. El Internet de las cosas se acerca, estoy seguro. Tengo tres dispositivos con sus propias necesidades inalámbricas. Algunas personas amigables con la tecnología podrían tener muchos más dispositivos cableados. Si esto fuera 36 dispositivos por persona, entonces un dígito podría cubrir todos esos dispositivos. Dos dígitos para referirse a dispositivos y cosas cubre 1295 posibilidades..

Números de serie amalgamados

Estas cadenas se pueden combinar para que sean únicas al amalgamar a los personajes en una secuencia ordenada. En el siguiente ejemplo, puede hacer una referencia a las personas, su ubicación y sus dispositivos. Toda la cadena puede ser única, mientras que los elementos en ella se repiten..

Por ejemplo: US001200GHK4 en realidad podría significar:

  • Código de país
  • 001 - Manhattan
  • 200GHK4 - Código único de una persona.

Tal vez sus dispositivos se agreguen al proceso de identificación. Digamos que la computadora portátil es su dispositivo principal. Cuando se coloca su teléfono celular en el cálculo, es el segundo dispositivo asociado con el usuario: US001200GHK42. El "2" significa ese segundo dispositivo.

Si así es como se trabajó la base-36 para crear alguna identificación, la longitud de la cadena hablará de lo que asocia.

  • Dos dígitos de longitud = país usando los códigos estándar ISO-3166
  • Cinco dígitos de longitud = comunidad en un país
  • Doce dígitos de longitud = una persona que reside en un país
  • Trece dígitos de longitud = una referencia a un dispositivo direccionable por IP propiedad de un usuario en una comunidad y país en particular.

Con 13 dígitos, una búsqueda en MySQL de "US%" para devolverá a todos los ciudadanos estadounidenses. "US001%" devolverá a todas las personas en Manhattan. "US001% 1" revelará el dispositivo primario / preferido utilizado por todos los residentes de Manhattan. Con una lógica como esa, la comunicación se puede enrutar a una parte preferida de una red.

Por supuesto, hay un montón de qué si:

  • ¿Y si cambian de ciudad? El tercer al quinto personaje cambia..
  • ¿Y si saltan a otro país? Los primeros cinco dígitos cambian para reflejar nuevas excavaciones.
  • ¿Y si poseen más de 36 dispositivos? Si eso sucede, entonces los dos últimos dígitos pueden representar su dispositivo en lugar de únicamente el último: un número de ID de catorce dígitos diría, "este tipo tiene muchos gadgets".

Almacenamiento en una base de datos

El propósito principal de crear estos grandes números y almacenarlos como referencias de base 36 es practicar una especie de economía. Estas deben ser secuenciales, como las claves de índice, pero no tiene que hacer ningún cálculo en particular con ellas.

En MySQL, base-36 cadenas almacenadas como VARCHAR Los tipos de datos se comportan como enteros. Las cadenas se pueden comparar a través de funciones agregadas como MAX () y MIN () para obtener los números más altos y más bajos disponibles, respectivamente. 

También puede obtener una cadena base-36 ordenándola en orden descendente para obtener primero el número más alto. A diferencia de los enteros, las cadenas base-36 se pueden filtrar con ME GUSTA declaraciones si las cadenas son una combinación de series amalgamadas y valores incrementales.

Usando valores en MySQL

En MySQL hay el CONV () función que puede convertir desde cualquier cosa desde una base-2 hasta una base-36. Para obtener una base-36 a su base 10 equivalente, haz CONV ('ZA', 36, 10). Para pasar de una base 10 a una base-36, puedes ir por el otro lado. CONV ('1294', 10, 36). Puedes anidar estas funciones para crear algo que se incremente: CONV (CONV ('ZA', 36, 10) + 1, 10, 36)  dará salida a 'ZB'.

Incrementando las teclas Base-36 en MySQL

Esto se puede poner en un procedimiento personalizado y ese procedimiento se puede activar cuando se insertan nuevos registros en una tabla de base de datos. En el siguiente ejemplo, el disparador se agrega a la base_example tabla para ejecutar y crear una clave base-36 cuando se agrega un nuevo registro a la tabla base_example.

CREAR TABLA SI NO EXISTE 'base_example' ('bkey' varchar (12) NOT NULL, texto 'info' NO NULL) MOTOR = InnoDB CHARLA DEFAULT = latin1; CREAR EL GATILLO 'b36_incr' ANTES DE INSERTAR EN 'base_example' PARA QUE CADA FILA COMIENCE A DECLARAR old_bkey VARCHAR (12); DECLARAR el conteo de filas INT; SELECCIONAR CUENTA (*), bkey en rowcount, old_bkey DE 'base_example' GRUPO POR bkey ORDEN POR bkey DESC LIMIT 1; SI (1 <= rowcount) AND (old_bkey IS NOT NULL) THEN SET new.bkey = LPAD(CONV(CONV(old_bkey, 36, 10) + 1, 10, 36), 12, '0'); ELSE SET new.bkey = LPAD('0', 12, '0'); END IF; END

Figura 1. Un procedimiento activado para crear y aumentar el valor..

En este ejemplo, hay dos suposiciones agregadas a la mezcla. Primero el VARCHAR El campo debe tener 12 caracteres de longitud. En segundo lugar, los valores en el VARCHAR los campos se rellenan a la izquierda con ceros para que todos los resultados se vean consistentes y puedan ordenarse de manera predecible.

Matemáticas Con Base-36

Base-36 es genial, pero la mayoría de los lenguajes aún hacen referencia a cosas en base 10 y en binario. Sin embargo, PHP puede hacer conversiones de base y es lo suficientemente inteligente como para extrapolar las letras A a la Z que cubren los dígitos del 11 al 36. 

Con una función simple, los números base-36 pueden pasar una función (que veremos momentáneamente) para la conversión, el cálculo y un valor de retorno. Para ello, extrae los caracteres 0-9A-Z de la fórmula, realiza un cálculo de base-36 y luego convierte la salida de nuevo a base-36.

$ bthreesix = "ZZ"; // el equivalente de base 10 de 1295 $ zz = base_convert ($ bthreesix, 36,10); $ zz ++; // ZZ se convierte en 100 $ bthreesix = base_convert ($ zz, 10,36); echo $ bthreesix;

Haciendo Fórmulas Base-36 en PHP

Hay un límite a la complejidad de las matemáticas, pero escribí una función de ejemplo b36math () que convierte una fórmula base-36 en un resultado base-36.

"; print b36math (" ZW + 9 "); print"
"; function b36math ($ formula =" ") $ out = preg_replace_callback (" / ([\ w] +) / "," b36convert ", $ formula); // incr / decr no funciona como se anuncia $ out = str_replace ("++", "+ 1", $ out); $ out = str_replace ("-", "- 1", $ out); eval ('$ outer ='. $ out. ';' ); return strtoupper (base_convert ($ externamente, 10, 36)); function b36convert ($ coincidencias) $ dígitos = ""; array_shift ($ coincidencias); foreach ($ coincidencias como $ key => $ coincidencia) dígitos. = $ coincidencia; $ new_number = base_convert ($ dígitos, 36, 10); return intval ($ new_number);?>

Figura 2. La función de conversión b36math para ejecutar funciones ejecutadas con números base-36.

Conclusión

Nuestro mundo está hambriento de datos. Esos datos deben estar bien referenciados. En la crisis para acceder a grandes cuerpos de datos, usar referencias almacenadas como números de base-36 es una forma de almacenar números más grandes en menos espacio.. 

Hay una carrera a pie hacia lo que es un producto valioso: velocidad de procesamiento, ancho de banda o almacenamiento. Cuando uno es generoso, puede gastarlo compensando al otro. Si tiene muchos ciclos disponibles para el procesamiento, puede almacenar los datos en un formato incómodo y usar el procesamiento para que sea utilizable.. 

Si bien hay un límite de cuántos dígitos se pueden referenciar en un entero, varchar los campos pueden ir a 255 caracteres, y los campos de texto están abiertos. Se pueden almacenar números base-36 muy grandes para hacer referencia a elementos individuales en cuerpos de datos muy grandes.