الگوریتم ضرب
الگوریتم ضرب مجموعه‌ای از دستورالعمل‌های محاسباتی خوش‌تعریف است، که به وسیلهٔ آن می‌توان حاصل ضرب دو عدد را بدست آورد. الگوریتم‌های مختلفی برای ضرب دو عدد ارائه داده شده‌اند که با توجه به طول اعداد و مکان استفاده از آن‌ها از الگوریتم‌های مختلف استفاده می‌کنیم.
نام دیگر این روش شیوهٔ ضرب روستاییان است. در مصر باستان مردم شیوهٔ جالبی برای ضرب اعداد استفاده می‌کردند، که بر مبنای مضرب دو اعداد کار می‌کرد. در این روش جدولی از اعداد تشکیل می‌دهیم و در سطر اول آن عدد یک و عدد ضرب‌کننده را می‌نویسیم. در هر سطر بعدی عدد سطر بالا را در دو ضرب می‌کنیم و این کار را آنقدر ادامه می‌دهیم تا اولین عدد سطر از ضرب‌شونده (مضروب) بیشتر شود. حال در ستون اول اعدادی که ضرب‌شونده را با عملگر جمع می‌سازند می‌یابیم. با جمع مقادیر پیدا شده حاصل ضرب اعداد را بدست می‌آوریم.
برای مثال اگر بخواهیم حاصل ضرب ۳۱ در ۴۲ را بدست آوریم جدولی به صورت زیر تشکیل می‌دهیم. در ستون چپ جمع اعداد ۲ و ۸ و ۳۲ عدد ۴۲ را می‌سازند پس با جمع اعداد روبرویشان یعنی ۶۲ و ۲۴۸ و ۹۹۲ حاصل ضرب بدست می‌آید.
چینیان باستان برای ضرب دو عدد از شیوه‌ای تصویری استفاده می‌کردند. برای مثال اگر بخواهیم دو عدد ۱۶ و ۲۴ را در هم ضرب کنیم خط‌هایی عمودی برای ۱۶ در نظر می‌گیریم به صورتی که خط‌های سمت چپ نشان دهندهٔ دهگان و خط‌های سمت راست نشان دهندهٔ یکان باشد. به همین طریق خط‌هایی افقی در نظر می‌گیریم به طوری که خط‌های بالا دهگان و خط‌های پایین نشان‌دهندهٔ یکان عدد ۲۴ باشد.حال تعداد برخورد خط‌ها با یک‌دیگر را بررسی می‌کنیم. اگر هر ردیف از راست به چپ نشان‌دهندهٔ یک ارزش مکانی باشد، می‌توانیم حاصل ضرب را پیدا کنیم. برای این مثال ۲۴ برخورد در ردیف ارزش مکانی یکان اتفاق افتاده است. یعنی ارزش یکان ۴ است و به ارزش دهگان ۲ واحد اضافه می‌کنیم. تعداد برخوردها در ردیف ارزش دهگان ۱۶ است و ۲ واحد هم از یکان اضافه شده پس به ارزش دهگان ۸ است و یک واحد به صدگان اضافه می‌کند. به همین طریق ارزش صدگان ۳ است. پس حاصل ضرب اعداد مثال‌زده‌شده ۳۸۴ است.
روش شبکه‌ای یا روش جعبه‌ای روشی برای ضرب کردن است که با کمک گرفتن از یک جدول شبکه ای حاصل ضرب دو عدد را بدست می‌آوریم. برای انجام عمل ضرب از این شیوه ابتدا باید اعداد را به صورت حاصل جمع ارزش مکانی یکان و دهگان و … در نظر بگیریم. سپس این اعداد را در سطر و ستون اول جدولی شبکه‌ای قرار دهیم. حال با ضرب کردن اعداد سطر سطر اول و ستون اول و نوشتن آن‌ها در خانهٔ مربوط به خودشان این جدول را تکمیل می‌کنیم. از آنجا که این ضرب‌ها بدون در نظر گرفتن صفرها ضرب عدد یک‌رقمی در یک‌رقمی است انجام آن ساده است. حاصل ضرب دو عدد معادل جمع خانه‌های درونی این جدول است.
به عنوان مثال جدول شبکه‌ای ضرب دو عدد ۳۵ و ۲۶ به صورت زیر است.
با توجه به جدول بالا حاصل ضرب دو عدد ۳۵ و ۲۶ به صورت جمع زیر است.
این روش ضرب کردن همان روشی است که در مدارس به دانش‌آموزان تدریس می‌شود. این روش برای ضرب اعداد بزرگ در هم کارآمد است.
الگوی انجام این روش به صورت مرحله به مرحله در زیر توضیح داده شده‌است.
برای ضرب دو عدد ۲۳۹۵۸۲۳۳ و ۵۸۳۰ در هم اعداد را به صورت زیر نوشته و حاصل ضرب را بدست می‌آوریم.
اگر دو عددی که در هم ضرب می‌کنیم به طول n بود در هر مرحله n ضرب انجام می‌دهیم و تعداد مراحل n است، پس پیچیدگی این الگوریتم formula_1است.
شیوه‌ای برای ضرب کردن است که از یک جدول مشبکی استفاده می‌کند. این شیوه در زمان قرون وسطی به‌وجود آمده و در سرزمین‌های مختلفی از آن استفاده می‌شد. امروزه نیز این روش در برنامهٔ درسی بعضی کشورها تدریس می‌شود.
در این روش یک جدول مشبکی کشیده می‌شود و رقم‌های دو عددی که می‌خواهیم آن‌ها را در هم ضرب کنیم در بالا و سمت راست جدول کشیده می‌شود. جدول مشبکی ضرب دو عدد ۵۸ و ۲۱۳ به صورت زیر (تصویر مرحلهٔ اول) است. ما باید هر خانهٔ آن را به صورتی پر کنیم که با ضرب عدد بالای ستون و سمت راست سطر یکان عدد حاصل در پایین و دهگان آن در بالای خط موجود در خانه نوشته شود.پس از پر کردن تمامی خانه‌های جدول، جدول به تصویر مرحلهٔ دوم تبدیل می‌شود؛ که بعد از این مرحله باید از پایین راست جدول به سمت بالا حرکت کنیم و سپس به سمت چپ برویم و در هر مرحله جمع خانه‌های مثلثی همسایه (خانه‌های همسایه مثلث‌هایی هستند ساق‌هایشان مشترک است) را حساب کنیم. اگر این جمع بیشتر از نه شد یکان آن را نوشته و عدد دهگان را با عدد مرحلهٔ بعد جمع می‌کنیم.در آخر تصویر جدول به شکل جدول آمده در مرحلهٔ سوم است.همان‌طور که مشاهده می‌کنید جواب بدست آمده ۱۲۳۵۴ است.
الگوریتم کاراتسوبا یک الگوریتم سریع برای ضرب است که از الگوریتم تقسیم و حل برای ضرب دو عدد استفاده می‌کند. اگر x و y بیانگر دو عدد در مبنای b به طول n باشند، ما هر کدام از این اعداد را به دو قسمت پرارزش(H) و کم ارزش (L) تقسیم می‌کنیم. به این ترتیب حاصل ضرب به صورت زیر می‌شود.
X = X b + X
Y= Y b + Y
(XY = (X b + X) (Y b + Y
XY = xyb + (xy + xy)b + xy
به این ترتیب مسئله به چهار زیرمسئله تقسیم می‌شود؛ و این تقسیم ادامه پیدا می‌کند تا به زیرمسئله‌های ساده‌برسد. حاصل ضرب به صورت بازگشتی به دست می‌آید.
با یک راه حل ساده می‌توان تعداد ضرب‌های انجام شده (زیرمسئله‌ها) را از ۴ به ۳ رساند.
formula_2
formula_3
formula_4
formula_5
با داشتن a و b می‌توان تنها با استفاده از ۳ جمله این ضرب را انجام داد.
فرض کنید می‌خواهیم عدد ۱۲۳۴ را در ۴۳۲۱ ضرب کنیم. برای اینکار به صورت زیر عمل می‌کنیم.
formula_6
formula_7
formula_8
ابتدا a و b و e را بدست می‌آوریم.
formula_9
formula_10
formula_11
حال بدست آوردن هر کدام از این ضرب‌ها خود یک زیر مسئله است. برای بدست آوردن حاصل ضرب ۱۲ و ۴۳ داریم
formula_12
formula_13
formula_14
formula_15
به همین روش برای مسئلهٔ اصلی ۷۱۴ = d و e با توجه به مقدار بدست آمده برای a و d، برابر ۱۷۱۴ است.
پس نتیجه می‌شود که
formula_16
این الگوریتم هر مسئله را به ۳ زیر مسئله به طول نصف مسئله-- قبلی تقسیم می‌کند پس زمان اجراء آن به صورت زیر است.
formula_17
با توجه به قضیه اصلی در الگوریتم‌ها می‌توانیم زمان اجرای این الگوریتم را بدست آوریم.
formula_18
formula_19
پس به اندازهٔ formula_20 طول می‌کشد تا بتوانیم حاصل این ضرب را بدست آوریم.
الگوریتم توم ـ کوک که گاهی با نام توم ـ ۳ شناخته می‌شود، ابتدا توسط اندری توم ارائه شد و سپس استفان کوک آن را به صورت شفاف‌تر در پایان‌نامه دکتری خود بیان کرد.الگوریتم توم ـ کوک انواع مختلفی دارد که الگوریتم توم ـ ۳ یکی از آن‌هاست. این الگوریتم تعمیم داده شدهٔ الگوریتم کاراتسوبا است. به‌طور دقیق‌تر الگوریتم کاراتسوبا حالت خاصی از الگوریتم توم ـ کوک است. پیچیدگی یک الگوریتم توم ـ k به صورت formula_21 است.