Bir taban sayının belirtilen üssünü böl-ve-fethet (Binary Exponentiation) yöntemiyle logaritmik zamanda hesaplar.
Üs alma işlemi, bir a sayısının n kere kendisiyle çarpılmasıdır (a^n). Sedgewick, naive yöntemin n adet çarpım yaparak O(n) zamanda çalıştığını, ancak üssün ikili (binary) temsilini kullanan hızlı üs alma yönteminin bunu O(log n) çarpıma indirdiğini anlatır.
Algoritma, üssün tek veya çift olma durumuna göre tabanı karesiyle günceller veya sonucu tabanla çarpar. Bu yöntem, kriptografide özellikle büyük modüler üs alma işlemlerinde (a^n mod m) kritik öneme sahiptir.
Aşağıdaki uygulamalar PDF kaynaklarındaki pseudo kod akışını modern veri yapılarıyla ifade eder. Kenar durumları görünür bırakıldığı için örnekler doğrudan test edilebilir.
1function fastExponentiation(a: number, n: number): number {2 if (n === 0) return 1;3 let result = 1, base = n < 0 ? 1 / a : a, exp = Math.abs(n);4 while (exp > 0) {5 if (exp % 2 === 1) { result *= base; exp -= 1; }6 base *= base;7 exp = Math.floor(exp / 2);8 }9 return result;10}Taban ve üssü noktalı virgülle ayırın. Örnek: 2; 10 veya 3; 13
Taban ve üssü noktalı virgülle ayırın. Örnek: 2; 10 veya 3; 13
En İyi Durum: O(1)
Ortalama Durum: O(log n)
En Kötü Durum: O(log n)
O(1) - Giriş boyutu ne olursa olsun, algoritma her zaman aynı sürede çalışır.
Exponentiation (Üs Alma / Hızlı Üs Alma) Algoritması ile benzer veya alternatif olarak değerlendirilebilecek diğer başlıklar: