This commit is contained in:
krahets
2026-04-03 18:46:15 +08:00
parent 377736b1bd
commit 9d21ca86b0
352 changed files with 46563 additions and 11262 deletions
+26 -26
View File
@@ -6,60 +6,60 @@ comments: true
## 1.2.1   Определение алгоритма
<u>Алгоритм (algorithm)</u> - это набор инструкций или шагов, который решает конкретную задачу за конечное время. Он обладает следующими свойствами.
<u>Алгоритм (algorithm)</u> - это набор инструкций или шагов, предназначенных для решения конкретной задачи за ограниченное время. Он обладает следующими свойствами.
- Задача четко определена и имеет ясные определения входных и выходных данных.
- Алгоритм осуществим и может быть выполнен за конечное число шагов, времени и памяти.
- Каждый шаг имеет однозначный смысл, и при одинаковых входных данных и условиях выполнения результат всегда будет одинаковым.
- Задача четко определена и включает ясные определения входных и выходных данных.
- Обладает осуществимостью и может быть выполнен за ограниченное количество шагов, времени и памяти.
- Каждый шаг имеет определенное значение, и при одинаковых входных данных и условиях выполнения результат всегда будет одинаковым.
## 1.2.2 &nbsp; Определение структуры данных
<u>Структура данных (data structure)</u> - это способ организации и хранения данных, охватывающий само содержимое данных, связи между данными и методы работы с ними. У нее есть следующие цели проектирования.
<u>Структура данных (data structure)</u> - это способ организации и хранения данных, включающий содержимое данных, их взаимосвязи и методы операций с ними. Структура данных преследует следующие цели.
- Занимать как можно меньше места, чтобы экономить память компьютера.
- Выполнять операции над данными как можно быстрее, включая доступ, добавление, удаление, обновление и т. д.
- Предоставлять компактное представление данных и логическую информацию, чтобы алгоритмы могли работать эффективно.
- Минимизировать занимаемое пространство для экономии памяти компьютера.
- Обеспечивать максимально быструю обработку данных, включая доступ, добавление, удаление и обновление данных.
- Обеспечивать простое представление данных и логическую информацию для эффективного выполнения алгоритмов.
**Проектирование структур данных - это процесс, полный компромиссов**. Если мы хотим улучшить что-то одно, то часто вынуждены уступить в чем-то другом. Ниже приведены два примера.
**Проектирование структуры данных - это процесс, полный компромиссов**. Если вы хотите улучшить один аспект, часто приходится идти на уступки в другом. Приведем два примера.
- По сравнению с массивами связные списки удобнее для добавления и удаления данных, но жертвуют скоростью доступа к ним.
- По сравнению со связными списками графы предоставляют более богатую логическую информацию, но требуют большего объема памяти.
- Связный список, по сравнению с массивом, более удобен для добавления и удаления данных, но имеет проблемы со скоростью доступа к данным.
- Граф, по сравнению со связным списком, предоставляет более богатую логическую информацию, но требует большего объема памяти.
## 1.2.3 &nbsp; Связь между структурами данных и алгоритмами
Как показано на рисунке 1-4, структуры данных и алгоритмы тесно связаны и сильно зависят друг от друга; это проявляется в следующих трех аспектах.
Как показано на рисунке 1-4, структуры данных и алгоритмы тесно взаимосвязаны, что проявляется в следующих трех аспектах.
- Структуры данных служат фундаментом алгоритмов. Они дают алгоритмам структурированный способ хранения данных и методы работы с ними.
- Алгоритмы оживляют структуры данных. Сами по себе структуры данных лишь хранят информацию, а в сочетании с алгоритмами позволяют решать конкретные задачи.
- Алгоритмы обычно можно реализовать на основе разных структур данных, но эффективность выполнения может сильно различаться, поэтому выбор подходящей структуры данных является ключевым.
- Структуры данных являются основой алгоритмов. Они обеспечивают структурированное хранение данных и методы их обработки.
- Алгоритмы оживляют структуры данных. Сами по себе структуры данных лишь хранят информацию, но в сочетании с алгоритмами они позволяют решать конкретные задачи.
- Алгоритмы можно реализовать на основе различных структур данных, однако эффективность их выполнения может значительно различаться, поэтому выбор подходящей структуры данных является ключевым фактором.
![Связь между структурами данных и алгоритмами](what_is_dsa.assets/relationship_between_data_structure_and_algorithm.png){ class="animation-figure" }
<p align="center"> Рисунок 1-4 &nbsp; Связь между структурами данных и алгоритмами </p>
Структуры данных и алгоритмы похожи на сборку конструктора, показанную на рисунке 1-5. В набор конструктора, помимо множества деталей, входит и подробная инструкция по сборке. Если шаг за шагом следовать этой инструкции, можно собрать красивую модель.
Структуры данных и алгоритмы подобны конструктору, как показано на рисунке 1-5. Комплект конструктора, помимо множества деталей, содержит также подробную инструкцию по сборке. Следуя этой инструкции шаг за шагом, можно собрать красивую модель.
![Сборка конструктора](what_is_dsa.assets/assembling_blocks.png){ class="animation-figure" }
<p align="center"> Рисунок 1-5 &nbsp; Сборка конструктора </p>
Подробное соответствие между ними показано в таблице 1-1.
Подробное описание аналогии с конструктором представлено в таблице 1-1.
<p align="center"> Таблица 1-1 &nbsp; Сравнение структур данных и алгоритмов со сборкой конструктора </p>
<p align="center"> Таблица 1-1 &nbsp; Сравнение структур данных и алгоритмов с конструктором </p>
<div class="center-table" markdown>
| Структуры данных и алгоритмы | Сборка конструктора |
| ---------------------------- | ------------------------------------------ |
| Входные данные | Несобранные детали конструктора |
| Структура данных | Организация деталей: форма, размер, способ соединения и т. д. |
| Алгоритм | Последовательность шагов по сборке деталей в целевую форму |
| Выходные данные | Собранная модель конструктора |
| Структуры данных и алгоритмы | Конструктор |
| ---------------------------- | ----------- |
| Входные данные | Несобранные детали конструктора |
| Структура данных | Организация деталей конструктора, включая форму, размер, способы соединения и т. д. |
| Алгоритм | Последовательность действий по сборке деталей в целевую модель |
| Выходные данные | Собранная модель конструктора |
</div>
Стоит отметить, что структуры данных и алгоритмы не зависят от конкретного языка программирования. Именно поэтому эта книга может давать реализации на разных языках программирования.
Стоит отметить, что структуры данных и алгоритмы не зависят от языка программирования. Именно поэтому данная книга предлагает их реализации на различных языках.
!!! tip "Принятое сокращение"
В реальных обсуждениях мы обычно сокращаем выражение "структуры данных и алгоритмы" до просто "алгоритмы". Например, хорошо известные алгоритмические задачи LeetCode на деле одновременно проверяют знания и по структурам данных, и по алгоритмам.
В реальных обсуждениях выражение "структуры данных и алгоритмы" обычно сокращают до просто "алгоритмы". Например, хорошо известные задачи LeetCode на деле одновременно проверяют знания и по структурам данных, и по алгоритмам.