اگر فکر میکنید که ساختمان دادهها و الگوریتمها همگی فقط تئوری هستند، آنچه را که آنها میتوانند برای کد شما انجام دهند را از دست میدهید. بیاموزید که از Oبزرگ استفاده کنید تا کد شما به مراتب سریعتر اجرا شود. از ساختمان داده هایی مانند جدولهای هش، درختها و گرافها برای افزایش تصاعدی کارایی کد خودتان استفاده کنید. این کتاب با زبان ساده و نمودارهای واضح، بدون توجه به سابقه شما، این موضوع پیچیده را قابل دسترسی میکند. ویرایش جدید این کتاب، تمرینهای عملی در هر فصل ارائه میدهد و فصلهای جدیدی با موضوعاتی همچون برنامه نویسی پویا، هیپها و درختها اضافه شده اند. در این کتاب، اطلاعات عملی مورد نیاز کار روزمره را برای تسلط بر ساختمان دادهها و الگوریتم ها، دریافت خواهید کرد.
الگوریتمها و ساختمان داده ها، بسیار بیشتر از مفاهیم انتزاعی هستند. تسلط بر آنها شما را به قادر به نوشتن کد هایی میکند که سریعتر و کارآمدتر اجرا شوند؛ به ویژه این موارد برای برنامههای وب و موبایل امروزی بسیار مهم هستند. با استفاده از تکنیکها و سناریوهای دنیای واقعی که میتوانید در کد تولیدی روزانه خود همراه با مثال هایی در جاوا اسکریپت، پایتون و روبی استفاده کنید، رویکردی عملی در ساختمان دادهها و الگوریتمها داشته باشید. ویرایش دوم کتاب A Common-Sense Guide to Data Structures and Algorithms, Second Edition (راهنمای عام برای ساختمان دادهها و الگوریتم ها، ویرایش دوم)، دارای فصلهای جدیدی درباره بازگشت، برنامه نویسی پویا و استفاده از O بزرگ در کارهای روزمره است.
برای اندازه گیری و بیان کارآیی کد خودتان، از علامت Big O استفاده کنید و الگوریتم خود را برای سریعتر کردن آن اصلاح کنید. دریابید که چگونه انتخاب آرایه ها، لیستهای پیوندی و جداول هش، میتوانند به طرز چشمگیری بر کدی که مینویسید تأثیر بگذارند. برای حل مسائل قلق دار، از بازگشت استفاده کنید و الگوریتم هایی ایجاد کنید که به طور تساعدی سریعتر از گزینههای جایگزین اجرا میشوند. برای کمک به مقیاس پذیر کردن برنامههای خاصی همچون شبکههای اجتماعی و نرم افزارهای نقشه برداری، در ساختمان دادههای پیشرفته ای مانند درختهای دو دویی و گرافها کنکاش کنید. حتی ممکن است که با یک کلمه کلیدی روبرو شوید که میتواند کد شما را بسیار سرعت بخشد. همچنین با تمرینهای موجود در هر فصل همراه با راه حلهای تشریحی، مهارتهای جدید خود را تمرین کنید. همین امروز از این تکنیکها استفاده کنید تا کد شما سریعتر و مقیاس پذیرتر شود.
چه چیز هایی در ویرایش دوم جدید هستند؟
- مطالب بازنگری شده. من بخاطر شفافیت، اصلاحات قابل توجهی در فصلهای اصلی انجام داده ام. در حالی که فکر میکردم که ویرایش اول کتاب، در آسانتر کردن فهم موضوعات پیچیده خوب عمل کرده است، دریافتم که برای شفافتر کردن بعضی قسمت ها، هنوز هم فضا وجود دارد. بسیاری از بخشهای فصلهای اصلی کاملاً بازنویسی شده اند و من بخشهای کاملاً جدیدی را نیز اضافه کرده ام. احساس میکنم این بازنگریها به تنهایی باعث پیشرفت کتاب شده اند و آن را شایسته چاپ جدید کرده اند.
- فصلها و موضوعات جدید. ویرایش دوم، شامل شش فصل جدید است که موضوعاتی را پوشش میدهند که من به طور ویژه ای در مورد آنها هیجان زده ام. این کتاب، همیشه مطالب عملی را با تئوری مخلوط کرده است، اما من حتی مطالب بیشتری را اضافه کردم که میتوانید روی آنها حساب کنید. فصلهای مربوط به O بزرگ در «کد روزمره» و «تکنیک هایی برای بهینه سازی کد» منحصرا بر روی کدهای روزمره و اینکه چگونه دانش ساختمان دادهها و الگوریتم میتوانند به شما در نوشتن یک نرم افزار کارآمد کمک کنند متمرکز هستند. در حالی که ویرایش قبلی، فصلی در مورد بازگشت را شامل میشد، من فصلی کاملا جدید را به نام «یادگیری نوشتن به صورت بازگشتی» به آن اختصاص دادم تا به شما نحوهی نوشتن کد بازگشتی را که میتواند برای مبتدیان گیج کننده باشد را آموزش دهد. من همچنین فصلی را در مورد «برنامه نویسی پویا» اضافه کرده ام که موضوع محبوبی است و برای بهینهتر کردن کد بازگشتی بسیار مهم است. تقاضای زیادی برای یادگیری درباره heapها و درختها وجود دارد و من نیز آنها را جذاب یافتم. از این رو فصل هایی را با عناوین Keeping Your Priorities Straight و It Doesn't Hurt to Trie را به این کتاب اضافه کردم.
- تمرینات و راه حل ها. اکنون هر فصلی دارای تعدادی تمرین است که به شما امکان میدهند تا با هر مبحث موجود در کتاب، تمرین عملی کنید. من همچنین راه حلهای مفصلی را نیز اضافه کردم که در پیوست انتهای کتاب موجود است. این یک پیشرفت قابل توجه است که این کتاب را به یک تجربه یادگیری کاملتر تبدیل کرده است.
Table of Contents:
• Preface
o Who Is This Book For?
o What’s New in the Second Edition
o What’s in This Book?
o How to Read This Book
o Code Examples
o Online Resources
o Acknowledgments
o Connecting
• Why Data Structures Matter.
o Data Structures
o The Array: The Foundational Data Structure
o Measuring Speed
o Reading
o Searching
o Insertion
o Deletion
o Sets: How a Single Rule Can Affect Efficiency
o Wrapping Up
o Exercises
• Why Algorithms Matter
o Ordered Arrays
o Searching an Ordered Array
o Binary Search
o Binary Search vs. Linear Search
o Wrapping Up
o Exercises
• O Yes! Big O Notation
o Big O: How Many Steps Relative to N Elements?
o The Soul of Big O
o An Algorithm of the Third Kind
o Logarithms
o O (log N) Explained
o Practical Examples
o Wrapping Up
o Exercises
• Speeding Up Your Code with Big O.
o Bubble Sort
o Bubble Sort in Action
o The Efficiency of Bubble Sort
o A Quadratic Problem
o A Linear Solution
o Wrapping Up
o Exercises
• Optimizing Code with and Without Big O
o Selection Sort
o Selection Sort in Action
o The Efficiency of Selection Sort
o Ignoring Constants
o Big O Categories
o Wrapping Up
o Exercises
• Optimizing for Optimistic Scenarios
o Insertion Sort
o Insertion Sort in Action
o The Efficiency of Insertion Sort
o The Average Case
o A Practical Example
o Wrapping Up
o Exercises
• Big O in Everyday Code.
o Mean Average of Even Numbers
o Word Builder
o Array Sample
o Average Celsius Reading
o Clothing Labels
o Count the Ones
o Palindrome Checker
o Get All the Products
o Password Cracker
o Wrapping Up
o Exercises
• Blazing Fast Lookup with Hash Tables
o Hash Tables
o Hashing with Hash Functions
o Building a Thesaurus for Fun and Profit, but Mainly Profit
o Hash Table Lookups
o Dealing with Collisions
o Making an Efficient Hash Table
o Hash Tables for Organization
o Hash Tables for Speed
o Wrapping Up
o Exercises
• Crafting Elegant Code with Stacks and Queues
o Stacks
o Abstract Data Types
o Stacks in Action
o The Importance of Constrained Data Structures
o Queues
o Queues in Action
o Wrapping Up
o Exercises
• Recursively Recurse with Recursion
o Recurse Instead of Loop
o The Base Case
o Reading Recursive Code
o Recursion in the Eyes of the Computer
o Filesystem Traversal
o Wrapping Up
o Exercises
• Learning to Write in Recursive
o Recursive Category: Repeatedly Execute
o Recursive Category: Calculations
o Top-Down Recursion: A New Way of Thinking
o The Staircase Problem
o Anagram Generation
o Wrapping Up
o Exercises
• Dynamic Programming
o Unnecessary Recursive Calls
o The Little Fix for Big O
o The Efficiency of Recursion
o Overlapping Subproblems
o Dynamic Programming through Memoization
o Dynamic Programming through Going Bottom-Up
o Wrapping Up
o Exercises
• Recursive Algorithms for Speed
o Partitioning
o Quicksort
o The Efficiency of Quicksort
o Quicksort in the Worst-Case Scenario
o Quickselect
o Sorting as a Key to Other Algorithms
o Wrapping Up
o Exercises
• Node-Based Data Structures
o Linked Lists
o Implementing a Linked List
o Reading
o Searching
o Insertion
o Deletion
o Efficiency of Linked List Operations
o Linked Lists in Action
o Doubly Linked Lists
o Queues as Doubly Linked Lists
o Wrapping Up
o Exercises
• Speeding Up All the Things with Binary Search Trees
o Trees
o Binary Search Trees
o Searching
o Insertion
o Deletion
o Binary Search Trees in Action
o Binary Search Tree Traversal
o Wrapping Up
o Exercises
• Keeping Your Priorities Straight with Heaps
o Priority Queues
o Heaps
o Heap Properties
o Heap Insertion
o Looking for the Last Node
o Heap Deletion
o Heaps vs. Ordered Arrays
o The Problem of the Last Node…Again
o Arrays as Heaps
o Heaps as Priority Queues
o Wrapping Up
o Exercises
• It Doesn’t Hurt to Trie
o Tries
o Storing Words
o Trie Search
o The Efficiency of Trie Search
o Trie Insertion
o Building Autocomplete
o Completing Autocomplete
o Tries with Values: A Better Autocomplete
o Wrapping Up
o Exercises
• Connecting Everything with Graphs
o Graphs
o Directed Graphs
o Object-Oriented Graph Implementation
o Graph Search
o Depth-First Search
o Breadth-First Search
o The Efficiency of Graph Search
o Weighted Graphs
o Dijkstra’s Algorithm
o Wrapping Up
o Exercises
• Dealing with Space Constraints
o Big O of Space Complexity
o Trade-Offs Between Time and Space
o The Hidden Cost of Recursion
o Wrapping Up
o Exercises
• Techniques for Code Optimization
o Prerequisite: Determine Your Current Big O
o Start Here: The Best-Imaginable Big O
o Magical Lookups
o Recognizing Patterns
o Greedy Algorithms
o Change the Data Structure
o Wrapping Up
o Parting Thoughts
o Exercises