mirror of
https://github.com/krahets/hello-algo.git
synced 2026-08-14 04:30:58 +00:00
build
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
---
|
||||
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 на деле одновременно проверяют знания и по структурам данных, и по алгоритмам.
|
||||
Reference in New Issue
Block a user