Почему “Алгоритмы” и “Структуры данных” рассматривают как отдельные дисциплины?

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

Почему люди думают об "Алгоритмах" и "Структурах данных" как о чем-то, что может быть разделено друг от друга?

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

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

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

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

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


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

13
задан r00ster 6 November 2019 в 20:07
поделиться

9 ответов

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

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

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

2
ответ дан 1 December 2019 в 22:38
поделиться

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

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

1
ответ дан 1 December 2019 в 22:38
поделиться

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

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

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

1
ответ дан 1 December 2019 в 22:38
поделиться

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

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

Теперь видите?

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

14
ответ дан 1 December 2019 в 22:38
поделиться

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

1
ответ дан 1 December 2019 в 22:38
поделиться

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

0
ответ дан 1 December 2019 в 22:38
поделиться

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

0
ответ дан 1 December 2019 в 22:38
поделиться

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

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

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

2
ответ дан 1 December 2019 в 22:38
поделиться

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

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

0
ответ дан 1 December 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: