БлогNot. Умножение Карацубы или самые красивые алгоритмы в мире :)

Умножение Карацубы или самые красивые алгоритмы в мире :)

Спросили тут недавно: а какой самый красивый алгоритм я знаю?

Если не размышлять слишком долго над понятием красоты в программировании, навскидку приходят в голову примерно следующие решения:

Ну, а чтобы заметка не была "пустой", вот правильное по виду рекурсивное умножение Карацубы на Javascript, скорее, демка, чем действительно быстродействующее (можно выполнить как код HTML):

<div id="karatsubaResult"></div>
<script type="text/javascript">
function karatsubaMultiplication (x, y) {
 if (x < 10 || y < 10) return x*y;
 let n = Math.min (('' + x).length, ('' + y).length);
 let pow10HalfN = Math.pow (10,     parseInt(n / 2));
 let pow10N     = Math.pow (10, 2 * parseInt(n / 2));
 let a = parseInt (x / pow10HalfN);
 let b = x % pow10HalfN;
 let c = parseInt (y / pow10HalfN);
 let d = y % pow10HalfN;
 return pow10N * karatsubaMultiplication(a, c) + 
   pow10HalfN * (karatsubaMultiplication(a, d) + karatsubaMultiplication(b, c)) + 
   karatsubaMultiplication(b, d);
}

document.getElementById('karatsubaResult').innerHTML = ''+karatsubaMultiplication(12345,6789);
</script>

19.06.2018, 23:01 [2513 просмотров]


теги: javascript список алгоритм

К этой статье пока нет комментариев, Ваш будет первым