Facebook Pixel
Searching...
فارسی
EnglishEnglish
EspañolSpanish
简体中文Chinese
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
Introduction to Algorithms

Introduction to Algorithms

توسط Thomas H. Cormen 1989 1184 صفحات
4.35
9k+ امتیازها
گوش دادن
Listen to Summary

نکات کلیدی

1. الگوریتم‌ها: قهرمانان ناشناخته محاسبات

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

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

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

فراتر از مرتب‌سازی. در حالی که مرتب‌سازی یک مثال رایج برای توضیح مفاهیم الگوریتمی است، دامنه مسائلی که الگوریتم‌ها می‌توانند حل کنند بسیار وسیع است. آن‌ها می‌توانند کوتاه‌ترین مسیر را روی نقشه پیدا کنند، شباهت‌ها بین رشته‌های DNA را شناسایی کنند، وظایف را زمان‌بندی کنند و حتی رئوس یک هسته محدب را تعیین کنند. امکانات بی‌پایان است.

2. اهمیت کارایی: الگوریتم‌ها به عنوان یک فناوری حیاتی

عملکرد کلی سیستم به انتخاب الگوریتم‌های کارآمد به اندازه انتخاب سخت‌افزار سریع بستگی دارد.

سخت‌افزار همه چیز نیست. در حالی که پردازنده‌های سریع و حافظه کافی مهم هستند، کارایی الگوریتم مورد استفاده می‌تواند تأثیر بسیار بیشتری بر عملکرد داشته باشد. یک الگوریتم به‌خوبی طراحی نشده می‌تواند مزایای حتی قدرتمندترین سخت‌افزارها را خنثی کند.

تفاوت‌های چشمگیر. تفاوت در کارایی بین الگوریتم‌ها می‌تواند چشمگیر باشد. به عنوان مثال، مرتب‌سازی درج، با زمان اجرای ‚.n2/، در مقایسه با زمان ‚.n lg n/ مرتب‌سازی ادغامی برای مجموعه داده‌های بزرگ، ناچیز به نظر می‌رسد. این تفاوت با افزایش اندازه مسئله به طور فزاینده‌ای مهم می‌شود.

الگوریتم‌ها یک فناوری هستند. درست مانند سخت‌افزار، الگوریتم‌ها باید به عنوان یک فناوری در نظر گرفته شوند. سرمایه‌گذاری در توسعه و انتخاب الگوریتم‌های کارآمد به اندازه سرمایه‌گذاری در پردازنده‌های سریع‌تر یا حافظه بیشتر حیاتی است. یک برنامه‌نویس ماهر اهمیت دانش و تکنیک الگوریتمی را درک می‌کند.

3. شبه‌کد: یک زبان جهانی برای الگوریتم‌ها

تنها الزامات این است که مشخصات باید توصیف دقیقی از رویه محاسباتی که باید دنبال شود، ارائه دهد.

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

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

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

4. مرتب‌سازی درج: سادگی و طراحی تدریجی

مرتب‌سازی درج به شیوه‌ای کار می‌کند که بسیاری از افراد یک دست کارت بازی را مرتب می‌کنند.

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

** invariantهای حلقه.** invariantهای حلقه برای درک و اثبات صحت الگوریتم‌های تکراری بسیار مهم هستند. آن‌ها ویژگی‌ای را تعریف می‌کنند که در ابتدای هر تکرار حلقه درست است و به ما اجازه می‌دهد درباره رفتار الگوریتم استدلال کنیم.

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

5. مرتب‌سازی ادغامی: تقسیم، تسخیر و ترکیب

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

تقسیم و تسخیر. مرتب‌سازی ادغامی نمونه‌ای از الگوی تقسیم و تسخیر است که مشکل مرتب‌سازی را به زیرمسائل کوچکتر تقسیم می‌کند، آن‌ها را به صورت بازگشتی مرتب می‌کند و سپس زیرمسائل مرتب شده را ترکیب می‌کند تا آرایه نهایی مرتب شده را تولید کند.

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

بازگشت‌ها. زمان اجرای مرتب‌سازی ادغامی را می‌توان با یک معادله بازگشتی توصیف کرد که زمان اجرای کلی را به زمان اجرای ورودی‌های کوچکتر بیان می‌کند. حل این بازگشت نشان می‌دهد که مرتب‌سازی ادغامی دارای زمان اجرای بدترین حالت ‚.n lg n/ است.

6. نمادگذاری نامتقارن: تمرکز بر رشد

آنچه واقعاً برای ما جالب است، نرخ رشد یا مرتبه رشد زمان اجرا است.

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

تتا، بیگ-او و اُمگا. رایج‌ترین نمادهای نامتقارن عبارتند از:

  • نماد ‚: یک حد متقارن محکم ارائه می‌دهد.
  • نماد O: یک حد بالایی نامتقارن ارائه می‌دهد.
  • نماد ‚: یک حد پایینی نامتقارن ارائه می‌دهد.

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

7. تقسیم و تسخیر: یک الگوی طراحی قدرتمند

بسیاری از الگوریتم‌های مفید ساختار بازگشتی دارند: برای حل یک مشکل خاص، آن‌ها خود را به صورت بازگشتی یک یا چند بار برای رسیدگی به زیرمسائل مرتبط فراخوانی می‌کنند.

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

سه مرحله:

  1. تقسیم: مشکل را به زیرمسائل کوچکتر تقسیم کنید.
  2. تسخیر: زیرمسائل را به صورت بازگشتی حل کنید.
  3. ترکیب: راه‌حل‌های زیرمسائل را ترکیب کنید.

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

8. الگوریتم‌های تصادفی: پذیرش عدم قطعیت

یک الگوریتم که رفتار آن نه تنها به ورودی‌هایش بلکه به مقادیر تولید شده توسط یک تولیدکننده عدد تصادفی بستگی دارد، یک الگوریتم تصادفی است.

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

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

NP-کامل بودن. الگوریتم‌های تصادفی می‌توانند برای تحمیل یک توزیع احتمالی بر ورودی‌ها استفاده شوند و بدین ترتیب اطمینان حاصل کنند که هیچ ورودی خاصی همیشه باعث عملکرد ضعیف نمی‌شود یا حتی برای محدود کردن نرخ خطای الگوریتم‌هایی که اجازه تولید نتایج نادرست را دارند، استفاده شوند.

9. ساختارهای داده: سازماندهی اطلاعات

یک ساختار داده روشی برای ذخیره و سازماندهی داده‌ها به منظور تسهیل دسترسی و تغییرات است.

دسترسی کارآمد. ساختارهای داده برای طراحی الگوریتم‌ها بنیادی هستند و راه‌هایی برای ذخیره و سازماندهی داده‌ها فراهم می‌کنند تا دسترسی و تغییرات کارآمد را تسهیل کنند. انتخاب ساختار داده می‌تواند تأثیر قابل توجهی بر عملکرد یک الگوریتم داشته باشد.

معامله‌ها. هیچ ساختار داده‌ای برای همه مقاصد ایده‌آل نیست. ساختارهای داده مختلف معامله‌های متفاوتی بین فضای ذخیره‌سازی، زمان دسترسی و کارایی عملیات مختلف ارائه می‌دهند.

مثال‌ها. ساختارهای داده رایج شامل:

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

10. NP-کامل بودن: درک غیرقابل حل بودن

اگر از شما خواسته شود که یک الگوریتم کارآمد برای یک مشکل NP-کامل تولید کنید، احتمالاً زمان زیادی را در جستجوی بی‌ثمر خواهید گذراند.

مسائل سخت. مسائل NP-کامل یک کلاس از مسائل هستند که هیچ راه‌حل کارآمد (زمان چندجمله‌ای) برای آن‌ها شناخته نشده است. در حالی که هیچ‌کس اثبات نکرده است که الگوریتم‌های کارآمد نمی‌توانند وجود داشته باشند، عدم وجود چنین راه‌حل‌هایی با وجود تحقیقات گسترده نشان می‌دهد که این مسائل به طور ذاتی دشوار هستند.

کاهش‌پذیری. ویژگی شگفت‌انگیز مسائل NP-کامل این است که اگر یک الگوریتم کارآمد برای هر یک از آن‌ها وجود داشته باشد، آنگاه الگوریتم‌های کارآمد برای همه آن‌ها وجود دارد. این رابطه باعث می‌شود که عدم وجود راه‌حل‌های کارآمد حتی بیشتر وسوسه‌انگیز باشد.

تقریب. اگر با یک مشکل NP-کامل مواجه شدید، اغلب مفیدتر است که بر روی توسعه یک الگوریتم کارآمد که یک راه‌حل خوب، اما نه لزوماً بهینه، ارائه می‌دهد، تمرکز کنید. این‌ها به عنوان الگوریتم‌های تقریبی شناخته می‌شوند.

آخرین به‌روزرسانی::

نقد و بررسی

4.35 از 5
میانگین از 9k+ امتیازات از Goodreads و Amazon.

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

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

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

0:00
-0:00
1x
Dan
Andrew
Michelle
Lauren
Select Speed
1.0×
+
200 words per minute
Home
Library
Get App
Create a free account to unlock:
Requests: Request new book summaries
Bookmarks: Save your favorite books
History: Revisit books later
Recommendations: Get personalized suggestions
Ratings: Rate books & see your ratings
Try Full Access for 7 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
All summaries are free to read in 40 languages
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 10
📜 Unlimited History
Free users are limited to 10
Risk-Free Timeline
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 4: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Apr 4,
cancel anytime before.
Consume 2.8x More Books
2.8x more books Listening Reading
Our users love us
100,000+ readers
"...I can 10x the number of books I can read..."
"...exceptionally accurate, engaging, and beautifully presented..."
"...better than any amazon review when I'm making a book-buying decision..."
Save 62%
Yearly
$119.88 $44.99/year
$3.75/mo
Monthly
$9.99/mo
Try Free & Unlock
7 days free, then $44.99/year. Cancel anytime.
Scanner

Point camera at a book's barcode to scan

Scanning...

Settings
General
Widget
Appearance
Loading...
Black Friday Sale 🎉
$20 off Lifetime Access
$79.99 $59.99
Upgrade Now →