logo

Вивчення структур даних і алгоритмів | Підручник DSA

Структури даних і алгоритми (DSA) відносяться до вивчення методів організації та зберігання даних і розробки процедур (алгоритмів) для розв'язування задач, які працюють з цими структурами даних. DSA є однією з найважливіших навичок, якими повинен володіти кожен студент інформатики. Часто можна побачити, що люди, які добре знають ці технології, є кращими програмістами, ніж інші, і, отже, проходять інтерв’ю майже з кожним технічним гігантом. Це Підручник DSA має на меті допомогти вам швидко та легко вивчити структури даних і алгоритми (DSA).



Зміст

  • Вивчайте алгоритми
  • Дізнайтеся про складності
  • Шпаргалки для практичних завдань
  • Повна форма DSA

    Термін DSA означає Структури даних і алгоритми , в контексті інформатики.

    Що таке DSA?

    Структури даних і алгоритми (DSA) відносяться до вивчення методів організації та зберігання даних і розробки процедур (алгоритмів) для розв'язування задач, які працюють з цими структурами даних.



    Як вивчити DSA?

    Перше і головне - це розділити загальну процедуру на невеликі частини, які потрібно виконувати послідовно. Повний процес вивчення DSA з нуля можна розбити на 5 частин:

    1. Вивчіть принаймні одну мову програмування (ми залишаємо це на ваш вибір.)
    2. Вивчіть структури даних
    3. Вивчайте алгоритми
    4. Дізнайтеся про складність часу та простору
    5. Практичні завдання з DSA
    Як вивчити DSA?

    Як вивчити DSA?

    Сподіваючись, що ви вивчили мову програмування за своїм вибором, перейдемо до наступного кроку вивчення DSA в цьому підручнику DSA.



    Ось і настає найважливіший і найбільш очікуваний етап дорожньої карти для вивчення структури даних і алгоритму – етап, на якому ви починаєте вивчати DSA. Тема DSA складається з двох частин:

    • Структури даних
    • Алгоритми

    Хоча це дві різні речі, вони дуже взаємопов’язані, і дуже важливо йти правильним шляхом, щоб засвоїти їх найбільш ефективно. Якщо ви не знаєте, який з них дізнатися першим, рекомендуємо вам пройти наш детальний аналіз на цю тему: Тут ми прослідкували процес вивчення структури даних, а потім найбільш пов’язані та важливі алгоритми, які використовуються цією структурою даних.

    Вивчіть структури даних

    Структури даних є основними компонентами, які допомагають організувати та ефективно зберігати дані в пам’яті комп’ютера. Вони надають спосіб ефективного керування та маніпулювання даними, забезпечуючи швидший доступ, вставлення та видалення. Загальні структури даних включають масиви, пов’язані списки, стеки, черги, дерева та графи , кожен з яких служить певним цілям на основі вимог проблеми, що розглядається. Розуміння структур даних є фундаментальним для розробки ефективних алгоритмів і оптимізації продуктивності програмного забезпечення.

    Масив це лінійна структура даних, яка зберігає набір елементів одного типу даних. Елементам виділяється безперервна пам’ять, що забезпечує постійний доступ. Кожен елемент має унікальний індексний номер.

    • Операції над масивом:
      • Обхід : Ітерація елементів масиву.
      • Вставка : додавання елемента до масиву за певним індексом.
      • Видалення : Видалення елемента з масиву за певним індексом.
      • Пошук : Пошук елемента в масиві за його значенням або індексом.
    • Типи масивів :
      • Одновимірний масив : простий масив з одним виміром.
      • Багатовимірний масив : масив із кількома вимірами, наприклад матриця.
    • Застосування Array :
      • Зберігання даних у послідовному порядку
      • Реалізація черг, стеків та інших структур даних
      • Зображення матриць і таблиць
    • Пов’язані теми про масив:
      • Підручник з масивів
      • 50 основних проблем кодування масивів для співбесід
      • Практичні задачі на масивах

    2. Рядок

    А рядок це послідовність символів, яка зазвичай використовується для представлення тексту. Він вважається типом даних, який дозволяє маніпулювати та обробляти текстові дані в комп’ютерних програмах.

    • Операції над String :
      • Конкатенація : з’єднання двох струн.
      • Порівняння : Лексикографічне порівняння двох рядків.
      • Підрядок видобуток : Вилучення підрядка з рядка.
      • Пошук : пошук підрядка в рядку.
      • Модифікація : Зміна або заміна символів у рядку.
    • Застосування String :
      • Опрацювання тексту
      • Зіставлення шаблону
      • Перевірка даних
      • Управління базами даних
    • Схожі повідомлення:
      • Підручник з рядків
      • 50 найпопулярніших проблем кодування рядків для співбесід
      • Практичні задачі на рядок

    3. Зв'язані списки

    А зв'язаний список це лінійна структура даних, яка зберігає дані у вузлах, з’єднаних покажчиками. На відміну від масивів, пов’язані списки не зберігаються в безперервних місцях пам’яті.

    • Характеристики пов’язаного списку:
      • Динамічний : Зв’язані списки можна легко змінювати, додаючи або видаляючи вузли.
      • Несуміжні : вузли зберігаються у випадкових місцях пам’яті та з’єднані вказівниками.
      • Послідовний доступ : доступ до вузлів можливий лише послідовно, починаючи з голови списку.
    • Операції зі зв’язаним списком:
      • Створення : Створення нового пов’язаного списку або додавання нового вузла до існуючого списку.
      • Обхід : Ітерація по списку та доступ до кожного вузла.
      • Вставка : Додавання нового вузла в певну позицію в списку.
      • Видалення : Видалення вузла зі списку.
      • Пошук : пошук вузла з певним значенням у списку.
    • Типи пов’язаного списку :
      • Однозв'язаний список : кожен вузол вказує на наступний вузол у списку.
      • Двозв'язаний список : Кожен вузол вказує як на наступний, так і на попередній вузли в списку.
      • Круговий зв'язаний список : останній вузол вказує назад на перший вузол, утворюючи кругову петлю.
    • Застосування пов’язаного списку :
      • Зв’язані списки використовуються в різних програмах, зокрема:
      • Реалізація черг і стеків
      • Зображення графів і дерев
      • Ведення замовлених даних
      • Управління пам'яттю
    • Пов'язані теми:
      • Навчальний посібник зі зв’язаного списку
      • 50 найпопулярніших проблем у пов’язаному списку для співбесід
      • Практичні задачі зі зв’язаними списками

    4. Матриця/сітка

    А матриця це двовимірний масив елементів, розташованих у рядках і стовпцях. Він представлений у вигляді прямокутної сітки, де кожен елемент знаходиться на перетині рядка та стовпця.

    • Ключові поняття:
      • рядки : Горизонтальні лінії елементів у матриці.
      • Стовпці : Вертикальні лінії елементів у матриці.
      • Розміри : кількість рядків і стовпців у матриці (наприклад, матриця 3×4 має 3 рядки та 4 стовпці).
      • елемент Доступ : Доступ до елементів можна отримати за допомогою індексів рядків і стовпців (наприклад, M[2][3] посилається на елемент у рядку 2, стовпці 3).
    • Застосування матриці/сітки :
      • Обробка зображення
      • Аналіз даних
      • Проблеми оптимізації
    • Схожі повідомлення:
      • Підручник з матриці/сітки
      • 50 найкращих проблем на матриці/сітці для співбесід
      • Практичні задачі на матриці/сітці

    5. Стек

    Стек це лінійна структура даних, яка відповідає певному порядку виконання операцій. Порядок може бути LIFO (останній прийшов, перший вийшов) або FILO (першим увійшов останнім) . ЛІФО означає, що елемент, який вставляється останнім, виходить першим і РЯД означає, що елемент, який вставляється першим, виходить останнім.

    • Операція над стеком :
      • Поштовх : додає елемент на вершину стека
      • Поп : видаляє та повертає елемент у верхній частині стека
      • Peek : повертає елемент у верхній частині стека, не видаляючи його
      • Розмір : повертає кількість елементів у стеку
      • Пусто : перевіряє, чи стек порожній
    • Застосування Stack :
      • Виклики функцій
      • Оцінка експресії
      • Відстеження назад
      • Операції скасування/повторення
    • Пов’язані теми на Stack:
      • Навчальний посібник із стека
      • 50 найпопулярніших проблем у стеку для співбесід
      • Практичні завдання на Stack

    6. Черга

    А Черга Структура даних — це фундаментальне поняття в інформатиці, яке використовується для зберігання та керування даними в певному порядку. Він дотримується принципу Першим увійшов, першим вийшов ( FIFO ), де перший елемент, доданий до черги, є першим, який буде видалено

    • Операція в черзі :
      • Поставте в чергу : додає елемент у кінець черги
      • Відповідно : видаляє елемент із початку черги
      • Peek : Витягує передній елемент, не знімаючи його
      • Пусто : перевіряє, чи черга порожня
      • IsFull : Перевіряє, чи заповнена черга
    • Тип черги :
      • Кругова черга : останній елемент з’єднується з першим елементом
      • Двостороння черга (Deque) : операції можна виконувати з обох сторін
      • Пріоритетна черга : Елементи впорядковані за пріоритетом
    • Застосування черги :
      • Планування роботи
      • Постановка в чергу повідомлень
      • Імітаційне моделювання
      • Буферизація даних
    • Пов'язані теми:
      • Підручник з черги
      • 50 головних проблем у черзі на співбесіду
      • Практичні задачі на Черзі

    7. Купа

    А Купа це повна структура даних бінарного дерева, яка задовольняє властивість купи: для кожного вузла значення його дочірніх вузлів менше або дорівнює його власному значенню. Для реалізації зазвичай використовуються купи пріоритетні черги , де найменший (або найбільший) елемент завжди знаходиться в корені дерева.

    • Операції Heap :
      • Вставка : додає новий елемент до купи, зберігаючи властивості купи.
      • Екстракт-Макс/Екстракт-Мін : видаляє кореневий елемент і реструктурує купу.
      • Клавіша збільшення/зменшення : оновлює значення вузла та реструктурує купу.
    • Типи Heap :
      • Макс-Хіп : Кореневий вузол має максимальне значення серед своїх дітей.
      • Min-Heap : Кореневий вузол має мінімальне значення серед своїх дітей.
    • Застосування Heap :
      • Пріоритетні черги
      • Сортування
      • Графові алгоритми (наприклад, алгоритм Дейкстри)
    • Схожі повідомлення:
      • Heap Підручник
      • Топ-50 найпопулярніших проблем на Heap для співбесід
      • Практичні завдання на купі

    8. Хеш

    Хешування це техніка, яка генерує вихідні дані фіксованого розміру (геш-значення) із вхідних даних змінного розміру за допомогою математичних формул, які називаються хеш-функції . Хешування використовується для визначення індексу або розташування для зберігання елемента в структурі даних, що забезпечує ефективний пошук і вставку.

    • Ключові поняття:
      • Хеш-функція : математична функція, яка зіставляє вхідні дані з хеш-значенням.
      • Хеш-таблиця : структура даних, яка зберігає пари ключ-значення, де ключ — це хеш-значення, а значення — фактичні дані.
      • Зіткнення : коли два різні ключі дають однакове хеш-значення.
    • Типи хеш-функцій :
      • Спосіб ділення : ділить вхідні дані на константу та використовує залишок як хеш-значення.
      • Середня площа Спосіб: зводить вхідні дані в квадрат і бере середні цифри як хеш-значення.
      • Метод складання : Розділяє вхідні дані на блоки однакового розміру та додає їх разом, щоб отримати хеш-значення.
      • Метод множення : множить вхідні дані на константу та приймає дробову частину як хеш-значення.
    • Методи вирішення зіткнень :
      • Окреме з’єднання (відкрите хешування) : зберігає елементи, що збігаються, у зв’язаному списку з відповідним хеш-значенням.
      • Відкрита адресація (закрите хешування) : Використовує різні стратегії для пошуку альтернативного місця для зіткнення елементів у хеш-таблиці.
    • Застосування хешування :
      • Ефективне зберігання та отримання даних у базах даних і файлових системах.
      • Перевірка паролів і цифрових підписів.
      • Розподіл запитів на декілька серверів.
      • Створення безпечних хешів для цілісності даних і автентифікації.
    • Схожі повідомлення:
      • Підручник з хешу
      • Практичні завдання на хешування

    9. дерево

    А дерево це нелінійна ієрархічна структура даних, що складається з вузлів, з’єднаних ребрами, з верхнім вузлом, який називається коренем, і вузлами, що мають дочірні вузли. Він використовується в інформатиці для ефективної організації даних.

    кортеж сортування python
    • Обхід дерева : Методи обходу дерева використовуються для відвідування та обробки вузлів у структурі даних дерева. Три поширені методи обходу:
      • В порядку : Відвідайте ліве піддерево, поточний вузол, потім праве піддерево.
      • Попереднє замовлення : відвідати поточний вузол, ліве піддерево, потім праве піддерево.
      • Постзамовлення : відвідайте ліве піддерево, праве піддерево, а потім поточний вузол.
    • Класифікація дерев:
      • Класифікації дерева відносяться до групування дерев на основі певних характеристик або критеріїв. Це може включати класифікацію дерев на основі їх коефіцієнта балансу, ступеня вузлів, властивостей порядку тощо. Нижче наведено деякі важливі класифікації дерев.
    Класифікація опис

    Тип

    опис

    За ступенем

    Дерева можна класифікувати на основі максимальної кількості дітей, які може мати кожен вузол.

    Бінарне дерево

    Кожен вузол має не більше двох дочірніх вузлів.

    Тернарне дерево

    Кожен вузол має не більше трьох дочірніх вузлів.

    N-арне дерево

    Кожен вузол має щонайбільше N дітей.

    За замовленням

    Дерева можна класифікувати на основі порядку розташування вузлів і піддерев

    Двійкове дерево пошуку (BST)

    Ліва дитина

    Купа

    Спеціалізоване бінарне дерево з властивістю heap.

    За балансом

    Дерева можна класифікувати залежно від того, наскільки вони добре збалансовані.

    Збалансоване дерево

    Висота піддерев відрізняється не більше ніж на одиницю. Приклади включають дерева AVL і червоно-чорні дерева.

    Незбалансоване дерево

    Висота піддерев може значно відрізнятися, що впливає на продуктивність таких операцій, як пошук і вставка.

    • Застосування дерев:
      • Файлові системи
      • Бази даних
      • Документи XML
      • Штучний інтелект
    • Схожі повідомлення:
      • Підручник з дерева
      • Топ-50 проблем кодування дерева
      • Тренувальні задачі на дереві

    10. Графік

    А Графік це нелінійна структура даних, що складається з кінцевого набору вершин (або вузлів) і набору ребер, які з’єднують пару вузлів.

    Вивчайте алгоритми

    Після того, як ви очистите поняття Структури даних , тепер настав час розпочати вашу подорож через Алгоритми . Залежно від типу та використання алгоритми згруповані в кілька категорій, як показано нижче:

    1. Алгоритм пошуку

    Алгоритми пошуку використовуються для пошуку конкретних даних у більшому наборі даних. Це допомагає визначити наявність цільового значення в даних. Існують різні типи алгоритмів пошуку, кожен зі своїм підходом і ефективністю.

    • Найпоширеніші алгоритми пошуку:
      • Лінійний пошук : Ітеративний пошук від одного кінця до іншого.
      • Двійковий пошук : пошук за принципом розділяй і володарюй у відсортованому масиві, зменшуючи простір пошуку вдвічі на кожній ітерації.
      • Тернарний пошук : пошук за принципом «розділяй і володарюй» у відсортованому масиві, розділяючи простір пошуку на три частини на кожній ітерації.
    • Інші алгоритми пошуку:
      • Перейти до пошуку
      • Інтерполяційний пошук
      • Експоненціальний пошук
    • Пов'язані теми:
      • Тренувальні задачі на пошуковий алгоритм

    2. Алгоритм сортування

    Алгоритми сортування використовуються для впорядкування елементів списку в певному порядку, наприклад числовому або алфавітному. Він упорядковує елементи в систематичний спосіб, полегшуючи пошук і доступ до певних елементів.

    Існує багато різних типів алгоритмів сортування. Деякі широко використовувані алгоритми:

    Алгоритм сортування опис
    Бульбашкове сортування Ітеративно порівнює сусідні елементи та міняє їх місцями, якщо вони не в порядку. Найбільший елемент висувається в кінець списку з кожним проходом.
    Сортування вибору Знаходить мінімальний елемент у несортованій частині списку та міняє його місцями з першим елементом. Повторює цей процес, доки не буде відсортовано весь список.
    Сортування вставкою Будує відсортований список по одному елементу за раз, вставляючи кожен невідсортований елемент у правильне місце у відсортованій частині.
    Швидке сортування Алгоритм розділяй і володарюй, який вибирає опорний елемент, розбиває список на два підсписки на основі опорного списку та рекурсивно застосовує той самий процес до підсписків.
    Сортування злиттям Ще один алгоритм «розділяй і володарюй», який рекурсивно ділить список на менші підсписки, сортує їх, а потім знову об’єднує, щоб отримати відсортований список.

    Пов'язані теми:

    • Підручник з алгоритму сортування
    • Найпопулярніші питання та проблеми для співбесіди
    • Тренувальні задачі на тему «Алгоритм сортування».

    3. Алгоритм «розділяй і володарюй».

    Розділяй і володарюй алгоритми дотримуються рекурсивної стратегії для вирішення проблем, розділяючи їх на менші підпроблеми, вирішуючи ці підпроблеми та комбінуючи рішення для отримання остаточного рішення.

    Кроки:

    1. Розділити : розділіть проблему на менші незалежні підпроблеми.
    2. завоювати : Рекурсивно розв’яжіть кожну підзадачу.
    3. Комбінуйте : Об’єднайте розв’язки підзадач, щоб отримати остаточний розв’язок.

    приклади:

    • Сортування злиттям: ділить масив на дві половини, рекурсивно сортує кожну половину та об’єднує відсортовані половини.
    • Швидке сортування: вибирає зведений елемент, розбиває масив на два підмасиви на основі зведеного масиву та рекурсивно сортує кожен підмасив.
    • Двійковий пошук: неодноразово ділить простір пошуку навпіл, доки не буде знайдено цільовий елемент або поки простір пошуку не буде вичерпано.

    Схожі статті:

    • Підручник «Розділяй і володарюй».
    • Практичні завдання за алгоритмом «Розділяй і володарюй».

    4. Жадібні алгоритми

    Як випливає з назви, цей алгоритм створює рішення одну частину за раз і вибирає наступну частину, яка дає найбільш очевидну та негайну вигоду, тобто, яка є найоптимальнішим вибором на даний момент. Тож проблеми, де вибір локально оптимального також призводить до глобальних рішень, найкраще підходять для Greedy.

    Деякі важливі проблеми жадібних алгоритмів:

    Алгоритм опис
    Дробовий ранець Знайдіть максимальну загальну вартість предметів, які можна помістити в рюкзак, дозволяючи дробове включення предметів.
    Алгоритм Дейкстри Знаходить найкоротший шлях від вихідної вершини до всіх інших вершин у зваженому графі.
    Алгоритм Крускала Знаходить мінімальне остовне дерево зваженого графа.
    Кодування Хаффмана Створює оптимальний код префікса для набору символів, мінімізуючи загальну довжину кодування.

    Схожі статті:

    • Підручник із жадібного алгоритму
    • Тренувальні задачі за алгоритмом Greedy

    5. Рекурсія

    Рекурсія це техніка програмування, коли функція викликає саму себе у своєму власному визначенні. Зазвичай він використовується для вирішення проблем, які можна розбити на менші екземпляри однієї проблеми. Наприклад: Ханойські вежі (TOH) , Факторний розрахунок і Послідовність Фібоначчі тощо

    Кроки :

    • Базовий випадок : Визначте умову, яка зупиняє рекурсивні виклики та забезпечує рішення.
    • Рекурсивний випадок : Визначте кроки, щоб розбити проблему на менші випадки та зробити рекурсивні виклики.
    • Повернення : повертає рішення з рекурсивних викликів і комбінує їх для вирішення вихідної проблеми.

    Те, що робить рекурсію одним із найбільш використовуваних алгоритмів, полягає в тому, що вона є основою для багатьох інших алгоритмів, таких як Обходи дерев , Обходи графа , Алгоритми розділяй і володарюй і Алгоритми зворотного відстеження .

    Пов'язані теми:

    6. Алгоритм зворотного відстеження

    Як згадувалося раніше, Відстеження назад Алгоритм походить від алгоритму рекурсії з можливістю повернення, якщо рекурсивне рішення виходить з ладу, тобто, якщо рішення не вдається, програма відстежує момент, коли воно вийшло з ладу, і створює інше рішення. Таким чином, він пробує всі можливі рішення та знаходить правильне.

    Деякі важливі та найпоширеніші проблеми алгоритмів зворотного відстеження, які ви повинні вирішити, перш ніж рухатися вперед, це:

    проблема опис
    Проблема лицарського туру Знаходження такої послідовності ходів коня на шахівниці, щоб він відвідував кожне поле рівно один раз.
    Щур в лабіринті Пошук шляху від початкової позиції до виходу в лабіринті з перешкодами, представленими у вигляді стін.
    Проблема N-ферзя Розміщення N ферзів на N×N шахівниці таким чином, щоб жодні ферзі не атакували один одного.
    Проблема суми підмножини Визначення, чи існує підмножина даної множини із заданою сумою.
    Судоку Розв’язування головоломки із сіткою 9×9 із числами від 1 до 9 так, щоб кожен рядок, стовпець і підсітка 3×3 містили всі цифри без повторень.

    Пов'язана стаття:

    • Навчальний посібник із зворотного відстеження
    • Тренувальні задачі на алгоритм зворотного відстеження

    7. Динамічне програмування

    Динамічне програмування це метод, який використовується в математиці та інформатиці для вирішення складних задач шляхом їх розбиття на простіші підзадачі. Вирішуючи кожну підпроблему лише один раз і зберігаючи результати, це дозволяє уникнути зайвих обчислень, що призводить до більш ефективних рішень для широкого кола проблем.

    Ключові поняття:

    • Оптимальна підструктура : Оптимальне рішення проблеми можна побудувати з оптимальних рішень її підпроблем.
    • Перекриваються підпроблеми : підпроблеми часто повторюються у більшій проблемі, що призводить до надлишкових обчислень.
    • Запам'ятовування / Табулювання : Зберігання рішень підпроблем, щоб уникнути повторного обчислення.

    Деякі важливі та найпоширеніші проблеми алгоритмів динамічного програмування, які ви повинні вирішити, перш ніж рухатися вперед, це:

    проблема опис
    Послідовність Фібоначчі Генерування чисел Фібоначчі за допомогою динамічного програмування, щоб уникнути зайвих обчислень.
    Найдовша загальна підпослідовність Знаходження найдовшої підпослідовності, спільної для двох послідовностей.
    Найдовша зростаюча підпослідовність Знаходження найдовшої підпослідовності заданої послідовності, в якій елементи відсортовані в порядку зростання.
    0/1 Проблема ранця Визначення максимального значення, яке можна отримати шляхом вибору предметів із заданою вагою та значеннями, не перевищуючи при цьому встановлену межу ваги.
    Проблема різання стрижня Максимізація прибутку шляхом розрізання стрижня заданої довжини на частини та продажу їх за заданими цінами.
    Проблема розміни монет Визначення кількості способів розміну на задану суму з використанням заданого набору номіналів монет.
    Редагувати відстань Знаходження мінімальної кількості операцій (вставлення, видалення, заміни), необхідних для перетворення одного рядка в інший.
    Проблема суми підмножини Визначення, чи існує підмножина заданої множини із заданою сумою.
    Найдовша паліндромна підпослідовність Знаходження найдовшої підпослідовності даної послідовності, яка є паліндромом.
    Максимальна сума підмасиву Пошук суміжного підмасиву з найбільшою сумою в заданому одновимірному масиві.
    Розділ рівна підмножина сума Визначення того, чи можна розділити дану множину на дві підмножини з рівною сумою.
    Шлях мінімальних витрат Знаходження шляху мінімальної вартості від верхнього лівого кута до нижнього правого кута даної сітки.
    Максимальний підмасив продукту Пошук суміжного підмасиву з найбільшим продуктом у заданому одновимірному масиві.

    Схожі статті:

    • Табуляція проти мемоізації
    • Як вирішити задачу динамічного програмування?
    • Підручник з динамічного програмування
    • 50 найкращих проблем кодування динамічного програмування для співбесід
    • Практичні завдання з алгоритму динамічного програмування

    8. Алгоритми графів :

    Графові алгоритми у структурах даних і алгоритмах (DSA) — це набір технік і методів, які використовуються для вирішення проблем, пов’язаних із графами, які є сукупністю вузлів і ребер. Ці алгоритми призначені для виконання різноманітних операцій над графіками, наприклад пошук, проходження, знаходження найкоротшого шляху , і визначальний підключення . Вони необхідні для вирішення широкого кола проблем реального світу, включаючи мережеву маршрутизацію, аналіз соціальних мереж і розподіл ресурсів.

    Тема

    Опис теми

    Алгоритм Опис алгоритму
    Обхід графа

    Методи відвідування всіх вершин у графі.

    Пошук у глибину (DFS) Досліджує якомога далі кожну гілку перед поверненням назад.
    Пошук у ширину (BFS) Досліджує сусідні вершини перед переходом на наступний рівень вершин.

    Мінімальна кількість охоплюючих дерев

    Мінімальні остовні дерева — це найменші дерева, які з’єднують усі вузли в графі без утворення циклів, що досягається шляхом додавання найкоротших ребер.

    Алгоритм Крускала

    Він знаходить мінімальне остовне дерево для зв’язного зваженого графа. Він додає найменше вагове ребро, яке не утворює цикл.

    Алгоритм Прима

    встановити факел

    Він також знаходить мінімальне остовне дерево для зв’язного зваженого графа. Він додає найменше вагове ребро, яке з’єднує два дерева.

    Топологічне сортування

    Топологічне сортування — це лінійне впорядкування вершин у орієнтованому ациклічному графі (DAG), що для кожного орієнтованого ребра від вершини u до вершини v, u стоїть перед v у порядку.

    Алгоритм Кана Алгоритм Кана знаходить топологічний порядок орієнтованого ациклічного графа (DAG).
    Алгоритм на основі DFS Алгоритм на основі DFS використовує пошук у глибину для виконання топологічного сортування в спрямованому ациклічному графі (DAG).

    Найкоротший шлях

    Найкоротший шлях у графі — це шлях між двома вершинами в графі, який має мінімальну суму ваг уздовж його ребер порівняно з усіма іншими шляхами між тими ж двома вершинами.

    Алгоритм Дейкстри

    Жадібний алгоритм пошуку найкоротшого шляху між усіма вузлами за час O(E * V logV).

    Алгоритм Флойда-Воршалла

    Знаходить найкоротший шлях між усіма парами вузлів за час O(V^3).

    Алгоритм Беллмана Форда

    Знаходить найкоротший шлях від одного джерела за час O(V * E).

    Алгоритм Джонсона

    Знаходить найкоротший шлях між усіма парами вершин за час O(V^2 logV + V * E).

    Сильно пов'язані компоненти

    Сильнозв’язний компонент (SCC) орієнтованого графа — це максимальний набір вершин, такий, що існує шлях від кожної вершини в наборі до кожної іншої вершини в наборі.

    Алгоритм Косараджу

    Алгоритм Косараджу — це двопрохідний алгоритм, який ефективно знаходить сильно зв’язані компоненти (SCC) орієнтованого графа.

    Алгоритм Тар'яна

    Алгоритм Тар’яна є ще одним ефективним алгоритмом для знаходження SCC в орієнтованому графі

    Пов'язані теми:

    • Підручник з графіків
    • 50 найпопулярніших проблем графічного кодування для співбесід
    • Практична задача на графових алгоритмах

    9 . Пошук шаблонів

    Пошук шаблону це фундаментальна техніка DSA, яка використовується для пошуку випадків певного шаблону в заданому тексті.

    Нижче наведено кілька стандартних алгоритмів пошуку шаблонів:

    Алгоритм опис Часова складність
    Груба сила Він порівнює шаблон з кожним підрядком тексту O(mn)
    Кнут-Морріс-Пратт Він використовує попередньо обчислену функцію відмови, щоб пропустити непотрібні порівняння O(m + n)
    Боєр-Мур Він порівнює шаблон справа наліво, пропускаючи символи на основі останньої невідповідності O(mn)
    Рабін-Карп Він використовує хешування для швидкої перевірки потенційних збігів O(m + n)

    Пов'язані теми:

    • Підручник із пошуку шаблонів
    • Практична задача на Пошук шаблонів

    10 . Математичні алгоритми

    Математичні алгоритми є класом алгоритмів, які розв’язують проблеми, пов’язані з математичними поняттями. Вони широко використовуються в різних сферах, включаючи комп’ютерну графіку, числовий аналіз, оптимізацію та криптографію.

    Алгоритм опис
    НОД і LCM Знайти найбільший спільний дільник і найменше спільне кратне двох чисел.
    Прості фактори Розкласти число на прості множники.
    Числа Фібоначчі Згенеруйте послідовність Фібоначчі, де кожне число є сумою двох попередніх.
    Каталонські номери Підрахувати кількість дійсних виразів із заданою кількістю пар дужок.
    Модульна арифметика Виконувати арифметичні дії над числами за модулем заданого значення.
    Функція Ейлера Підрахуйте кількість взаємно простих натуральних чисел, менших за дане число.
    Обчислення nCr Обчисліть біноміальний коефіцієнт, який представляє кількість способів вибору r елементів із набору з n елементів.
    Прості числа та перевірки простоти Визначте, чи дане число є простим, і ефективно знайдіть прості числа.
    Алгоритми сита Знайти всі прості числа до заданої межі.

    Пов'язані теми:

    • Практична задача на математичний алгоритм

    11. Геометричні алгоритми

    Геометричні алгоритми є класом алгоритмів, які розв’язують проблеми, пов’язані з геометрією. Геометричні алгоритми мають важливе значення для розв’язування широкого кола завдань в інформатиці, таких як:

    Алгоритм опис
    Опукла оболонка Знаходить найменший опуклий многокутник, який містить набір точок.
    Найближча пара точок Знаходить дві найближчі одна до одної точки в наборі.
    Лінія перетину Визначає, чи перетинаються дві прямі, і, якщо так, знаходить точку перетину.
    Точка в полігоні Визначає, чи знаходиться дана точка всередині чи поза багатокутником.

    Пов'язані теми:

    • Практична задача з геометричних алгоритмів

    12. Порозрядні алгоритми

    Побітові алгоритми це алгоритми, які працюють з окремими бітами чисел. Ці алгоритми маніпулюють двійковим представленням чисел для виконання таких завдань, як маніпулювання бітами, порозрядні логічні операції (AND, OR, XOR), зміщення бітів , і налаштування або очищення окремих бітів в межах числа. Порозрядні алгоритми зазвичай використовуються в завдання з низькорівневого програмування, криптографії та оптимізації де потрібна ефективна маніпуляція окремими бітами.

    Тема опис
    Зміщення бітів Зміщує біти вліво або вправо на вказану кількість позицій.
    Зсув вліво (<<) Зсуває біти вліво, фактично множачи число на 2.
    Правий зсув (>>) Зсуває біти вправо, фактично ділячи число на 2.
    Витяг бітів Використання масок для вилучення конкретних бітів із цілого числа.
    Установка біт Використання масок для встановлення конкретних бітів на 1 у цілому числі.
    Очищення бітів Використання масок для встановлення конкретних бітів на 0 у цілому числі.
    Перемикання бітів Використання XOR (^) для перемикання певних бітів у цілому числі.
    Підрахунок встановлених бітів Підрахунок кількості встановлених бітів (1с) у цілому числі.

    Пов'язані теми:

    • Підручник з побітових алгоритмів
    • Практична задача з побітових алгоритмів

    13. Рандомізовані алгоритми

    Рандомізовані алгоритми — це алгоритми, які використовують випадковість для вирішення проблем. Вони використовують випадкові дані для досягнення своїх цілей, що часто призводить до простіших або ефективніших рішень.

    Типи рандомізованих алгоритмів:

    • Лас-Вегас : завжди дає правильний результат, але час виконання є випадковим.
    • Монте Карло : може призвести до неправильного результату з невеликою ймовірністю, але час роботи зазвичай швидший.

    Важливі алгоритми, які використовують алгоритми рандомізації:

    Алгоритм опис
    Швидке сортування Рандомізований алгоритм сортування з середньою часовою складністю O(n log n).
    Список пропусків Рандомізована структура даних, яка забезпечує швидкий пошук і операції вставки.
    Фільтр Блум Імовірнісна структура даних для ефективного тестування приналежності до набору.

    14. Алгоритм розгалуження та зв’язку

    The Алгоритм розгалуження та обмеження це метод, який використовується в задачах комбінаторної оптимізації для систематичного пошуку найкращого рішення. Він працює шляхом поділу проблеми на менші підпроблеми або гілки, а потім видалення певних гілок на основі обмежень оптимального рішення. Цей процес триває, доки не буде знайдено найкраще рішення або не будуть досліджені всі гілки.

    Стандартні завдання на алгоритм розгалуження та обмеження:

    Унікальна проблема опис
    0/1 Рюкзак із використанням гілки та пов’язки Деталі реалізації розгалуженого та зв’язаного підходу для розв’язання задачі ранця 0/1.
    0/1 рюкзак з використанням найнижчої вартості гілки та кордону Розв’язування задачі «Рюкзак 0/1» за допомогою методу найменшої вартості розгалуження та межі.
    Завдання головоломки 8 із використанням розгалуження та кордону Застосування відгалуження та пов’язане з розв’язанням задачі головоломки 8, популярної ковзної гри-головоломки.
    Проблема N Queen з використанням розгалуження та кордону Використовуючи розгалуження та обов’язково знаходячи розв’язки проблеми N ферзів, класичної шахової задачі.

    Пов'язані теми:

    • Підручник з алгоритмів розгалуження та зв’язку

    Дізнайтеся про складності

    У структурах даних і алгоритмах (DSA) головною метою є ефективне та результативне вирішення проблем. Щоб визначити ефективність програми, ми розглядаємо два типи складності:

    1. Складність часу : це вказує нам, скільки часу потрібно для виконання нашого коду.
    2. Космічна складність : це вказує нам, скільки пам’яті використовує наш код.

    Асимптотичний запис :

    Щоб порівняти ефективність алгоритмів, ми використовуємо асимптотичну нотацію, математичний інструмент, який оцінює час на основі вхідний розмір без запуску коду. Він зосереджений на кількості основних операцій у програмі.

    карти java
    Позначення опис
    Великий О (Ο) Описує найгірший сценарій, надаючи верхню межу часу алгоритму.
    Омега (Ω) Описує найкращий сценарій, пропонуючи нижчу часову межу алгоритму.
    Тета (θ) Представляє середню складність алгоритму алгоритму.

    Найпоширенішою нотацією для аналізу коду є Велика буква O , забезпечуючи верхню межу часу роботи або використання пам’яті щодо розміру вхідних даних.

    Пов'язані теми:

    Шпаргалки для практичних завдань:

    Підібрані списки проблем із наведених нижче статей:

    • Дорожня карта DSA від Сандіпа Джайна
    • SDE SHEET – Повний посібник із підготовки SDE
    • Головна таблиця techcodeview.com – список усіх шпаргалок