Karatsuba Algoritması
Sayıları Daha Hızlı Çarpmanın Yolu
Karatsuba algoritması, iki büyük sayıyı çarpmanın, klasik (veya “okul”) çarpma yönteminden daha verimli olan bir böl ve yönet (divide and conquer) algoritmasıdır. Anatolii Alexeevitch Karatsuba tarafından 1960 yılında keşfedilen bu yöntem, haneli iki sayıyı çarpma karmaşıklığını, geleneksel yönteminden seviyesine düşürür. Bu iyileştirme, özellikle astronomik büyüklükteki sayılarla (örneğin kriptografi ve bilgisayımlı cebirde) uğraşırken çok önemli bir hız kazancı sağlar.
Algoritmanın temel mantığı, çarpılacak sayıları daha küçük parçalara bölmek ve bu parçalar arasında yapılan birkaç çarpma işlemini, daha az sayıda toplama/çıkarma işlemiyle birleştirerek sonucu oluşturmaktır. İki -haneli ve sayısını çarpmak istediğimizi varsayalım. Bu sayıları, her biri haneli olacak şekilde iki parçaya ayırabiliriz:
Burada , ve sayıların daha anlamlı (yüksek mertebeli) kısımlarını, ve ise daha az anlamlı (düşük mertebeli) kısımlarını temsil eder. Klasik çarpma yönteminde, bu dört parçayı birbiriyle çarparak dört çarpım yapmamız gerekir:
Karasuba’nın dahice içgörüsü, bu dört çarpım yerine sadece üç çarpım yapmanın mümkün olduğunu fark etmesiydi. terimini, çarpımını hesaplayarak dolaylı yoldan bulabiliriz:
- çarpımını hesapla.
- çarpımını hesapla.
- çarpımını hesapla.
- değerini bulmak için, 3. adımdaki sonuçtan ilk ikisini çıkar:
Sonuç olarak, ve ‘nin çarpımını sadece üç temel çarpım ( ve ) kullanarak ifade edebiliriz:
Bu üç çarpım da orijinal sayıların yarı boyutundaki parçalarla yapıldığı için, bu yöntem özyinemeli (recursive) olarak uygulanabilir. Her özyineleme adımında problem boyutu yarıya iner ancak 3 alt probleme ayrılır. Bu da zaman karmaşıklığını yapar. Bu, özellikle binlerce haneli sayılar için, ‘den çok daha verimli bir yoldur ve günümüzdeki en hızlı çarpma algoritmalarının (örneğin Schönhage–Strassen algoritması) temelini oluşturur.