Используются ли структуры данных в языках более высокого уровня? - PullRequest
5 голосов
/ 24 марта 2009

В настоящее время я еще учусь в школе и беру класс по реализации структур данных в c ++. В свободное время я наслаждаюсь программированием на языках «более высокого уровня» (в основном Ruby с некоторым c #).

Итак, поскольку эти языки более высокого уровня управляют памятью, для чего вы будете использовать структуры данных? Я могу понять необходимость очередей и стеков, но нужно ли вам когда-нибудь использовать двоичное дерево в Ruby? или 2-3-4 дерева? Почему?

Спасибо.

Ответы [ 7 ]

8 голосов
/ 24 марта 2009

Так как эти языки более высокого уровня управлять памятью для вас, что бы вы используете структуры данных для?

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

Конечно, язык высокого уровня будет поставляться с несколькими предварительно загруженными структурами данных (и вы должны 100% использовать эти предварительно загруженные структуры данных, когда они предоставляются, вместо того, чтобы создавать свои ), но не все структуры данных предоставляются что вам может понадобиться.

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

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

Я могу понять необходимость очередей и стеки, но вам когда-нибудь нужно использовать двоичное дерево в Ruby?

Существует множество примеров использования бинарного дерева, но они не распространены в повседневных проектах, например, вам может понадобиться реализовать кодирование Хаффмана.

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

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

6 голосов
/ 24 марта 2009

По моему опыту работы с Python (внешне похожим на Ruby) мне никогда не приходилось реализовывать двоичное дерево, хэш-карту или что-то в этом роде. Но причина, почему это очень мало связано с управляемой памятью. В стандартной библиотеке есть реализации наиболее полезных структур, таких как словари (hashmaps) и списки; для скорости и эффективности они (хотя бы частично) реализованы на любом языке более низкого уровня, на котором написан интерпретатор, и они почти наверняка превзойдут любую пользовательскую реализацию, с которой вы можете столкнуться.

2 голосов
/ 24 марта 2009

Большую часть времени

Вы используете их, но вам не нужно реализовывать их; они реализованы для вас.

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

Но иногда

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

2 голосов
/ 24 марта 2009

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

Инфраструктура Java Collections обширна и замечательна, но если вы используете неправильный (неуместный) объект Collections, производительность вашей программы пострадает.

Кроме того, некоторые структуры данных более компактны, чем другие. Да, память дешевая, и современные языки GC будут управлять памятью за вас, но если вы обрабатываете огромные наборы данных, то структуры данных будут иметь значение, если вы сможете сделать что-то более эффективное с точки зрения памяти.

2 голосов
/ 24 марта 2009

Одним словом, да.

Несмотря на то, что GC упростит вашу работу, все еще существует много ситуаций, когда возможность надлежащим образом организовать данные позволит вам написать более эффективную (или эффективную) программу.

1 голос
/ 24 марта 2009

Эти структуры данных используются для тех же задач, что и в других языках. Разница только в том, что современные языки соотв. их стандартные библиотеки часто уже имеют очень эффективные реализации для них. Тем не менее, вы все равно должны знать их, чтобы использовать их. «Более высокий уровень» не означает настоящую магию.

1 голос
/ 24 марта 2009

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

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

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