I beräkningstalteori och beräkningsalgebra är Pollards kängurualgoritm (och även Pollards lambdaalgoritm , se rubrikavsnittet nedan) en algoritm för att lösa det diskreta logaritmproblemet . Algoritmen föreslogs 1978 av nummerteoretikern J. M. Pollard i samma artikel [1] som hans mer kända ρ-algoritm för att lösa samma problem. Även om Pollard beskriver tillämpningen av denna algoritm på det diskreta logaritmproblemet i en multiplikativ grupp modulo a prime p , är det i själva verket en allmän diskret logaritmalgoritm – den kommer att fungera på vilken cyklisk finit grupp som helst.
Låta vara en ändlig cyklisk grupp av ordning som genereras av ett element , och vi letar efter den diskreta logaritmen av elementet med avseende på basen . Med andra ord letar vi efter , sådan att . Lambdaalgoritmen låter oss söka i någon delmängd av . Vi kan söka efter hela uppsättningen möjliga logaritmer genom att anta och , även om ρ-algoritmen kommer att vara mer effektiv i detta fall. Vi går tillväga enligt följande:
1. Välj en uppsättning heltal och definiera en pseudo-slumpmässig mappning .
2. Välj ett heltal och beräkna sekvensen av gruppelement enligt formlerna:
3. Beräkna
.Lägg märke till att
4. Vi börjar beräkna den andra sekvensen av gruppelement med hjälp av formlerna
och motsvarande sekvens av heltal enligt formeln
.Lägg märke till att
för5. Sluta beräkna och när något av villkoren är uppfyllt
A) för vissa . Om sekvenserna och "krockar" på detta sätt har vi: så vi hittade vad vi ville ha. B) . Om detta händer har algoritmen inte lyckats hitta . Ett annat försök kan göras genom att ändra uppsättningen eller/och mappningen .Pollard specificerade en tidskomplexitet för algoritmen , baserat på probabilistiska resonemang, som följer av antagandet att f fungerar pseudo-slumpmässigt. Observera att i fallet när storleken på mängden { a , …, b } mäts i bitar , vilket är vanligt inom komplexitetsteorin , har mängden storleksloggen( b − a ), så den algoritmiska komplexiteten är lika med , vilket är en exponent för problemets storlek. Av denna anledning anses Pollards lambdaalgoritm vara en exponentiell komplexitetsalgoritm . För ett exempel på en tidssubexponentiell algoritm, se Ordningskalkylalgoritm .
Algoritmen är känd under två namn.
Förnamnet är Pollards "känguru"-algoritm . Namnet hänvisar till en analogi som används i artikeln där algoritmen föreslogs. Artikeln förklarar algoritmen i termer av att använda en tam känguru för att fånga en vild . Som Pollard [2] förklarade , var denna analogi inspirerad av ett "charmigt" dokument som publicerades i samma nummer av Scientific American som publiceringen av RSA Public Key Cryptosystem . Artikel [3] beskriver ett experiment där "energikostnaden för att flytta en känguru, mätt i termer av syreförbrukning vid olika hastigheter, bestämdes genom att placera en känguru på ett löpband ".
Det andra namnet är Pollards lambdaalgoritm . Mycket likt namnet på Pollards andra algoritm för diskret logaritm, ρ-algoritmen , och detta namn beror på algoritmens visualiseringslikhet med den grekiska bokstaven lambda ( ). Den korta raden i bokstaven lambda motsvarar sekvensen . Följaktligen motsvarar den långa raden den sekvens som "krockar med" den första sekvensen (liknande mötet mellan de korta och långa linjerna i en bokstav).
Pollard föredrar att använda namnet "kängurualgoritm" [4] för att undvika förväxling med vissa parallella versioner av ρ-algoritmen, som också kallas "lambdaalgoritmer".
Talteoretiska algoritmer | |
---|---|
Enkelhetstest | |
Hitta primtal | |
Faktorisering | |
Diskret logaritm | |
Hitta GCD | |
Modulo aritmetik | |
Multiplikation och division av tal | |
Beräkna kvadratroten |