- عنوان کتاب: An Introduction to the Analysis of Algorithms, 4e
- نویسنده: Michael Soltys
- حوزه: الگوریتم
- سال انتشار: 2026
- تعداد صفحه: 416
- زبان اصلی: انگلیسی
- نوع فایل: pdf
- حجم فایل: 10.3 مگابایت
این کتاب مقدمهای کوتاه بر الگوریتمها است، که روشهایی هستند که از طریق آنها کار فکری را به ماشینها محول میکنیم. با توجه به یک مسئله محاسباتی، الگوریتم روشی برای حل آن است؛ این روش معمولاً به یک زبان برنامهنویسی مانند پایتون پیادهسازی میشود تا روی کامپیوتر اجرا شود. ما دو مفهوم درهمتنیده مرتبط با الگوریتمها را ارائه میدهیم: تکنیک طراحی، مانند برنامهنویسی حریصانه یا پویا؛ و تحلیل، مانند عملکرد یا صحت. هر دو ضروری هستند: ما یک مسئله را با طراحی یک الگوریتم حل میکنیم، اما راهحل خود را با تجزیه و تحلیل الگوریتم توجیه میکنیم. مخاطبان مورد نظر برای این کتاب شامل دانشجویان کارشناسی و کارشناسی ارشد علوم کامپیوتر و ریاضیات هستند، اما از آنجایی که ارائه مستقل است، یعنی تمام پیشزمینهها ارائه شده است، این کتاب میتواند به عنوان مقدمهای بر الگوریتمها برای هر کسی باشد. ما این کتاب را با فصلی از مقدمات شروع میکنیم، که در آن چارچوب شرایط پیش/پس از شرط و ثابتهای حلقه را معرفی میکنیم. ما این چارچوب را با اثبات صحت برخی از الگوریتمهای کلاسیک، مانند روش اقلیدس برای محاسبه بزرگترین مقسوم علیه مشترک دو عدد، نشان میدهیم. ما مقدمات را با سه الگوریتم رتبهبندی به پایان میرسانیم: ازدواج پایدار، رتبهبندی صفحه و مقایسههای زوجی. از آنجایی که رتبهبندی به طور طبیعی به ذهن انسان خطور میکند و رویههای رتبهبندی عملی هستند، این یک راه مناسب برای شروع یک سفر به الگوریتمها است. ما سه تکنیک استاندارد طراحی الگوریتم را در فصلهای همنام ارائه میدهیم: الگوریتمهای حریصانه، برنامهنویسی پویا و الگوی تقسیم و غلبه. ما به جای مثلاً کارایی یا ساختارهای داده زیربنایی، به صحت الگوریتمها توجه داریم. به عنوان مثال، در فصل مربوط به الگوی حریصانه، ایده یک راهحل جزئی امیدوارکننده، یک تکنیک قدرتمند برای اثبات صحت الگوریتمهای حریصانه را به طور عمیق بررسی میکنیم. ما الگوریتمهای آنلاین و تحلیل رقابتی و همچنین الگوریتمهای تصادفی را با بخشی در مورد رمزنگاری گنجاندهایم. فصل مربوط به الگوریتمهای موازی بر اساس جبر خطی است. در حالی که حساب دیفرانسیل و انتگرال به استانداردی برای ارزیابی بلوغ ریاضی در سطح کارشناسی دانشگاه تبدیل شده است، جبر خطی شاید به عنوان ابزاری برای مهندسی و محاسبات حتی مفیدتر باشد. ما از طریق الگوریتمهایی که از موازیسازی برای محاسبه ساختارهای استاندارد، مانند دترمینان یا چندجملهای مشخصه یک ماتریس، استفاده میکنند، رویکردی پیشرفته به جبر خطی ارائه میدهیم. در ویرایش چهارم کتاب، فصلی در مورد یادگیری ماشین، فصل ۸، اضافه شده است. یادگیری ماشین اکنون فراگیر شده است و از زمان ظهور ابر، هر کسی به منابع محاسباتی (و ذخیرهسازی) مورد نیاز برای آموزش مدلها دسترسی دارد. این امر الگوی کلاسیک الگوریتمهای مبتنی بر قانون را به الگوریتمهای آموزشدیده روی حجم زیادی از دادهها تبدیل میکند. کتاب با دو فصل بنیادی به پایان میرسد. فصل اول، شرحی از اصول اولیه نظریه محاسبات است. ما از طریق دستکاری رشتهها به این حوزه نزدیک میشویم. بنابراین، ما ماشینهای خودکار متناهی و تورینگ را به عنوان پیادهسازی قوانین برای تبدیل رشتهها ارائه میدهیم. فصل دوم بنیادی، مبانی ریاضی این کتاب را پوشش میدهد. خوانندهای که با ریاضیات گسسته آشنا نیست، تشویق میشود که از این فصل (فصل ۱۰) شروع کند و تمام مسائل موجود در آن را حل کند. الگوریتمها مسائل را حل میکنند و بسیاری از مسائل این کتاب در دسته مسائل بهینهسازی قرار میگیرند، چه کمینهسازی هزینه، مانند الگوریتم کروسکال برای محاسبه درختهای پوشای حداقل هزینه – بخش 2.1، یا بیشینهسازی سود، مانند انتخاب سودآورترین زیرمجموعه فعالیتها – بخش 4.4. این کتاب مملو از تمرین (مسائل) است که بسیاری از آنها نظری هستند، اما تعداد قابل توجهی از آنها نیاز به پیادهسازی یک الگوریتم در پایتون دارند. مقدمههای زیر را در مورد پایتون در نظر بگیرید: [Dierbach (2013)] یا [Downey (2015)]1. زبان برنامهنویسی پایتون نسبتاً آسان است، به خصوص برای قطعه کدهای کوتاه. راهحلهای اکثر مسائل در «پاسخ به مسائل انتخاب شده» در انتهای هر فصل گنجانده شده است. راهحلهای اکثر تمرینهای برنامهنویسی برای دانلود از GitHub در دسترس خواهد بود.2 این کتاب از منابع زیادی بهره میبرد. اول از همه، [Cormen و همکاران (2009)] یک مرجع فوقالعاده برای هر کسی است که الگوریتمها را یاد میگیرد. من همچنین از [Kleinberg and Tardos (2006)] که به زیبایی نوشته شده است، به عنوان مرجع استفاده کردهام. یکی از منابع کلاسیک در این زمینه [Knuth (1997)] است و من ارائه الگوریتمهای آنلاین خود را بر اساس مطالب موجود در [Borodin and El-Yaniv (1998)] انجام میدهم. من الگوریتمهای حریصانه، برنامهنویسی پویا و منطق را از Stephen A. Cook در دانشگاه تورنتو آموختهام. بخش 10.3، خلاصهای از روابط، بر اساس سخنرانیهای ارائه شده توسط Ryszard Janicki در سال 2008 در دانشگاه McMaster است. بخش 10.4 بر اساس سخنرانیهای منطقی Stephen A. Cook است که در دهه 1990 در دانشگاه تورنتو تدریس میشد. من از Ryan McIntyre که نسخه خطی ویرایش سوم را ویرایش و راهحلهای پایتون را در تابستان 2017 بهروزرسانی کرد، و از Rishikesh Patil که ویرایش سوم را ویرایش و راهحلهای پایتون را بهروزرسانی کرد، سپاسگزارم.
This book is a short introduction to algorithms, which are the methods whereby we assign intellectual work to machines. Given a computational problem, an algorithm is a procedure to solve it; this procedure is usually implemented in a programming language, such as Python, to be run on a computer. We present two intertwined concepts related to algorithms: design technique, such as Greedy or Dynamic Programming; and analysis, such as performance or correctness. Both are essential: we solve a problem by designing an algorithm, but we justify our solution by analyzing the algorithm. The intended audience for this book consists of both undergraduate and graduate students in Computer Science and Mathematics, but since the presentation is self-contained, i.e., all background is given, this book can serve as an introduction to algorithms for anyone. We begin this book with a chapter of preliminaries, where we introduce the framework of pre/post-conditions and loop invariants. We illustrate the framework by proving the correctness of some classical algorithms, such as Euclid’s procedure for computing the greatest common divisor of two numbers. We conclude the preliminaries with three ranking algorithms: Stable Marriage, PageRank and Pairwise Comparisons. As ranking comes naturally to the human mind, and ranking procedures are practical, this is a fitting way to start a foray into algorithms. We present three standard algorithm design techniques in eponymous chapters: greedy algorithms, dynamic programming and the divide and conquer paradigm. We are concerned with correctness of algorithms, rather than, say, efficiency or the underlying data structures. For example, in the chapter on the greedy paradigm we explore in depth the idea of a promising partial solution, a powerful technique for proving the correctness of greedy algorithms. We include online algorithms and competitive analysis, as well as randomized algorithms with a section on cryptography. The chapter on parallel algorithms is based on Linear Algebra. While Calculus has become the standard for assessing mathematical maturity at the university undergraduate level, Linear Algebra is perhaps even more useful as a tool for engineering and computation. We bring an advanced approach to Linear Algebra through algorithms that deploy parallelism in order to compute the standard constructions, e.g., the determinant or characteristic polynomial of a matrix. The fourth edition of the book added a chapter on Machine Learning, Chapter 8. Machine Learning is now pervasive, and since the advent of the cloud, anyone has access to the compute (and storage) resources needed to train models. It inverts the classical paradigm of rule-based algorithms to algorithms trained on large amounts of data. The book finishes with two foundational chapters. The first one is an exposition of the basics of the theory of computation. We approach this field through manipulations of strings; thus, we present Finite Automata and Turing Machines as implementations of rules for transforming strings. The second foundational chapter covers the mathematical basics for this book; the reader unfamiliar with discrete mathematics is encouraged to start with this chapter (Chapter 10) and do all the problems therein. Algorithms solve problems, and many of the problems in this book fall under the category of optimization problems, whether cost minimization, such as Kruskal’s algorithm for computing minimum cost spanning trees—Section 2.1, or profit maximization, such as selecting the most profitable subset of activities—Section 4.4. The book is sprinkled with exercises (problems), many theoretical, but a significant number require an implementation of an algorithm in Python; consider the following introductions to Python: [Dierbach (2013)] or [Downey (2015)]1. The Python programming language is relatively easy, especially for short snippets of code. The solutions to most problems are included in the “Answers to selected problems” at the end of each chapter. The solutions to most of the programming exercises will be available for download from GitHub.2 This book draws on many sources. First of all, [Cormen et al. (2009)] is a fantastic reference for anyone who is learning algorithms. I have also used as reference the elegantly written [Kleinberg and Tardos (2006)]. A classic in the field is [Knuth (1997)], and I base my presentation of online algorithms on the material in [Borodin and El-Yaniv (1998)]. I have learned greedy algorithms, dynamic programming and logic from Stephen A. Cook at the University of Toronto. Section 10.3, a digest of relations, is based on lectures given by Ryszard Janicki in 2008 at McMaster University. Section 10.4 is based on logic lectures by Stephen A. Cook taught at the University of Toronto in the 1990s. I am grateful to Ryan McIntyre who proofread the 3rd edition manuscript, and updated the Python solutions, during the summer of 2017, and to Rishikesh Patil who proof-read the 4th edition during the summer of 2024. I am grateful to the many students who improved the manuscript by reading it carefully and pointing out typos, omissions, errors and gaps, including Skyler Atchison, Greg Herman, and Christopher Kuske. As stated at the beginning of this Preface, we aim to present a concise, mathematically rigorous, introduction to the beautiful field of Algorithms. I agree strongly with [Su (2010)] that the purpose of education is to cultivate the yawp: “I sound my barbaric yawp over the root(top)s of the world!” words of John Keating, quoting a Walt Whitman poem ([Whitman (1892)]), in the movie Dead Poets Society. This yawp is the deep yearning inside each of us for an aesthetic experience ([Scruton (2011)]). Hopefully, this book will supply a yawp or two.
این کتاب را میتوانید از لینک زیر بصورت رایگان دانلود کنید:





نظرات کاربران