Înțelegând baza matematică 36

Numele meu are 13 caractere lungime. Există o mulțime de DeWolfes, o mulțime de Shawns, câțiva Shawn DeWolfes. Numele meu de 13 caractere nu înseamnă nimic unic. Chiar și numărul meu de asigurări sociale de nouă cifre merge doar până acum. În țara mea, Canada, mă definește în mod specific, dar orice altă națiune cu un număr de nouă cifre sistem de asigurări sociale va avea probabil un membru cu un număr la fel ca mine.

Ce se întâmplă dacă un număr ar putea să se adreseze fiecărei persoane în viață, să fie mai scurt decât un nume și mai mic decât un număr de asigurări sociale? Nu puteți să o faceți cu numerele Base-10, dar cu Base-36, este o briză.

Folosim baza zece atât de mult încât să reducem utilitatea trecerii la ordine de zece, cu fiecare cifră pe care o adăugăm la un număr. Cu două cifre putem trece de la 0 la 99. Hexadecimal o ia și mai departe: cu două cifre hexazecimale, putem ajunge la 255 - de la 0 la FF. 

Numerele hexazecimale ajung peste marcajul de zece cifre fără a trebui să inventeze numere noi. Ea face acest lucru folosind A, B, C, D, E și F pentru a face referire la digitale de la 11 la 16 digitale. Base-36 are un pas mai departe și folosește toate caracterele disponibile convențional cu care suntem familiarizați. Base-36 folosește numere pentru a manipula primele zece cifre. Cifrele 11 până la 36 se referă la alfabetul de la A la Z. Știm ordinea numerelor de la 0 la 9 și cunoaștem alfabetul, astfel încât să putem anticipa progresul.


Prin utilizarea numărului de bază-36, numerele masive mai mari pot fi menționate cu o economie de dimensiune. În timp ce un număr de două cifre te duce la 99; ZZ, o expresie cu două cifre de bază-36 ajunge la 1295. Z, ZZZ, ZZZ este baza zece echivalente de 78.364.164.095. 

Cu acel număr de șapte cifre de sub baza-36, puteți menționa fiecare persoană în viață și aproape orice persoană care a trăit vreodată cu propriul număr unic de 7 cifre. 

Când ajungeți la opt cifre, puteți avea acoperit Internetul lucrurilor. Opt cifre la baza-36 numără peste 2 trilioane (2,821,109,907,455 pentru a fi exacte).

Baza-36 este un bun plafon practic pentru a lucra în locul unei baze zece sau unei secvențe hexazecimale. PHP și MySQL au funcții de conversie care pot converti numere de la și de la baza-36. Funcționalitatea este acolo. Permite stocarea unor date mai compacte. 

Din perspectiva umană, sa spus că mulți oameni își amintesc o listă de 5 lucruri plus sau minus două. Mulți pot aminti numere de telefon importante. Și la fel cum majoritatea oamenilor își pot aminti un număr de telefon de șapte cifre, deci se poate argumenta că pot păstra o reprezentare a șirului de caractere de ceva mare - în loc de un număr de telefon dintr-un milion, o bază de șapte caractere cifra va reprezenta una din cele 78 de miliarde de referințe.   

De ce sunt mari numere importante?

După cum sa arătat mai sus, numerele mari pot fi utile pentru a aborda mase mari de date. Facebook își stochează posturile cu numere de identificare care sunt spiralate în sus. 

Un post pe care tocmai l-am tras are numărul de identificare de 902352183124757. Cifre de 15 cifre - 902 trilioane. Dacă ei sunt la 902 trilioane, și un tip ca mine aruncă o cantitate nebună de posturi pe zi și zeci de milioane, așa cum fac eu, acel kilometru post se va răsturna în curând. 

Dacă postările sunt formatate în 10 cifre de bază-36, baza de date ar avea mai mult spațiu pentru picioare (de exemplu, există aproape 4 quadrillion (3.665.148.440.062.980) referințe disponibile). Dacă Facebook a ajuns la acest punct prin creștere exponențială și această creștere exponențială este egală, atunci 2 + quadrillion posturi ar trebui să dea acea bază de date camera de care are nevoie pentru a referi posturi noi fără a merge la o valoare googolplex.

Nu sunt numeroase procese de procesare a numerelor Base-36?

Da și nu. În interiorul unei baze de date, numerele întregi reprezintă cea mai economică modalitate de stocare a datelor. Numerele de bază 36 vor fi considerate șiruri de caractere și șiruri de caractere sunt mai scumpe de stocare. 

De asemenea, creșterea automată în MySQL va crește numai numerele întregi. Puteți configura șirurile pentru a fi consecvente. De exemplu, toate cele 10 caractere pot fi folosite cu zero în stânga numărului astfel încât 0000000008 să fie opt în timp ce 00000000ZZ ar fi 1295. Când este sortat în ordine alfabetică, progresia ar arăta ca o evoluție numerică. În timp ce auto-incrementarea este integrată în MySQL și majoritatea bazelor de date relaționale, nu este singurul joc din oraș. Puteți crea noi numere de bază 36 generate automat prin asocierea unui declanșator unui tabel (pe care îl vom discuta momentan) pentru a introduce noi valori ordonate când se introduc noi înregistrări.

În cazul în care baza-36 pot fi utilizate

Scopul bazei 36 este compactarea și relevanța. În loc de 10 cifre pentru a face referire la oamenii de pe Pământ, șapte personaje le vor adresa tuturor. În loc de 16 cifre pentru a răspunde tuturor actualizărilor de stare ale Facebook, pot fi folosite 10 caractere. Când vine vorba de relevanță, secvența poate fi atât o valoare incrementală, cât și o parte din valoare poate fi pusă deoparte pentru a declara calități suplimentare în ceea ce este definit.

Baza-36 poate fi utilizată pentru a face referire la aceste tipuri de articole:

  • oameni. Un număr de șapte cifre de bază-36 poate face referire la 78 de miliarde de persoane. Dacă convertiți o referință a unui utilizator în 7 caractere.
  • Coduri de țară. Codurile de țară sunt deja reprezentări de două caractere. Există 193 de țări recunoscute (scriind asta, știu doar că o țară va fi împărțită în două până când ajung la grupul apropiat). Standardul ISO-3166 este o listă a codurilor de țară din două cifre. Cu două caractere alfabetice, pot fi menționate 676 de țări specifice, iar codurile țării sunt bune la utilizarea a doar două caractere. Utilizarea standardului ISO-3166 lasă peste 400 de referințe neutilizate, dar oferă încă o referință comună și recunoscută.
  • Orase. China, cu un miliard de oameni, are peste 1020 de orașe. Aceste comunități ar putea fi menționate în interiorul a două cifre de bază-36. Multe țări vor avea mai puțin de 1000 de comunități. Să spunem că referințele comunității devin cu totul deosebite și pentru a satisface toate referințele, trei cifre pot asocia 46.655 de comunități în interiorul unei țări.
  • Dispozitive. Internetul lucrurilor vine, sunt sigur. Am trei dispozitive cu propriile nevoi wireless. Unele persoane care utilizează tehnologie ar putea avea mai multe dispozitive cu fir. Dacă ar fi fost 36 de dispozitive pe persoană, atunci o cifră ar putea acoperi toate aceste dispozitive. Două cifre pentru dispozitivele de referință și pentru lucruri acoperă 1295 de posibilități.

Numerele de serie amalgamate

Aceste siruri de caractere pot fi combinate pentru a face unic prin amalgamarea caracterelor într-o ordine ordonată. În exemplul următor, puteți face o trimitere la persoane, la locația lor și la dispozitivele lor. Întregul șir poate fi unic, în timp ce elementele se repetă.

De exemplu: US001200GHK4 ar putea însemna:

  • Codul țării SUA
  • 001 - Manhattan
  • 200GHK4 - Codul unic al unei persoane.

Poate că dispozitivele lor se adaugă la procesul de identificare. Să presupunem că laptopul este dispozitivul lor principal. Atunci când telefonul mobil este pus în calcul, este al doilea dispozitiv care este asociat cu utilizatorul: US001200GHK42. "2" reprezintă al doilea dispozitiv.

Dacă în acest fel baza 36 a fost folosită pentru a crea o anumită identificare, lungimea șirului va vorbi cu ceea ce asociază.

  • Două cifre = țara care utilizează codurile standard ISO-3166
  • Cinci digiți = comunitate într-o țară
  • Douăzeci de cifre lungi = o persoană în care locuiesc într-o țară
  • Treisprezece cifre lungi = o referință la un dispozitiv adresabil IP deținut de un utilizator dintr-o anumită comunitate și țară.

Cu 13 cifre, o căutare MySQL pentru "US%" va reveni tuturor cetățenilor americani. "US001%" va reveni tuturor oamenilor din Manhattan. "US001% 1" va dezvălui dispozitivul principal / preferat folosit de toți rezidenții din Manhattan. Cu o astfel de logică, comunicarea poate fi direcționată către o bucată preferată dintr-o rețea.

Desigur, există multe lucruri dacă:

  • Dacă se schimbă orașele? Se schimbă al treilea până la al cincilea personaj.
  • Ce se întâmplă dacă ei urcă într-o altă țară? Primele cinci cifre se modifică pentru a reflecta noi sapaturi.
  • Ce se întâmplă dacă dețin mai mult de 36 de dispozitive? Dacă se întâmplă acest lucru, atunci ultimele două cifre pot reprezenta dispozitivul în loc de numai ultima - un ID de 14 cifre ar spune că "acest tip are multe gadgeturi".

Depozitarea într-o bază de date

Scopul principal al creării acestor numere mari și păstrarea lor ca referințe de bază 36 este de a practica un fel de economie. Acestea trebuie să fie secvențiale ca cheile de index, dar nu trebuie să faceți nici o matematică specială cu ele.

În MySQL, șiruri de bază-36 stocate ca VARCHAR tipurile de date se comportă ca întregi. Corzile pot fi comparate prin funcții cum ar fi agregate MAX () și MIN () pentru a obține cele mai mari și cele mai scăzute numere disponibile, respectiv. 

De asemenea, puteți prelua un șir de bază-36 prin sortarea în ordine descrescătoare pentru a obține primul număr cel mai mare. Spre deosebire de numere întregi, structurile de bază 36 pot fi filtrate cu CA instructiunile ar trebui sa fie o combinatie de serii de amalgamate si valori incrementale.

Utilizarea valorilor în MySQL

În MySQL există CONV () funcție care poate converti de la orice de la un număr de bază-2 la un număr de bază-36. Pentru a obține o bază 36 la baza sa de 10 echivalente, faceți CONV ("ZA", 36, 10). Pentru a obține de la o bază 10 de la o bază-36 poți să mergi invers. CONV ('1294', 10, 36). Puteți asambla aceste funcții pentru a crea ceva care crește: CONV (CONV ('ZA', 36, 10) + 1, 10, 36)  va ieși "ZB".

Creșterea bazei-36 chei în MySQL

Aceasta poate fi pusă într-o procedură personalizată și această procedură poate fi declanșată atunci când se înregistrează noi înregistrări într-o tabelă de baze de date. În exemplul de mai jos, declanșatorul este adăugat la base_example tabel pentru a executa și a crea o cheie de bază-36 atunci când o nouă înregistrare este adăugată la tabela de bază_exemplu.

CREATE TABLE DACĂ NU EXISTĂ "base_example" ('bkey' varchar (12) NOT NULL, 'info' text NOT NULL) ENGINE = InnoDB DEFAULT CHARSET = latin1; CREATE TRIGGER 'b36_incr' ÎNAINTE DE INSERT ON 'exemplul_exemplu' PENTRU FIECARE LINIE BEGIN DECLARE old_bkey VARCHAR (12); DECLARE rata INT; SELECT COUNT (*), bkey în număr de rânduri, old_bkey FROM 'base_example' GROUP BY bKE ORDER BY bKE DESC LIMIT 1; Dacă (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. O procedură declanșată pentru a crea și a crește valoarea.

În acest exemplu, există două ipoteze adăugate la amestec. În primul rând, VARCHAR câmpul trebuie să aibă 12 caractere lungime. În al doilea rând, valorile din VARCHAR câmpurile sunt lăsate cu zerouri, astfel încât toată producția să pară consistentă și poate fi sortată într-un mod previzibil.

Matematica cu baza-36

Baza-36 este rece, dar majoritatea limbilor încă fac referire la lucruri în baza 10 și binară. PHP poate face conversii de bază cu toate acestea și este suficient de inteligent pentru a extrapola literele de la A la Z acoperă cifrele de la 11 la 36. 

Cu o funcție simplă, numerele de bază 36 pot fi transferate o funcție (pe care o vom vedea momentan) pentru conversie, calcul și o valoare de retur. Ea face acest lucru trăgând caracterele 0-9A-Z din formula, efectuând un calcul de bază-36 și apoi transformând ieșirea înapoi la baza 36.

$ bthreesix = "ZZ"; // baza 10 echivalentul a 1295 $ zz = base_convert ($ bthreesix, 36,10); $ Zz ++; // ZZ devine 100 $ bthreesix = base_convert ($ zz, 10,36); echo $ bthreesix;

Făcând formulele Base-36 în PHP

Există o limită a complexității matematice, dar am scris o funcție de exemplu b36math () care transformă o formulă de bază-36 într-un rezultat de bază-36.

"; b36math (" ZW + 9 "); tipăriți"
", funcția b36math ($ formula =" ") $ out = preg_replace_callback (" / ([\ w] +) / "," b36convert ", $ formula); = $ out = str_replace ("-", "-", $ out); eval ('$ out ='. $ out. '; ); return strtoupper (base_convert ($ exterioară, 10, 36)); funcția b36convert ($ matches) $ digits = ";; array_shift ($ matches); = $ match; $ new_number = base_convert ($ digits, 36, 10); retur intval ($ new_number);>

Figura 2. Funcția de conversie b36math pentru a executa funcții executate cu numere de bază 36.

Concluzie

Lumea noastră este înfometată. Aceste date trebuie să fie bine menționate. În criză pentru a accesa mai multe cadre de date, folosind referințe stocate ca numere de bază 36 este o modalitate de a stoca numere mai mari în mai puțin spațiu. 

Există o cursă de picior la ceea ce este o marfă valoroasă: viteza de procesare, lățimea de bandă sau spațiul de stocare. Atunci când cineva este în aprovizionare generoasă, îl puteți cheltui compensând pentru celălalt. Dacă aveți multe cicluri disponibile pentru procesare, puteți face stocarea datelor într-un format greoi și utilizați procesarea pentru ao face folositoare. 

Deși există o limită de câte cifre pot fi menționate într-un număr întreg, varchar câmpurile pot ajunge la 255 de caractere, iar câmpurile de text sunt deschise. Numere foarte mari de bază-36 pot fi stocate pentru a se referi la elementele individuale din corpuri foarte mari de date.

Cod