mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-09 22:16:06 +00:00
66 lines
6.6 KiB
Markdown
66 lines
6.6 KiB
Markdown
---
|
|
comments: true
|
|
---
|
|
|
|
# 1.2 Что такое алгоритм
|
|
|
|
## 1.2.1 Определение алгоритма
|
|
|
|
<u>Алгоритм (algorithm)</u> - это набор инструкций или шагов, предназначенных для решения конкретной задачи за ограниченное время. Он обладает следующими свойствами.
|
|
|
|
- Задача четко определена и включает ясные определения входных и выходных данных.
|
|
- Обладает осуществимостью и может быть выполнен за ограниченное количество шагов, времени и памяти.
|
|
- Каждый шаг имеет определенное значение, и при одинаковых входных данных и условиях выполнения результат всегда будет одинаковым.
|
|
|
|
## 1.2.2 Определение структуры данных
|
|
|
|
<u>Структура данных (data structure)</u> - это способ организации и хранения данных, включающий содержимое данных, их взаимосвязи и методы операций с ними. Структура данных преследует следующие цели.
|
|
|
|
- Минимизировать занимаемое пространство для экономии памяти компьютера.
|
|
- Обеспечивать максимально быструю обработку данных, включая доступ, добавление, удаление и обновление данных.
|
|
- Обеспечивать простое представление данных и логическую информацию для эффективного выполнения алгоритмов.
|
|
|
|
**Проектирование структуры данных - это процесс, полный компромиссов**. Если вы хотите улучшить один аспект, часто приходится идти на уступки в другом. Приведем два примера.
|
|
|
|
- Связный список, по сравнению с массивом, более удобен для добавления и удаления данных, но имеет проблемы со скоростью доступа к данным.
|
|
- Граф, по сравнению со связным списком, предоставляет более богатую логическую информацию, но требует большего объема памяти.
|
|
|
|
## 1.2.3 Связь между структурами данных и алгоритмами
|
|
|
|
Как показано на рисунке 1-4, структуры данных и алгоритмы тесно взаимосвязаны, что проявляется в следующих трех аспектах.
|
|
|
|
- Структуры данных являются основой алгоритмов. Они обеспечивают структурированное хранение данных и методы их обработки.
|
|
- Алгоритмы оживляют структуры данных. Сами по себе структуры данных лишь хранят информацию, но в сочетании с алгоритмами они позволяют решать конкретные задачи.
|
|
- Алгоритмы можно реализовать на основе различных структур данных, однако эффективность их выполнения может значительно различаться, поэтому выбор подходящей структуры данных является ключевым фактором.
|
|
|
|
{ class="animation-figure" }
|
|
|
|
<p align="center"> Рисунок 1-4 Связь между структурами данных и алгоритмами </p>
|
|
|
|
Структуры данных и алгоритмы подобны конструктору, как показано на рисунке 1-5. Комплект конструктора, помимо множества деталей, содержит также подробную инструкцию по сборке. Следуя этой инструкции шаг за шагом, можно собрать красивую модель.
|
|
|
|
{ class="animation-figure" }
|
|
|
|
<p align="center"> Рисунок 1-5 Сборка конструктора </p>
|
|
|
|
Подробное описание аналогии с конструктором представлено в таблице 1-1.
|
|
|
|
<p align="center"> Таблица 1-1 Сравнение структур данных и алгоритмов с конструктором </p>
|
|
|
|
<div class="center-table" markdown>
|
|
|
|
| Структуры данных и алгоритмы | Конструктор |
|
|
| ---------------------------- | ----------- |
|
|
| Входные данные | Несобранные детали конструктора |
|
|
| Структура данных | Организация деталей конструктора, включая форму, размер, способы соединения и т. д. |
|
|
| Алгоритм | Последовательность действий по сборке деталей в целевую модель |
|
|
| Выходные данные | Собранная модель конструктора |
|
|
|
|
</div>
|
|
|
|
Стоит отметить, что структуры данных и алгоритмы не зависят от языка программирования. Именно поэтому данная книга предлагает их реализации на различных языках.
|
|
|
|
!!! tip "Принятое сокращение"
|
|
|
|
В реальных обсуждениях выражение «структуры данных и алгоритмы» обычно сокращают до просто «алгоритмы». Например, хорошо известные задачи LeetCode на деле одновременно проверяют знания и по структурам данных, и по алгоритмам.
|