الگوریتم اقلیدسی — به زبان ساده

۲۸۵۸ بازدید
آخرین به‌روزرسانی: ۲۰ تیر ۱۴۰۲
زمان مطالعه: ۲ دقیقه
الگوریتم اقلیدسی — به زبان ساده

در این مطلب، «الگوریتم اقلیدسی» (Euclidean Algorithm) برای محاسبه بزرگ‌ترین مقسوم‌علیه مشترک (ب.م.م) مورد بررسی قرار گرفته است. «علوم کامپیوتر» (Computer Science)، علمی پیرامون کامپیوترها است (دستکم بر اساس تعریف). مفهوم کامپیوترها برای اولین بار در سال ۱۸۰۰ بیان شد. کامپیوترها منجر به انقلابی در جوامع انسانی و صنایع شدند و می‌توان به جرات گفت که امروزه دیگر انسان‌ها نمی‌توانند به زندگی بدون وجود این کامپیوترها فکر کنند. این در حالی است که الگوریتم‌ها قدمت بیشتری دارند و هزاران سال است که وجود داشته‌اند. برخی از الگوریتم‌های اولیه‌ای که در دوران‌های بسیار دور معرفی شده‌اند، به طرز عجیبی همچنان کاربرد دارد.

یکی از این الگوریتم‌ها به نام «الگوریتم اقلیدسی» (Euclidean Algorithm) در کتاب «اصول اقلیدس» (Euclid's Elements) آمده و مربوط به ۳۰۰ سال پیش از میلاد مسیح است. این الگوریتم، یک راهکار ساده برای پیدا کردن «بزرگ‌ترین مقسوم‌علیه مشترک» یا «ب.م.م» (Greatest Common Divisor | GCD) دو عدد است و در موارد گوناگونی مانند کاهش کسرها کاربرد دارد. اولین روشی که توسط اقلیدس معرفی شده است، از تفریق ساده استفاده می‌کند.

function euclid_sub(a::Int64, b::Int64)
    a = abs(a)
    b = abs(b)

    while (a != b)
        if (a > b)
            a -= b
        else
            b -= a
        end
    end

    return a
end

در اینجا، هر دو عدد به صورت یک خط رو به بالا کشیده می‌شوند و در هر گام، عدد کوچکتر از عدد بزرگ‌تر تفریق می‌شود. هنگامی که هر دو مقدار با یکدیگر برابر شدند، به مقدار حاصل، «بزرگ‌ترین مقسوم‌علیه مشترک» گفته می‌شود.

نمودار دو عدد a و b و تغییرات آن‌ها در گام‌های مختلف، به صورت زیر است.

الگوریتم اقلیدسی -- به زبان ساده

پیاده‌سازی نوین این الگوریتم، معمولا با استفاده از عملگر باقیمانده انجام می‌شود و به صورت زیر است.

function euclid_mod(a::Int64, b::Int64)
    a = abs(a)
    b = abs(b)

    while(b != 0)
        b,a = a%b,b
    end

    return a
end

در اینجا، b به عنوان باقی‌مانده a%b و a برابر با مقداری است که b در گام پیشین بوده است. با توجه به چگونگی کار کردن عملگر ماژول‌ها، خروجی این روش نیز مشابه با روش مبتنی بر تفریق است. اما با نشان دادن تغییرات a و b در هر گام، می‌توان نشان داد که این روش نسبت به روش پیشین، نیاز به گام‌های کمتری دارد.

روش اقلیدسی، مبنایی برای بسیاری از الگوریتم‌های دیگر در تاریخ علوم کامپیوتر است و در الگوریتم‌های آینده نیز استفاده خواهد شد. این نکته نیز جالب توجه است که یک الگوریتم بسیار قدیمی، همچنان دارای کاربردهای نوین است. البته، الگوریتم‌های متعدد دیگری نیز وجود دارند که می‌توان از آن‌ها برای محاسبه بزرگ‌ترین مقسوم‌علیه مشترک دو عدد استفاده کرد و نسبت به روش اقلیدسی نیز در برخی موارد، بهتر عمل می‌کنند. اینکه امروز و پس از گذشت بالغ بر دو هزار سال از مرگ اقلیدس، پیرامون روش‌های ارائه شده توسط او صحبت می‌شود، نشانگر محدود نبودن ریاضیات به زمان و جغرافیا است.

^^

بر اساس رای ۲۲ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
algorithm-archive
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *