برنامه نویسی

واقعاً الگوریتم چیست؟

احتمالاً این عبارت را دیده و شنیده اید “الگوریتم چیست؟” بارهای بی شماری حتی من قبلاً سعی کرده ام آن را توضیح دهم. اما همیشه احساس کرده است … برای من ناقص است. من فقط به دنبال تعریفی نبودم – من در جستجوی آن بودم فلسفهبشر و دقیقاً به همین دلیل است که هنوز هم احساس می شود مرموز به من

سؤالاتی مانند:

  • چرا کلمه الگوریتم؟
  • چرا این اصطلاح عمیقاً با آن گره خورده است علوم کامپیوتر؟
  • چرا الگوریتم ها باید باشند گام به گام؟
  • چرا یک الگوریتم همیشه باید داشته باشد پایان؟
  • چگونه می توانیم تصمیم بگیریم که آیا یک الگوریتم است خوب یا بد؟
  • چگونه می توانیم پیدا کنیم و انتخاب کنیم الگوریتم راست برای یک مشکل در دنیای واقعی؟

و از همه مهمتر:

چرا همه توضیحات و مقاله ها در آنجا وجود دارد دانشگاهی و هرگز واقعاً راضی کننده نیست؟

مدتهاست که این سؤالات را دارم. و در اینجا ، من سعی می کنم هر آنچه را که تاکنون آموخته ام به اشتراک بگذارم.

اگر مشکلی پیش بیاورم ، دوست دارم شما را اصلاح کنید!

در واقع است خیلی سادهبشر هر چیزی که ما را به سمت راه حل یک الگوریتم است.

بیایید بگوییم من می خواهم قهوه بنوشیدبشر روند من چیست؟

من باید:

  1. ایستادن
  2. راه رفتن به قهوه
  3. یک فنجان را بگیرید
  4. قهوه را بریزید
  5. آن را بنوشید
  6. انجام شده

این یک الگوریتم است. من مجموعه ای از گام برای رسیدن به هدف من: نوشیدن قهوه.

اما این چیز است –آیا این یک مشکل مهم بود؟

واقعاً نیست

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

تعریف الگوریتم در CS

اما تعریف یک الگوریتم دقیقاً چیست در علوم کامپیوتر (CS)؟

در CS ، الگوریتم است توالی دستورالعمل ها که یک کامپیوتر برای حل یک کاملاً تعریف شده مشکل این اساساً به رایانه می گوید چه کاری باید انجام شود وت چگونه آن را انجام دهیمبشر

الگوریتم ها می توانند به رایانه ای در مورد چگونگی:

  • انجام محاسبات
  • داده های پردازش
  • تصمیم گیری

هر برنامه ، هر عملکرد و هر منطق در رایانه در نهایت به پایین می آید یک الگوریتم‘یک رویکرد ساخت یافته و گام به گام برای حل کارآمد یک مشکل.

داستان الگوریتم

خوب ، بنابراین ما پوشش داده ایم که یک الگوریتم در CS چیست. اما قبل از غواصی عمیق تر ، بیایید یک قدم عقب برداریم – چرا هک حتی آن را نامیده می شود الگوریتم؟ چرا نه عیاشی یا چیزی به همان اندازه مسخره؟

خوب ، داستان کلمه “الگوریتم” برمی گردد بیش از 1200 سالبشر و باور کنید یا نه ، از آن ناشی می شود نام یک شخص واقعی: محمد ابن موسی الخاریزمی– ریاضیدان فارسی ، ستاره شناس و جغرافیدان قرن نهمبشر

او در مورد کتابی نوشت اعداد و روشهای محاسباتی هندو-عربی، که بعداً به آن ترجمه شد لاتینبشر و در طول آن ترجمه ، نام او “الخاریزمی” اقتباس شده است “الگوریتم” در لاتین سرانجام ، با گذشت زمان ، اصطلاح در “الگوریتم”، و اکنون این یک مفهوم اساسی در علوم کامپیوتر است.

بنابراین ، اساساً ، “الگوریتم” به معنای واقعی کلمه یعنی “یک روش محاسباتی با الهام از الخاریزمی”بشر

اما چرا ما با کلمه ای مانند “Aglagorikhtam” به پایان نرسیدیم؟ 🤔

خوب ، اول از همه – زیرا نام هیچ کس Aglagorikhtam نبود! 😂 و دوم ، در روز ، لاتین (زبان علمی اروپا در آن زمان) خاص خود را داشت قوانینی برای تطبیق نام های خارجیبشر اگر اوضاع متفاوت پیش رفته بود ، ممکن است ما به استفاده از چیزی شبیه به “الخاریزمی-میتود” یا “Khwarizmi-Calculus” در عوض

بنابراین ، دفعه بعد که کلمه را می شنوید الگوریتم، به یاد داشته باشید – شما از اصطلاحی که قرن هاست استفاده می کنید ، استفاده می کنید ، ریشه در کار یک ریاضیدان باستانبشر خیلی باحال ، درست است؟

چرا این “الگوریتم” لعنتی فقط در CS بسیار شنیده می شود؟

منظورم این است که ، یک الگوریتم فقط یک نیست راهی برای دستیابی به راه حل؟ اگر اینگونه باشد ، پس هر عملی که در زندگی انجام می دهیم اساساً یک الگوریتم است ، درست است؟

  • وقتی می روم غذا می خورم ، من در حال اجرا هستم “خوردن الگوریتم.”
  • وقتی فوتبال بازی می کنم ، من در حال اجرا هستم “الگوریتم بازی فوتبال.”

بنابراین ، چرا جهنم آیا این است که اگر از کسی بخواهید “الگوریتم بازی فوتبال را توضیح دهد” ، به جای پاسخ دادن ، آنها فقط خواهند بود شما را به صورت لگد بزنید؟! چرا این مفهوم است در علوم کامپیوتر بسیار بزرگ است، اما در زندگی واقعی ، به نظر نمی رسد کسی اهمیت دهد؟

خوب ، جواب در تفاوت بین انسان و رایانهبشر

انسان در مقابل رایانه: شکاف الگوریتمی

ما ، به عنوان انسان ، انجام می دهیم بسیاری از چیزها به طور غریزیبشر ما همیشه آگاهانه در دستورالعمل های گام به گام فکر نمی کنیم. اگر فوتبال بازی می کنید ، هستید نه رفتن ،

  1. به سمت توپ حرکت کنید
  2. زاویه پا را تنظیم کنید
  3. نیروی بهینه را محاسبه کنید
  4. اجرای ضربه

نه! مغز شما فقط این کار را می کند، به طور خودکار ، بدون اینکه مجبور شوید هر مرحله کوچک را تجزیه و تحلیل کنید.

اما رایانه ها؟ آنها لال هستند.

آنها نمی توانند انجام دهند هر چیزی بدون اینکه صریحاً گفته شود چگونه برای انجام آن اگر به آنها یک گام به گام کریستالی پاک نشوید ، آنها فقط مانند یک احمق در آنجا می نشینند و منتظر دستورالعمل هستند.

اینجاست علوم کامپیوتر (CS) بازی می شود از آنجا که رایانه ها عدم شهود، ما باید درک سطح انسانی خود را به آن ترجمه کنیم مراحل صریح و بدون ابهام که یک دستگاه در واقع می تواند دنبال کند.

به عنوان مثال ، اگر می خواهید یک روبات برای بازی در فوتبال برنامه ریزی کنید ، شما فقط نمی توانم آن را بگویم:

“سلام ، برو مثل مسی بازی کن!”

ربات فقط در آنجا ایستاده ، بی سر و صدا. در عوض ، شما باید آن را تجزیه کنید:

  1. موقعیت توپ را با استفاده از سنسورها تشخیص دهید
  2. فاصله آن را از توپ محاسبه کنید
  3. ضمن جلوگیری از موانع به سمت توپ حرکت کنید
  4. بهترین زاویه و نیرو را برای یک شات تعیین کنید
  5. با استفاده از یک عملکرد دقیق حرکتی یک ضربه را اجرا کنید

تفاوت را می بینید؟

یک انسان فقط بازی می کندبشر یک کامپیوتر به مجموعه ای از مراحل ساختاری نیاز داردبشر

واقعیت: الگوریتم ها در همه جا هستند ، اما ما متوجه نمی شویم

نکته این است که الگوریتم ها آیا در زندگی واقعی وجود دارد، اما ما آنها را به عنوان “الگوریتم” فکر نمی کنیم زیرا ما آنها را درونی می کنیمبشر

برای ما ، “فوتبال بازی” یک است شهودی فرآیندی که در مغز ما اتفاق می افتد.

برای رایانه ، “فوتبال بازی” یک است پیچیده مشکلی که به یک راه حل صریح نیاز دارد.

به همین دلیل الگوریتم ها در زندگی واقعی نامرئی هستند، اما در CS ، آنها هستند همه چیزبشر در دنیای برنامه نویسی ، بدون الگوریتم ، یک کامپیوتر فقط یک جعبه بی فایده سیلیکون و سیم است.

چرا الگوریتم باید به پایان برسد؟

اگر یک الگوریتم به پایان نرسد ، به این معنی است که شما وارد یک حلقه نامتناهیبشر تصور کنید که از Google Maps برای راهنمایی استفاده می کنید ، و به شما می گوید:

  • “به چپ بپیچ”
  • “حالا به راست بپیچ
  • “حالا بچرخ”
  • “حالا دوباره به چپ بپیچ
  • و چرخه برای همیشه تکرار می شود!

نتیجه؟ شما هرگز به مقصد خود برسیدبشر شما در یک حلقه بی پایان گیر کرده اید.

همین اتفاق با رایانه ها رخ می دهد. اگر الگوریتمی را طراحی کنید که پایان یابد ، برنامه شما ممکن است هرگز متوقف نشویدبشر این مصرف رم و CPU را ادامه می دهد و در نهایت باعث می شود سیستم یخ زده یا خراب شود. به همین دلیل یک الگوریتم خوب باید یک نقطه پایان مشخص داشته باشدبشر پس از تعداد مشخصی از مراحل ، باید خروجی نهایی را تولید کرده و خاتمه دهد.

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

در دنیای الگوریتم ها ، پایان به همان اندازه آغاز مهم استبشر بدون آن ، شما فقط دم خود را تعقیب می کنید.

وقتی الگوریتم را تعریف می کنیم ، اغلب می گوییم که “نتیجه نهایی باید قابل مشاهده و قابل پیش بینی باشد” ، به این معنی که الگوریتم باید یک فرآیند مشخص داشته باشد که منجر به نتیجه ای شود که می توانیم درک کنیم یا انتظار داشته باشیم. با این حال ، این لزوماً به معنای این نیست که نتیجه همیشه باید باشد دقیقبشر آنچه مهم است این است که الگوریتم a روند پاک و تکرار شونده که به ما می دهد راه حل قابل قبولبشر اما پس از آن ، یک سوال بزرگ پیش می آید:

چرا برخی از الگوریتم ها به جای دقیق تقریبی هستند؟

1. محدودیت های زمان و منابع
برخی از مشکلات آنقدر پیچیده و محاسباتی سنگین هستند که پیدا کردن یک راه حل دقیق در یک بازه زمانی معقول است غیرممکنبشر به عنوان مثال ، مشکل Knapsack به شکل کلی آن است نابسامانبشر این بدان معنی است که ، برای یافتن راه حل دقیق ، باید همه ترکیبات ممکن را ارزیابی کنید ، که می شود از نظر نمایی کند برای ورودی های بزرگ به جای ساعت انتظار یا حتی سالها برای راه حل ، ما استفاده می کنیم الگوریتم های تقریبی یا اکتشافی این یک راه حل “به اندازه کافی خوب” در زمان بسیار کوتاه تر ارائه می دهد.

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

3. “پاسخ تقریبی” بهتر از “بدون پاسخ” است
تصور کنید که در Google به دنبال چیزی هستید و به شما می گوید: “هیچ نتیجه ای پیدا نکرد!” 😐 این امر می تواند یک نتیجه کامل باشد! به همین دلیل است الگوریتم های جستجو، حتی وقتی آنها نمی توانند یک مسابقه دقیق پیدا کنند ، سعی کنید بهترین نتیجه ممکنبشر در شرایطی مانند این ، ارائه پاسخ تقریبی بهتر از عدم پاسخ نیست. این الگوریتم ممکن است دقیقاً موردی را که به دنبال آن هستید به شما نرسد ، اما شما را تا حد امکان نزدیک می کند ، که اغلب به اندازه کافی خوب است.

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

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

طراحی یک الگوریتم مانند قرار دادن یک معما است-همه چیز در مورد تجزیه یک مشکل در قطعات قابل کنترل و فهمیدن یک برنامه واضح و گام به گام برای رسیدن به یک راه حل است. در اینجا چگونه می توانید آن را انجام دهید:


1 مشکل را عمیقاً درک کنید

قبل از نوشتن حتی یک خط کد واحد ، باید کاملاً بفهمید که چه مشکلی را برای حل آن حل می کنید.

  • مشکل را با دقت بخوانید.
  • دقیقاً آنچه را که می خواهید مشخص کنید.
  • از خود بپرسید: مشکل چیست؟ من به عنوان نتیجه چه می خواهم؟
  • به عنوان مثال ، اگر می خواهید بیشترین تعداد را در یک لیست پیدا کنید ، باید بدانید که ورودی شما چیست (لیستی از عدد صحیح) و خروجی مورد انتظار باید باشد (حداکثر عدد صحیح در آن لیست). قبل از شروع ساخت خانه ، این مرحله را به عنوان خواندن طرح فکر کنید.

2 ورودی ها و خروجی ها را تعریف کنید

هنگامی که مشکل را درک کردید ، به وضوح تعریف کنید:

  • ورودی ها: چه داده هایی دریافت خواهید کرد؟ (به عنوان مثال ، مجموعه ای از اعداد صحیح)
  • خروجی ها: الگوریتم شما چه چیزی باید تولید کند؟ (به عنوان مثال ، بیشترین تعداد در آرایه) این مرحله به جلوگیری از هرگونه سردرگمی بعداً کمک می کند – مانند دانستن دقیقاً کدام مواد لازم قبل از شروع پخت و پز.

3 محدودیت ها و موارد لبه را شناسایی کنید

هر مشکلی با محدودیت ها و شرایط خاص همراه است:

  • محدودیت ها: اینها ممکن است شامل محدودیت زمانی ، استفاده از حافظه یا شرایط خاصی باشد که ورودی باید برآورده شود.
  • موارد لبه: موقعیت های غیرمعمول مانند یک لیست خالی ، لیستی با یک عنصر ، همه عناصر یکسان یا حتی اعداد منفی را در نظر بگیرید. رسیدگی به این موارد مانند بررسی تمام سناریوهای “چه می شود” قبل از راه اندازی یک محصول جدید است.

4 یک تکنیک الگوریتمی مناسب را انتخاب کنید

تکنیک های زیادی برای انتخاب وجود دارد ، و صحیح آن به مشکل بستگی دارد:

  • الگوریتم های حریص: بهترین مشکلات بهینه سازی در جایی که انتخاب بهینه محلی در هر مرحله منجر به یک راه حل جهانی شود (به عنوان مثال ، مشکل تغییر سکه).
  • تقسیم و فتح: مفید است وقتی می توانید مشکل را به زیرنویس های کوچکتر تقسیم کنید ، هر یک را حل کنید و سپس نتایج را ترکیب کنید (به عنوان مثال ، مرتب سازی ادغام).
  • برنامه نویسی پویا: ایده آل برای مشکلات مربوط به همپوشانی در زیر برنامه ها که در آن می توانید نتایج متوسط ​​را ذخیره کنید (به عنوان مثال ، مشکل کوله پشتی ، دنباله فیبوناچی).
  • Backtracking: برای مشکلاتی که در آن شما نیاز به کشف همه راه حل های ممکن ، مانند تولید مجوزها یا حل پازل دارید ، بسیار عالی است. انتخاب تکنیک مناسب مانند انتخاب ابزار مناسب برای یک کار است – هر ابزار برای انواع خاصی از مشکلات مناسب است.

5 گام به گام الگوریتم را توسعه دهید

اکنون که می دانید چه کاری انجام دهید ، مراحل الگوریتم خود را تشریح کنید:

  • مشکل را بشکنید: آن را به قسمت های کوچکتر و قابل کنترل تقسیم کنید که حل آن آسان تر است.
  • هر مرحله را بنویسید: به روشنی توضیح دهید که ابتدا چه اتفاقی می افتد ، چه چیزی در مرحله بعدی اتفاق می افتد و چگونه هر مرحله از نتیجه قبلی استفاده می کند. به عنوان مثال ، برای یافتن حداکثر تعداد در یک لیست:

    1. اگر لیست خالی است ، یک مقدار خاص را برگردانید (مانند None یا یک خطا)
    2. فرض کنید عنصر اول بزرگترین است.
    3. برای هر عنصر دیگر ، اگر عنصر فعلی بزرگتر از حداکثر فرض شما باشد ، حداکثر را به روز کنید.
    4. حداکثر را پس از پردازش همه عناصر برگردانید. این مانند ایجاد یک دستور العمل دقیق است که حتی کسی که تجربه آشپزی ندارد ، می تواند برای تهیه یک غذای عالی دنبال کند.

6 شبه کد یا نمودار جریان را بنویسید

طرح گام به گام خود را به شبه کد یا یک نمودار جریان ترجمه کنید:

  • شبه کد: یک روش زبانی-آگنوستیک برای تشریح الگوریتم شما که هر کسی با دانش برنامه نویسی اساسی می تواند درک کند.
  • FlowCharts: نمودارهای بصری که جریان روند و نقاط تصمیم را نشان می دهد. این مرحله به شما کمک می کند تا قبل از اینکه در نحو کدگذاری ، منطق خود را صدا کنید ، اطمینان حاصل کنید.

7 الگوریتم را تجزیه و تحلیل کنید

الگوریتم خود را برای کارآیی ارزیابی کنید:

  • پیچیدگی زمان: چگونه تعداد عملیات با اندازه ورودی مقیاس می شود؟ (به عنوان مثال ، o (n) ، o (n log n) ، و غیره)
  • پیچیدگی فضایی: الگوریتم شما به چه مقدار حافظه نیاز دارد؟ به عنوان مثال ، یک الگوریتم ساده برای یافتن حداکثر تعداد در یک لیست در زمان O (n) اجرا می شود و از فضای اضافی استفاده می کند. این تجزیه و تحلیل مانند استرس است که راه حل شما را آزمایش می کند تا مطمئن شوید که می تواند بار کاری مورد انتظار را کنترل کند.

8 الگوریتم را آزمایش کنید

الگوریتم خود را از طریق تست های مختلف اجرا کنید:

  • موارد عادی: از ورودی های معمولی مانند یک لیست استفاده کنید [3, 1, 7, 4] جایی که خروجی باید 7 باشد.
  • موارد لبه: با لیست های خالی ، لیست های تک عنصر ، لیست ها با همه عناصر یکسان یا لیست های حاوی اعداد منفی تست کنید. آزمایش مانند گرفتن ماشین خود برای درایو تست در جاده های مختلف قبل از تصمیم گیری برای استفاده روزمره است.

9 در صورت لزوم بهینه سازی کنید

بر اساس تست ها و تحلیل های خود:

  • الگوریتم خود را اصلاح کنید برای بهبود کارآیی اگر خیلی کند باشد یا از حافظه بیش از حد برای ورودی های بزرگ استفاده می کند.
  • برای مشکلات ساده (مانند یافتن حداکثر تعداد) ، رویکرد اولیه شما ممکن است بهینه باشد ، اما مشکلات پیچیده تر ممکن است نیاز به تجدید نظر در رویکرد شما داشته باشد. این مانند تنظیم دستگاه برای اطمینان از اجرای بهترین عملکرد ممکن است.

10 الگوریتم خود را مستند کنید

در آخر ، الگوریتم خود را مستند کنید:

  • هدف را توضیح دهید: چه مشکلی را حل می کند؟
  • ورودی ها و خروجی ها را لیست کنید: این را برای هر کس دیگری (یا آینده شما) که کد شما را می خواند روشن کنید.
  • هر مرحله را شرح دهید: نظرات یا یک سند جداگانه را ارائه دهید که منطق هر مرحله را توضیح می دهد. مستندات تضمین می کند که الگوریتم شما در آینده قابل درک ، حفظ و بهبود در آینده است-دقیقاً به عنوان یک کتابچه راهنمای نوشته شده به کسی کمک می کند تا از یک ابزار جدید به درستی استفاده کند.

به یاد داشته باشید ، طراحی یک الگوریتم مانند حل یک معما است. هرچه استراتژی و دستورالعمل های شما واضح تر باشد ، این روند نرم تر است – خواه یک کامپیوتر را راهنمایی کنید یا روش خود را به شخص دیگری توضیح دهید.

حال ، بیایید از دنیای خشک و رسمی علوم کامپیوتر دور شویم و به باورنکردنی ترین پردازنده موجود: مغز انسان نگاه کنیم.

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

در طول چند میلی ثانیه ، مغز شما مشغول تجزیه و تحلیل ده ها متغیر است:

  • قد شما قصد پرش را دارد.
  • سرعت و زاویه جهش شما.
  • قدرت عضلات پای شما و میزان خم شدن زانو.
  • موقعیت بازوهای شما برای حفظ تعادل.
  • احتمال آسیب بر اساس سطح فرود.

بدون اینکه حتی متوجه شوید ، میلیاردها نورون این محاسبات پیچیده را تقریباً فوراً انجام می دهند. آنها سپس سیگنال های دقیقی را از طریق سیستم عصبی شما اعزام می کنند و به عضلات شما دستور می دهند تا ایمن ترین و کارآمدترین حرکت ممکن را اجرا کنند. این کل فرایند یک الگوریتم تصمیم گیری در زمان واقعی است-مواردی که در هزاره تنظیم شده است.

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

بنابراین ، دفعه بعد که با زحمت مجموعه ای از پله ها را پیمایش می کنید یا تصمیم تقسیم دوم می کنید ، به یاد داشته باشید: شما شاهد کار خارق العاده الگوریتم های داخلی مغز خود هستید-کاملاً شاهکار مهندسی الهی.

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

و اگر یک چیز وجود دارد که همیشه باید به خاطر بسپاریم ، این است: همه چیز در زندگی ، در نهایت ، یک الگوریتم است.

نوشته های مشابه

دیدگاهتان را بنویسید

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

دکمه بازگشت به بالا