تفکر الگوریتمیمقدماتی۶ دقیقه مطالعهPython 3.12+

الگوریتم چیست؟

تعریف دقیق الگوریتم، ویژگی‌های یک الگوریتم درست و تبدیل یک مسئلهٔ واقعی به گام‌های قابل‌اجرا در پایتون.

آنچه در این درس می‌آموزید

  • تعریف دقیق الگوریتم و چهار ویژگی آن را بدانید
  • یک مسئلهٔ ساده را به گام‌های شمرده تبدیل کنید
  • شبه‌کد را بخوانید و آن را به کد پایتون ترجمه کنید
نویسنده: تیم داکنامه · بازبینی: ۲۰۲۶-۱۰-۳۰
فهرست مطالب

هر برنامه‌ای که تا حالا اجرا کرده‌اید — از ماشین‌حساب تا موتور جست‌وجو — در نهایت یک چیز بوده است: یک الگوریتم که با زبان برنامه‌نویسی نوشته شده. پیش از آنکه حرف‌زدن دربارهٔ سرعت و بهینگی معنا پیدا کند، باید بدانید الگوریتم دقیقاً چیست و چگونه یک مسئلهٔ انسانی را به دستورهای شمرده و قابل‌اجرا تبدیل می‌کنیم. این مهارت را «تفکر الگوریتمی» می‌نامند و پایان‌نامه نیست؛ یک عادت ذهنی است که در این دوره تمرینش می‌کنیم.

تعریف دقیق

الگوریتم (Algorithm) یک دنبالهٔ متناهی از گام‌های روشن و دقیق است که از یک ورودی شروع می‌شود و به یک خروجی مشخص می‌رسد. چهار کلمهٔ این جمله بار دارد:

  • متناهی — بالاخره تمام می‌شود؛ برنامه‌ای که هرگز متوقف نشود جواب مسئله را تحویل نمی‌دهد.
  • روشن و دقیق — هر گام بی‌ابهام است؛ «چند تا سبزیجات را کمی سرخ کن» الگوریتم نیست، «روغن را ۵ دقیقه در حرارت متوسط گرم کن» تقریباً هست.
  • ورودی — صفر یا چند دادهٔ اولیه از مسئله می‌گیرد.
  • خروجی — دست‌کم یک نتیجهٔ مرتبط با مسئله تولید می‌کند.

راستی واژهٔ الگوریتم غریبه نیست: از نام محمد بن موسی خوارزمی، ریاضی‌دان ایرانی سدهٔ نهم میلادی، گرفته شده که آثارش ریاضیات را به اروپا رساندند.

الگوریتم در زندگی روزمره

دستور پخت، الگوریتم است: ورودی (مواد اولیه)، گام‌های دقیق و خروجی (غذا). اما تفاوت مهمی هم با برنامه دارد: انسانِ آشپز، ابهام را خودش جبران می‌کند. کامپیوتر این توانایی را ندارد؛ هر چیزی که نگویید، انجام نمی‌دهد و هر چیزی که مبهم بگویید، اشتباه می‌رود.

مسئلهٔ ساده‌ای را بردارید: «بزرگ‌ترین عدد در یک فهرست را پیدا کن». یک انسان نگاهی می‌اندازد و جواب را می‌گوید؛ اما الگوریتم باید گام‌به‌گام پیش برود:

  1. اولین عدد را «کاندیدای بزرگ‌ترین» بگیر.
  2. بقیهٔ اعداد را یکی‌یکی ببین؛ هر عددی که از کاندیدا بزرگ‌تر بود، آن را کاندیدای تازه کن.
  3. وقتی فهرست تمام شد، کاندیدا جواب است.

از شبه‌کد تا کد پایتون

این گام‌ها را می‌توان به یک «شبه‌کد» (Pseudocode) نوشت؛ متنی فارسی و بدون نحو خاص که فقط منطق را نشان می‌دهد:

text
۱. کاندیدا ← عددِ نخستِ فهرست
۲. برای هر عدد از بقیهٔ فهرست:
       اگر عدد > کاندیدا:
             کاندیدا ← عدد
۳. خروجی: کاندیدا

حالا ترجمهٔ مستقیم به پایتون:

find_max.py
numbers = [12, 5, 30, 7, 25]
maximum = numbers[0]
for n in numbers[1:]:
    if n > maximum:
        maximum = n
print("Largest number:", maximum)
خروجی کد

Largest number: 30

خط‌به‌خط ببینید:

  1. maximum = numbers[0] همان گام ۱ است؛ کاندیدای اولیه برابر نخستین عدد.
  2. for n in numbers[1:] یعنی «برای هر عدد از فهرست به‌جز اولی» — برش [1:] از عنصر دوم به بعد را می‌دهد.
  3. if n > maximum شرط گام ۲ است و سطر تورفته‌اش کاندیدا را به‌روز می‌کند.
  4. توجه کنید که عدد ۳۰ در خروجی با ارقام انگلیسی چاپ می‌شود؛ چون پایتون آن را چاپ می‌کند، نه ما.

به‌سادگی، یک مسئلهٔ انسانی تبدیل شد به ۶ خط کد قابل‌اجرا. الگوریتم قبل از کد وجود داشت؛ کد فقط پوشاک الگوریتم به زبان پایتون است.

تمرین‌ها

تمرین

تمرین ۱ — مجموع اعداد زوج

الگوریتمی بنویسید که مجموع اعداد زوج یک فهرست را حساب کند. اول شبه‌کد آن را در دو سطر بنویسید، بعد در پایتون پیاده کنید و روی فهرست [3, 8, 5, 12, 7, 6] اجرا کنید. (یادآوری: باقیماندهٔ تقسیم در پایتون با عملگر % گرفته می‌شود.)

python
# Write your code here
نمایش راه‌حل

شبه‌کد: «برای هر عدد از فهرست، اگر باقیماندهٔ تقسیمش بر ۲ صفر بود، آن را به مجموع اضافه کن؛ در پایان مجموع را چاپ کن.»

python
numbers = [3, 8, 5, 12, 7, 6]
total = 0
for n in numbers:
    if n % 2 == 0:
        total = total + n
print(total)
خروجی کد

26

::: :::

تمرین

تمرین ۲ — الگوریتم بشمار

دستور «پیدا کردن شمارهٔ تلفن یک مغازه در راهنمای کاغذی» را به شکل الگوریتم دقیق بنویسید: ورودی و خروجی را مشخص کنید و گام‌ها را طوری بنویسید که کسی که مغازه را نمی‌شناسد هم بتواند اجرایش کند.

text
# Write your pseudocode here
نمایش راه‌حل

یک پاسخ ممکن:

text
ورودی: نام مغازه
۱. دفترچه را از صفحهٔ اول باز کن.
۲. تا رسیدن به آخر دفترچه، صفحه‌ها را ورق بزن:
        اگر در صفحهٔ فعلی نام مغازه بود، شمارهٔ کنارش را گزارش کن و تمام.
۳. اگر آخر دفترچه رسید و نام پیدا نشد، گزارش کن: «در فهرست نیست».

ورودی روشن، گام‌های متناهی و دقیق و دو خروجی ممکن دارد. نکتهٔ آموزشی: این الگوریتم همان «جست‌وجوی خطی» است که در درس بعدی از نظر سرعتش حساب‌کتاب خواهیم کرد.

:::

خلاصه

  • الگوریتم دنباله‌ای متناهی، روشن و دقیق از گام‌هاست که از ورودی به خروجی می‌رسد.
  • کامپیوتر ابهام را جبران نمی‌کند؛ هر گام باید بدون حدس قابل‌اجرا باشد.
  • شبه‌کد راهی برای نوشتن منطق قبل از درگیر شدن با نحو زبان برنامه‌نویسی است.
  • «بزرگ‌ترین عدد را پیدا کن» یک الگوریتم خطی ساده دارد که با یک متغیر کاندیدا و یک حلقه ساخته می‌شود.

می‌توانید الگوریتم بنویسید؛ اما الگوریتمِ بد و الگوریتمِ خوب چه فرقی دارند و چطور با عدد صحبت کنیم؟ در درس بعدی زبان مشترک مهندسان برای «هزینهٔ الگوریتم» را یاد می‌گیرید: نماد Big-O.

منابع و ارجاع‌ها

درس‌های مرتبط