În teoria numerelor computaționale și algebra computațională , algoritmul cangur al lui Pollard (și, de asemenea , algoritmul lambda al lui Pollard , vezi secțiunea Titlu de mai jos) este un algoritm pentru rezolvarea problemei logaritmului discret . Algoritmul a fost propus în 1978 de către teoreticianul numerelor J. M. Pollard în aceeași lucrare [1] ca și mai cunoscutul său algoritm ρ pentru rezolvarea aceleiași probleme. Deși Pollard descrie aplicarea acestui algoritm la problema logaritmului discret într-un grup multiplicativ modulo un prim p, este, de fapt, un algoritm general pentru logaritmul discret - va funcționa pe orice grup finit ciclic.
Fie un grup ciclic finit de ordin generat de un element și căutăm logaritmul discret al elementului față de bază . Cu alte cuvinte, căutăm , astfel încât . Algoritmul lambda ne permite să căutăm într-un subset de . Putem căuta întregul set de logaritmi posibili presupunând și , deși algoritmul ρ va fi mai eficient în acest caz. Procedăm astfel:
1. Alegeți un set de numere întregi și definiți o mapare pseudo-aleatorie .
2. Alegeți un număr întreg și calculați succesiunea elementelor grupului conform formulelor:
3. Calculați
.observa asta
4. Începem să calculăm a doua secvență de elemente de grup folosind formulele
și succesiunea corespunzătoare de numere întregi conform formulei
.observa asta
pentru5. Opriți calculul și când una dintre condiții este îndeplinită
A) pentru unii . Dacă secvențele și „se ciocnesc” în acest fel, avem: asa ca am gasit ce ne-am dorit. B) . Dacă se întâmplă acest lucru, algoritmul nu a reușit să găsească . O altă încercare poate fi făcută prin schimbarea setului sau/și a maparii .Pollard a specificat o complexitate temporală pentru algoritmul , bazată pe raționament probabilistic, care decurge din ipoteza că f acționează pseudo-aleatoriu. Rețineți că în cazul în care dimensiunea mulțimii { a , …, b } este măsurată în biți , ceea ce este uzual în teoria complexității , mulțimea are dimensiunea log( b − a ), deci complexitatea algoritmică este egală cu , care este un exponent al dimensiunii problemei. Din acest motiv, algoritmul lambda al lui Pollard este considerat a fi un algoritm de complexitate exponențială . Pentru un exemplu de algoritm subexponențial în timp, consultați Comandă algoritmul de calcul .
Algoritmul este cunoscut sub două nume.
Prenumele este algoritmul „cangur” al lui Pollard . Numele se referă la o analogie folosită în articolul în care a fost propus algoritmul. Articolul explică algoritmul în ceea ce privește utilizarea unui cangur îmblânzit pentru a captura unul sălbatic . După cum a explicat Pollard [2] , această analogie a fost inspirată de o lucrare „încântătoare” publicată în același număr al Scientific American ca și publicația RSA Public Key Cryptosystem . Articolul [3] descrie un experiment în care „costul energetic al mișcării unui cangur, măsurat în termeni de consum de oxigen la diferite viteze, a fost determinat prin plasarea unui cangur pe o bandă de alergare ”.
Al doilea nume este algoritmul lambda al lui Pollard . Foarte asemănător cu numele celuilalt algoritm al lui Pollard pentru logaritmul discret, algoritmul ρ , iar acest nume se datorează asemănării de vizualizare a algoritmului cu litera greacă lambda ( ). Linia scurtă a literei lambda corespunde secvenței . În consecință, linia lungă corespunde secvenței care „se ciocnește” cu prima secvență (similar cu întâlnirea liniilor scurte și lungi ale unei litere).
Pollard preferă să folosească denumirea de „algoritm cangur” [4] pentru a evita confuzia cu unele versiuni paralele ale algoritmului ρ, care sunt denumite și „algoritmi lambda”.
Algoritmi teoretici numerelor | |
---|---|
Teste de simplitate | |
Găsirea numerelor prime | |
Factorizarea | |
Logaritm discret | |
Găsirea GCD | |
Modul de aritmetică | |
Înmulțirea și împărțirea numerelor | |
Calcularea rădăcinii pătrate |