موضوع مقاله: الگوریتم ضرب | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # الگوریتم ضرب | مقدمه: الگوریتم ضرب مجموعه‌ای از دستورالعمل‌های محاسباتی خوش‌تعریف است، که به وسیلهٔ آن می‌توان حاصل ضرب دو عدد را بدست آورد. | ## بخش 1: الگوریتم ضرب | الگوریتم‌های مختلفی برای ضرب دو عدد ارائه داده شده‌اند که با توجه به طول اعداد و مکان استفاده از آن‌ها از الگوریتم‌های مختلف استفاده می‌کنیم. شیوه‌های باستانی ضرب دو عدد شیوهٔ ضرب در مصر باستان نام دیگر این روش شیوهٔ ضرب روستاییان است. در مصر باستان مردم شیوهٔ جالبی برای ضرب اعداد استفاده می‌کردند، که بر مبنای مضرب دو اعداد کار می‌کرد. در این روش جدولی از اعداد تشکیل می‌دهیم و در سطر اول آن عدد یک و عدد ضرب‌کننده را می‌نویسیم. در هر سطر بعدی عدد سطر بالا را در دو ضرب می‌کنیم و این کار را آنقدر ادامه می‌دهیم تا اولین عدد سطر از ضرب‌شونده (مضروب) بیشتر شود. برای مثال اگر بخواهیم حاصل ضرب ۳۱ در ۴۲ را بدست آوریم جدولی به صورت زیر تشکیل می‌دهیم. ۳۱ ۱ ۶۲ ۲ ۱۲۴ ۴ ۲۴۸ ۸ ۴۹۶ ۱۶ ۹۹۲ ۳۲ ۱۹۸۴ ۶۴ <-- بزرگتر از ۴۲ است پس متوقف می‌شویم در ستون چپ جمع اعداد ۲ و ۸ و ۳۲ عدد ۴۲ را می‌سازند پس با جمع اعداد روبرویشان یعنی ۶۲ و ۲۴۸ و ۹۹۲ حاصل ضرب بدست می‌آید. ۱۳۰۲ = ۶۲ + ۲۴۸ + ۹۹۲ = ۳۱×۴۲ شیوهٔ ضرب در چین باستان چینیان باستان برای ضرب دو عدد از شیوه‌ای تصویری استفاده می‌کردند. برای مثال اگر بخواهیم دو عدد ۱۶ و ۲۴ را در هم ضرب کنیم خط‌هایی عمودی برای ۱۶ در نظر می‌گیریم به صورتی که خط‌های سمت چپ نشان دهندهٔ دهگان و خط‌های سمت راست نشان دهندهٔ یکان باشد. به همین طریق خط‌هایی افقی در نظر می‌گیریم به طوری که خط‌های بالا دهگان و خط‌های پایین نشان‌دهندهٔ یکان عدد ۲۴ باشد.حال تعداد برخورد خط‌ها با یک‌دیگر را بررسی می‌کنیم. اگر هر ردیف از راست به چپ نشان‌دهندهٔ یک ارزش مکانی باشد، می‌توانیم حاصل ضرب را پیدا کنیم. تعداد برخوردها در ردیف ارزش دهگان ۱۶ است و ۲ واحد هم از یکان اضافه شده پس به ارزش دهگان ۸ است و یک واحد به صدگان اضافه می‌کند. ضرب‌شبکه‌ای روش شبکه‌ای یا روش جعبه‌ای روشی برای ضرب کردن است که با کمک گرفتن از یک جدول شبکه ای حاصل ضرب دو عدد را بدست می‌آوریم. | ## بخش 2: الگوریتم ضرب | برای انجام عمل ضرب از این شیوه ابتدا باید اعداد را به صورت حاصل جمع ارزش مکانی یکان و دهگان و … در نظر بگیریم. حال با ضرب کردن اعداد سطر سطر اول و ستون اول و نوشتن آن‌ها در خانهٔ مربوط به خودشان این جدول را تکمیل می‌کنیم. از آنجا که این ضرب‌ها بدون در نظر گرفتن صفرها ضرب عدد یک‌رقمی در یک‌رقمی است انجام آن ساده است. ×۳۰۵۲۰۶۰۰۱۰۰۶۱۸۰۳۰ با توجه به جدول بالا حاصل ضرب دو عدد ۳۵ و ۲۶ به صورت جمع زیر است. ۹۱۰ = ۳۰ + ۱۸۰ + ۶۰۰ + ۱۰۰ = ۳۵ × ۲۶ ضرب طولانی این روش ضرب کردن همان روشی است که در مدارس به دانش‌آموزان تدریس می‌شود. اعداد را در زیر هم می‌نویسیم و اعدادی که ارزش مکانی یکسان دارند در زیر یکدیگر قرار می‌دهیم. ضرب کردن یکان عدد پایین در یکان عدد بالا و نوشتن آن عدد به عنوان یکان عددی که قرار است به دست آوریم. اگر حاصل بزرگ‌تر از نه شد یکان را نوشته و بالای ارزش مکانی قبلی مقدار دهگان حاصل را می‌نویسیم. حال مرحلهٔ دو را با ضرب یکان پایین در رقم ارزش مکانی بعدی انجام می‌دهیم و این کار را آنقدر تکرار می‌کنیم تا یکان عدد او را در تمام اعداد بالا ضرب کرده باشیم. مرحلهٔ دو و سه را با ضرب کردن عدد یکان عدد بالا در ارزش مکانی بعدی عدد پایین انجام می‌دهیم و حاصل را در زیر عدد بدست آمده از مرحلهٔ قبل به گونه‌ای می‌نویسیم که یکان عدد جدید زیر دهگان عدد حاصل از مرحلهٔ قبل قرار گیرد. با جمع اعداد نوشته شده در زیر هم با در نظر گرفتن این نکته که اگر سمت راست عددی خالی بود در آن‌جا صفر قرار می‌دهیم حاصل ضرب دو عدد داده شده بدست می‌آید. مثال برای ضرب دو عدد ۲۳۹۵۸۲۳۳ و ۵۸۳۰ در هم اعداد را به صورت زیر نوشته و حاصل ضرب را بدست می‌آوریم. ۲۳۹۵۸۲۳۳ ۵۸۳۰ × ——————————————— ۰۰۰۰۰۰۰۰ (= ۲۳٬۹۵۸٬۲۳۳ × ۰) ۷۱۸۷۴۶۹۹ (= ۲۳٬۹۵۸٬۲۳۳ × ۳۰) ۱۹۱۶۶۵۸۶۴ (= ۲۳٬۹۵۸٬۲۳۳ × ۸۰۰) ۱۱۹۷۹۱۱۶۵ (= ۲۳٬۹۵۸٬۲۳۳ × ۵٬۰۰۰) ——————————————— ۱۳۹۶۷۶۴۹۸۳۹۰ (= ۱۳۹٬۶۷۶٬۴۹۸٬۳۹۰) محاسبهٔ پیچیدگی الگوریتم طولانی ضرب اگر دو عددی که در هم ضرب می‌کنیم به طول n بود در هر مرحله n ضرب انجام می‌دهیم و تعداد مراحل n است، پس پیچیدگی این الگوریتم است. | ## بخش 3: الگوریتم ضرب | ضرب با استفاده از جدول مشبکی شیوه‌ای برای ضرب کردن است که از یک جدول مشبکی استفاده می‌کند. این شیوه در زمان قرون وسطی به‌وجود آمده و در سرزمین‌های مختلفی از آن استفاده می‌شد. در این روش یک جدول مشبکی کشیده می‌شود و رقم‌های دو عددی که می‌خواهیم آن‌ها را در هم ضرب کنیم در بالا و سمت راست جدول کشیده می‌شود. ما باید هر خانهٔ آن را به صورتی پر کنیم که با ضرب عدد بالای ستون و سمت راست سطر یکان عدد حاصل در پایین و دهگان آن در بالای خط موجود در خانه نوشته شود.پس از پر کردن تمامی خانه‌های جدول، جدول به تصویر مرحلهٔ دوم تبدیل می‌شود؛ که بعد از این مرحله باید از پایین راست جدول به سمت بالا حرکت کنیم و سپس به سمت چپ برویم و در هر مرحله جمع خانه‌های مثلثی همسایه (خانه‌های همسایه مثلث‌هایی هستند ساق‌هایشان مشترک است) را حساب کنیم. اگر این جمع بیشتر از نه شد یکان آن را نوشته و عدد دهگان را با عدد مرحلهٔ بعد جمع می‌کنیم.در آخر تصویر جدول به شکل جدول آمده در مرحلهٔ سوم است.همان‌طور که مشاهده می‌کنید جواب بدست آمده ۱۲۳۵۴ است. الگوریتم‌های سریع ضرب برای ورودی‌های بزرگ الگوریتم کاراتسوبا الگوریتم کاراتسوبا یک الگوریتم سریع برای ضرب است که از الگوریتم تقسیم و حل برای ضرب دو عدد استفاده می‌کند. اگر x و y بیانگر دو عدد در مبنای b به طول n باشند، ما هر کدام از این اعداد را به دو قسمت پرارزش(H) و کم ارزش (L) تقسیم می‌کنیم. با یک راه حل ساده می‌توان تعداد ضرب‌های انجام شده (زیرمسئله‌ها) را از ۴ به ۳ رساند. برای بدست آوردن حاصل ضرب ۱۲ و ۴۳ داریم به همین روش برای مسئلهٔ اصلی ۷۱۴ = d و e با توجه به مقدار بدست آمده برای a و d، برابر ۱۷۱۴ است. پس نتیجه می‌شود که تحلیل زمان اجرای الگوریتم این الگوریتم هر مسئله را به ۳ زیر مسئله به طول نصف مسئله-- قبلی تقسیم می‌کند پس زمان اجراء آن به صورت زیر است. با توجه به قضیه اصلی در الگوریتم‌ها می‌توانیم زمان اجرای این الگوریتم را بدست آوریم. | ## جمع‌بندی | الگوریتم توم ـ کوک الگوریتم توم ـ کوک که گاهی با نام توم ـ ۳ شناخته می‌شود، ابتدا توسط اندری توم ارائه شد و سپس استفان کوک آن را به صورت شفاف‌تر در پایان‌نامه دکتری خود بیان کرد.