Comprendre les mathématiques en base 36

Je m'appelle 13 caractères. Il y a beaucoup de DeWolfes, beaucoup de Shawns, quelques Shawn DeWolfes. Mon nom de personnage 13 ne signifie rien d'unique. Même mon numéro d’assurance sociale à neuf chiffres ne va pas très loin. Dans mon pays, le Canada, cela me définit spécifiquement, mais tout pays possédant un système de numéro d’assurance sociale à neuf chiffres aura probablement un membre avec le même numéro que le mien..

Et si un numéro pouvait s’adresser à chaque personne en vie, être plus court qu’un nom et plus court qu’un numéro d’assurance sociale? Vous ne pouvez pas le faire avec des nombres en base 10, mais avec la base 36, c'est un jeu d'enfant.

Nous utilisons tellement la base dix que nous ne tenons pas compte de l’utilité d’augmenter de dix ordres à chaque chiffre ajouté à un chiffre. Avec deux chiffres, on peut aller de 0 à 99. Hexadécimal va plus loin: avec deux chiffres hexadécimaux, on peut atteindre 255 - de 0 à FF. 

Les nombres hexadécimaux dépassent la marque des dix chiffres sans avoir à inventer de nouveaux nombres. Pour ce faire, il utilise A, B, C, D, E et F pour faire référence aux 11e au 16e chiffres. Base-36 va plus loin et utilise tous les caractères disponibles de manière conventionnelle que nous connaissons. Base-36 utilise des nombres pour traiter les dix premiers chiffres. Les chiffres 11 à 36 sont référencés avec l'alphabet de A à Z. Nous connaissons l'ordre des nombres de 0 à 9, et nous connaissons l'alphabet afin d'anticiper la progression..


En utilisant le nombre base-36, des nombres massivement plus grands peuvent être référencés avec une économie de taille. Tandis qu'un numéro à deux chiffres vous amène à 99; ZZ, une expression Base-36 à deux chiffres va jusqu'à 1295. Z, ZZZ, ZZZ est l'équivalent en base dix de 78.364.164.095.. 

Avec ce numéro à sept chiffres sous la base 36, vous pouvez référencer chaque personne en vie et presque chaque personne ayant été en vie avec son propre numéro à 7 chiffres. 

Lorsque vous obtenez huit chiffres, vous pouvez avoir l'Internet des objets couverts. Huit chiffres en base 36 comptent plus de deux billions de dollars (2 821 109 907 455 pour être exact).

La base-36 est un bon plafond pratique à utiliser au lieu de séquences de base dix ou hexadécimales. PHP et MySQL ont des fonctions de conversion qui peuvent convertir des nombres en base 36. La fonctionnalité est là. Il permet de stocker des données plus compactes. 

Du point de vue humain, il a été dit que beaucoup de personnes peuvent se souvenir d’une liste de cinq choses plus ou moins deux. Beaucoup peuvent se rappeler des numéros de téléphone importants. Et comme la plupart des gens peuvent se rappeler un numéro de téléphone à sept chiffres, on peut affirmer qu'ils peuvent conserver une chaîne de sept caractères représentant quelque chose de gros - au lieu d'un numéro de téléphone sur un million, une base de sept caractères chiffre représentera l'une des 78 milliards de références.   

Pourquoi les grands nombres sont-ils importants??

Comme indiqué ci-dessus, les grands nombres peuvent être utiles pour traiter de grandes quantités de données. Facebook stocke leurs messages avec des numéros d'identification qui montent en flèche. 

Un message que je viens de lire porte le numéro d’identification 902352183124757. Quinze chiffres - 902 milliards de dollars. S'ils sont à 902 milliards de dollars, et qu'un gars comme moi jette une quantité folle de messages par jour et que des dizaines de millions le font comme moi, ce compteur kilométrique va bientôt basculer. 

Si les publications étaient composées de 10 chiffres en base 36, la base de données aurait plus de place pour les jambes (par exemple, près de 4 quadrillions (3 656 158 440 062 980 références disponibles)). Si Facebook a atteint ce stade grâce à une croissance exponentielle et que cette croissance exponentielle se stabilise, alors plus de 2 000 milliards de publications devraient donner à cette base de données l'espace nécessaire pour référencer de nouvelles publications sans passer à une valeur googolplex..

Le traitement des numéros en base 36 n'est pas intensif?

Oui et non. À l'intérieur d'une base de données, les entiers constituent le moyen le plus économique de stocker des données. Les chiffres en base 36 seraient considérés comme des chaînes et les chaînes sont un stockage plus coûteux.. 

De même, l'incrémentation automatique dans MySQL n'incrémentera que les entiers. Vous pouvez formater les chaînes pour qu'elles soient cohérentes. Par exemple, les 10 caractères peuvent être utilisés avec des zéros à gauche du nombre, ce qui donne 0000000008 à huit et 00000000ZZ à 1295. Si vous les triez par ordre alphabétique, la progression ressemble à une progression numérique. Bien que l'auto-incrémentation soit intégrée à MySQL et à la plupart des autres bases de données relationnelles, ce n'est pas le seul jeu en ville. Vous pouvez créer de nouveaux nombres de base 36 générés automatiquement en associant un déclencheur à une table (dont nous discuterons dans un instant) pour introduire de nouvelles valeurs ordonnées lorsque de nouveaux enregistrements sont insérés..

Où Base-36 peut être utilisé

Le but de la base 36 est le compactage et la pertinence. Au lieu de 10 chiffres pour désigner les habitants de la Terre, sept caractères s’adressent à tous. Au lieu de 16 chiffres pour traiter toutes les mises à jour de statut de Facebook, 10 caractères peuvent être utilisés. En ce qui concerne la pertinence, la séquence peut être à la fois une valeur incrémentante et une partie de la valeur peut être mise de côté pour déclarer des qualités supplémentaires dans ce qui est défini..

Base-36 peut être utilisé pour référencer ces types d’articles:

  • Personnes. Un numéro de base 36 à sept chiffres peut faire référence à 78 milliards de personnes. Si vous convertissez une référence d'utilisateur en 7 caractères.
  • Codes de pays. Les codes de pays sont déjà deux représentations de caractères. Il y a 193 pays reconnus (en écrivant que, je sais juste que certains pays vont se scinder en deux d’ici à ce que j’arrive à la fourchette proche). La norme ISO-3166 est une liste d'indicatifs de pays à deux chiffres. Avec deux caractères alphabétiques, il est possible de référencer 676 pays spécifiques. Les codes de pays permettent d’utiliser deux caractères seulement. L'utilisation de la norme ISO-3166 laisse plus de 400 références inutilisées, mais fournit toujours une référence commune et reconnaissable.
  • Villes. La Chine, avec son milliard d’habitants, compte plus de 1020 villes. Ces communautés pourraient être référencées à l'intérieur de deux chiffres en base 36. De nombreux pays auront moins de 1000 communautés. Supposons que les références aux communautés deviennent vraiment particulières et que, pour satisfaire toutes les références, trois chiffres permettent d'associer 46 655 communautés à l'intérieur d'un pays..
  • Dispositifs. L'Internet des objets arrive, j'en suis sûr. J'ai trois appareils avec leurs propres besoins sans fil. Certaines personnes à l'aise avec la technologie pourraient avoir beaucoup plus d'appareils câblés. S'il s'agissait de 36 appareils par personne, un chiffre pourrait alors couvrir tous ces appareils. Deux chiffres pour les appareils de référence et les objets couvrent 1295 possibilités.

Numéros de série fusionnés

Ces chaînes peuvent être combinées pour créer un caractère unique en fusionnant les caractères dans une séquence ordonnée. Dans l'exemple suivant, vous pouvez faire référence aux personnes, à leur emplacement et à leurs périphériques. La chaîne entière peut être unique pendant que les éléments qui y sont répétés.

Par exemple: US001200GHK4 pourrait en fait signifier:

  • US - code pays
  • 001 - Manhattan
  • 200GHK4 - Code unique d'une personne.

Peut-être que leurs appareils sont ajoutés au processus d'identification. Disons que l'ordinateur portable est leur principal appareil. Lorsque leur téléphone portable est mis en place, il s’agit du deuxième appareil associé à l’utilisateur: US001200GHK42. Le «2» représente ce deuxième appareil.

Si c’est ainsi que la base-36 a été utilisée pour créer une identification, la longueur de la chaîne indiquera ce à quoi elle associe.

  • Deux chiffres = pays utilisant les codes de la norme ISO-3166
  • Cinq chiffres = communauté dans un pays
  • Douze chiffres: une personne qui réside dans un pays
  • Treize chiffres = référence à un périphérique adressable par IP appartenant à un utilisateur d'une communauté et d'un pays donnés.

Avec 13 chiffres, une recherche MySQL pour «US%» pour renvoyer tous les citoyens américains. «US001%» renverra toutes les personnes à Manhattan. «US001% 1» révélera le périphérique principal / préféré utilisé par tous ces résidents de Manhattan. Avec une telle logique, la communication peut être acheminée vers un bloc préféré d'un réseau.

Bien sûr, il y a beaucoup de si:

  • Et s'ils changeaient de ville? Les troisième à cinquième caractères changent.
  • Et s'ils sautaient dans un autre pays? Les cinq premiers chiffres changent pour refléter les nouvelles fouilles.
  • Et s'ils possèdent plus de 36 appareils? Si cela se produit, les deux derniers chiffres peuvent représenter leur appareil au lieu du dernier - un numéro d'identification à quatorze chiffres indiquerait «ce mec a beaucoup de gadgets».

Stockage dans une base de données

L’objectif principal de la création de ces grands nombres et de leur stockage en tant que références en base 36 est de pratiquer une sorte d’économie. Celles-ci doivent être séquentielles comme les clés d'index, mais vous n'avez pas à faire de calcul particulier avec elles..

Dans MySQL, les chaînes en base 36 stockées sous VARCHAR les types de données se comportent comme des entiers. Les chaînes peuvent être comparées via des fonctions d'agrégat comme MAX () et MIN () pour obtenir les nombres disponibles les plus élevés et les plus bas, respectivement. 

Vous pouvez également extraire une chaîne en base 36 en triant par ordre décroissant pour obtenir le nombre le plus élevé en premier. Contrairement aux nombres entiers, les chaînes en base 36 peuvent être filtrées avec COMME les instructions doivent être les chaînes d'une combinaison de séries amalgamées et de valeurs incrémentielles.

Utiliser les valeurs dans MySQL

Dans MySQL, il y a le CONV () fonction qui peut convertir un nombre allant d’un nombre compris en base 2 à un nombre en base 36. Pour obtenir une base 36 à son équivalent base 10, faites CONV ('ZA', 36, 10). Pour aller d'une base 10 à une base 36, vous pouvez aller dans l'autre sens. CONV ('1294', 10, 36). Vous pouvez imbriquer ces fonctions pour créer quelque chose qui s'incrémente: CONV (CONV ('ZA', 36, 10) + 1, 10, 36)  affichera «ZB».

Incrémentation de clés Base-36 dans MySQL

Cela peut être mis dans une procédure personnalisée et cette procédure peut être déclenchée lorsque de nouveaux enregistrements sont insérés dans une table de base de données. Dans l'exemple ci-dessous, le déclencheur est ajouté à la exemple_base table pour exécuter et créer une clé base-36 lorsqu'un nouvel enregistrement est ajouté à la table base_example.

CREATE TABLE SI PAS EXISTS 'base_example' ('bkey' varchar (12) NOT NULL, le texte 'info' NON NULL) ENGINE = InnoDB DEFAULT CHARSET = latin1; CREATE TRIGGER 'b36_incr' AVANT L'INSERTION SUR 'exemple_base' POUR CHAQUE ROW COMMENCE DECLARE old_bkey VARCHAR (12); DECLARE rowcount INT; SELECT COUNT (*), bkey dans rowcount, old_bkey FROM 'base_example' GROUP BY bkey ORDER BY 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

Figure 1. Procédure déclenchée pour créer et incrémenter une valeur.

Dans cet exemple, deux hypothèses sont ajoutées au mélange. Premièrement le VARCHAR Le champ doit comporter 12 caractères. Deuxièmement, les valeurs dans le VARCHAR les champs sont complétés à gauche avec des zéros afin que toutes les sorties soient cohérentes et puissent être triées de manière prévisible.

Math avec base-36

La Base-36 est cool, mais la plupart des langues font toujours référence aux choses en base 10 et en binaire. PHP peut cependant effectuer des conversions de base et il est assez intelligent pour extrapoler les lettres de A à Z qui couvrent les 11ème à 36ème chiffres.. 

Avec une fonction simple, les chiffres en base 36 peuvent recevoir une fonction (que nous verrons dans un instant) pour la conversion, le calcul et une valeur de retour. Pour cela, il extrait les caractères 0-9A-Z de la formule, effectue un calcul en base 36 puis reconvertit la sortie en base 36..

$ bthreesix = "ZZ"; // l'équivalent en base 10 de 1295 $ zz = base_convert ($ bthreesix, 36,10); $ zz ++; // ZZ devient 100 $ bthreesix = base_convert ($ zz, 10,36); echo $ bthreesix;

Faire des formules Base-36 en PHP

Il y a une limite à la complexité du calcul, mais j'ai écrit un exemple de fonction b36math () qui convertit une formule base 36 en un résultat base 36.

"; print b36math (" ZW + 9 "); print"
"; function b36math ($ formula =" ") $ out = preg_replace_callback (" / ([\ w] +) / "," b36convert ", $ formula); // incr / décr ne fonctionnent pas comme annoncé $ out = str_replace ("++", "+ 1", $ out); $ out = str_replace ("-", "- 1", $ out); eval ('$ outer ='. $ out. ';' ); return strtoupper (base_convert ($ externe, 10, 36)); fonction b36convert ($ correspondances) $ digits = ""; array_shift ($ correspondances); foreach ($ correspond comme $ clé => $ correspondance) $ digits. = $ match; $ new_number = base_convert ($ digits, 36, 10); return intval ($ new_number);?>

Figure 2. La fonction de conversion b36math pour exécuter des fonctions exécutées avec des nombres en base 36.

Conclusion

Notre monde a faim de données. Ces données doivent être bien référencées. Pour accéder à de plus grandes masses de données, utiliser des références stockées sous forme de nombres en base 36 permet de stocker des nombres plus importants dans un espace réduit. 

Il existe une course à pied vers ce qui constitue un bien précieux: vitesse de traitement, bande passante ou stockage. Quand l’un est généreux, vous pouvez le dépenser pour compenser l’autre. Si vous avez beaucoup de cycles disponibles pour le traitement, vous pouvez stocker des données dans un format compliqué et utiliser le traitement pour les rendre utilisables.. 

Bien qu'il y ait une limite de combien de chiffres peuvent être référencés dans un entier, varchar les champs peuvent contenir jusqu'à 255 caractères et les champs de texte sont ouverts. De très grands nombres en base 36 peuvent être stockés pour référencer des éléments individuels dans de très grands ensembles de données.