Почему «Алгоритмы» и «Структуры данных» рассматриваются как отдельные дисциплины? - PullRequest
11 голосов
/ 14 марта 2010

Этот вопрос был последней каплей;и я долго размышлял об этом,

Почему люди думают об «алгоритмах» и «структурах данных» как о чем-то, что можно отделить друг от друга?

Iувидеть множество доказательств того, что они разделились в умах программистов.

  • они запрашивают книги "Структуры данных и алгоритмы"
  • они ссылаются на "ДанныеСтруктуры "и" Алгоритмы "как отдельные университетские курсы
  • они" знают алгоритмы ", но" слабы в структурах данных "(не может найти ссылку, извините).
  • и т. Д.

По моему мнению, "структуры данных" представляют собой алгоритмы, поскольку концепция "структуры данных" состоит из алгоритмов для обработки данных, которые входят и выходят изструктуры.Но мнение кажется не мейнстримом.Что мне не хватает?

Редактировать : к сожалению, я плохо сформулировал вопрос.Разделение структур данных и алгоритмов в программах, которые пишут люди , является естественным, поскольку первое - это данные, а второе - функции (а в полуфункциональных средах, таких как STL, это ядро ​​всего этого).).

Но вышеприведенные пункты и сам вопрос относятся к тому, как люди думают , к способу, которым они организуют знания в своих головах.Это не должно даже связывать с написанием кода.


Вот некоторые ссылки, где люди разделяют "алгоритмы" и "структуры данных", когда они одно и то же:

Ответы [ 9 ]

14 голосов
/ 14 марта 2010

Они разные. Рассмотрим графики или деревья, чтобы быть более конкретными. Теперь дерево кажется только деревом. Но вы можете просматривать его в предзаказе, в порядке или после заказа (3 алгоритмы для одной структуры ).

Вы можете иметь несколько или только 2 дочерних элемента для одного узла. Дерево может быть сбалансированным (например, AVL) или содержать дополнительную информацию (например, индексы B-дерева в базах данных). Это разные структуры . Но вы все равно проходите их по тому же алгоритму .

Видите это сейчас?

Еще один момент: алгоритмы иногда являются, а иногда не зависят от структур данных. Некоторые алгоритмы имеют разную сложность в разных структурах (поиск путей в графе, представленном в виде списка или 2D-таблицы).

2 голосов
/ 14 марта 2010

Алгоритмы и структуры данных тесно связаны друг с другом. Алгоритм зависит от структур данных, если вы измените любую из них, сложность значительно изменится. Они не одинаковы, но определенно являются двумя сторонами одной медали. Выбор хорошей структуры данных сам по себе - путь к лучшему алгоритму.

Например, , Приоритетные очереди могут быть реализованы с использованием двоичных куч и биномиальных куч , двоичные кучи позволяют просматривать в элементе с наивысшим приоритетом в постоянное время, тогда как биномиальные кучи требуют времени O (log N) для просмотра.

Таким образом, конкретный алгоритм работает лучше всего для этой конкретной структуры данных (в определенном контексте), поэтому Алгоритмы и Структуры данных идут рука об руку!

2 голосов
/ 14 марта 2010

Люди называют их разными сущностями, потому что они есть. Предположим, я хочу найти элемент из набора данных. Если я помещу эти данные в массив, массив будет структурой данных. Как только он окажется в массиве, я могу использовать несколько различных алгоритмов для поиска интересующего меня элемента. Я мог бы отсортировать массив (с любым из нескольких видов), затем использовать бинарный поиск, я мог просто проверить каждый элемент линейно и т. Д. Выбор массива в качестве структуры данных, которую я бы использовал, а не связанного списка, - это не выбор алгоритма.

Тем не менее, важно понять одно, чтобы понять другое. Если вы плохо понимаете алгоритмы, тогда не очевидно, каковы преимущества и недостатки различных структур данных, и наоборот. Таким образом, имеет смысл учить их одновременно. Однако это разные сущности.

[Редактировать] Подумайте об этом: если вы посмотрите на псевдокод для большинства алгоритмов, структура данных не указана. У вас может быть «список» элементов для итерации и т. Д., Но точная реализация этого списка не важна для правильности алгоритма.

1 голос
/ 14 марта 2010

Они являются отдельными университетскими курсами. Как правило, курс структур данных делает упор на программирование и является обязательным условием для курса алгоритмов, который подчеркивает математический анализ алгоритмов. Я не думаю, что трудно понять, почему многие люди с высшим образованием в CS могут думать о них как об отдельных.

1 голос
/ 14 марта 2010

На мой взгляд, алгоритмы - это то, что работает с или на структурах данных, поэтому между ними есть разница. Простая структура данных - это массив, но существует множество алгоритмов, которые работают с простыми массивами, поэтому должен быть способ их разделения. Массив также может представлять дерево, а деревья обрабатываются с помощью специализированных алгоритмов.

Разница не велика, потому что большую часть времени вы не можете получить одно без другого, но иногда можете. Рассмотрим тривиальный алгоритм, который определяет, является ли число простым - он не использует структуры данных. Рассмотрим алгоритм GCD, также нет структур данных. Вы можете говорить об алгоритме, не говоря о структурах данных, но вы не можете говорить о структуре данных, не говоря обычно об алгоритмах. Вы можете говорить о дереве, но вам понадобятся алгоритмы для вставки, удаления и т. Д.

Я думаю, хорошо, что есть различие, потому что концептуально это разные вещи. Алгоритм - это набор шагов, используемых для выполнения задачи, в то время как структура данных - это то, что используется для хранения данных, манипулирование этими данными осуществляется с помощью алгоритмов.

1 голос
/ 14 марта 2010

Я бы сказал, что это потому, что функциональное программирование отделяет то, что выполняется, от самих операций. Цели и действия, безусловно, разные, даже если они тесно переплетены.

Это было объектно-ориентированное программирование, которое помещало данные и операции в один компонент. Возможно, если бы ОО пришел раньше, была бы одна дисциплина.

0 голосов
/ 15 марта 2010

Название книги Алгоритм + структуры данных = Программы (1975) не кем иным, как Никлаус Вирт предполагает, что оба они необходимы при написании программы.

0 голосов
/ 14 марта 2010

Два, конечно, тесно переплетены. Вот почему сообщения, на которые вы ссылаетесь, запрашивают книги на обоих. Хотя не всегда. Например, ядро ​​алгоритма сортировки остается неизменным независимо от того, над какой структурой данных вы работаете.

0 голосов
/ 14 марта 2010

Я согласен с вами. Обе являются двумя сторонами одной и той же вещи.

Когда речь идет о структурах данных, речь всегда идет о хранении данных таким образом, чтобы оптимизировать определенные операции с этими данными, что приводит нас к алгоритмам и сложности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...