Страницы

Поиск по вопросам

четверг, 5 декабря 2019 г.

Структуры данных

#структуры


Какие виды структур данных бывают?(можете указать название структуры в определенном
языке программирования) Хочется узнать их предназначение, сильные и слабые стороны.
Так же интересует классификация, верно ли в вики написано? Список структур данных Развернутый
ответ пока каждой структуре не нужен, просто кратко, для примера рассказать в чем преимущество
этой структуры перед остальными(например самое быстрое время доступа к элементу, способность
динамически менять объем памяти и т.д.)
Может на всё сразу не стоит отвечать, вдруг объем ответа будет значительным, хотя
бы по одной из структур которую хорошо знаете можете отписаться, а я буду добавлять
в основной пост информацию. Очень удобно будет иметь перед глазами такой список, сразу
по нему сверился и выбрал нужное.
1. Линейные структуры данных – это структуры данных, в которых переход от одного
элемента данных к другому не зависит от каких-либо логических условий, т.е. в линейных
структурах используются лишь безусловные связи элементов.
1.1 Список Может всё то же самое, что и массив, но позволяет добавлять элементы в
любое место, удалять элементы из любого места и получать текущее количество элементов.
1.2 Ассоциативный массив
1.3 Хеш-таблица - это обычный массив с необычной адресацией, задаваемой хеш-функцией.
Лучший выбор, если не нужна сортировка информации, а только быстрый доступ к ней.
Тратится дополнительная память.
преимущества:

Важное свойство хеш-таблиц состоит в том, что, при некоторых разумных допущениях,
все три операции (поиск, вставка, удаление элементов) в среднем выполняются за время
O(1), время для наихудшего случая - O(n).

недостатки:

Итерация не в порядке возрастания ключей
Необходимость «перехеширования» при увеличении числа хранимых объектов (?) 
нельзя реализовать быстро работающие дополнительные операции MIN, MAX и алгоритм
обхода всех хранимых пар в порядке возрастания или убывания ключей (?) 
не поддерживает упорядоченности, и не сохраняет порядок следования элементов (?)
возможность коллизий

реализация:

C#: Hashtable

1.4 Стек Набор элементов одного типа, упорядоченных таким образом, чтобы добавлять
и доставать элементы можно было только с одного конца. Операции: добавить элемент в
стек, достать из стека последний добавленный элемент, проверить, является ли стек пустым.
1.5 Очередь Набор элементов одного типа, упорядоченных таким образом, чтобы добавлять
их можно было только в один конец, а получать - с другого конца. Операции: добавить
элемент в конец очереди, достать первый элемент из очереди, получение размера очереди.
1.5.1 Очередь с приоритетом
1.6 Дек - особый вид очереди. Дек (от англ. deq - double ended queue,т.е очередь
с двумя концами) - это такой последовательный список, в котором как включение, так
и исключение элементов может осуществляться с любого из двух концов списка. Частный
случай дека - дек с ограниченным входом и дек с ограниченным выходом.
поддерживаемые операции:

включение элемента справа; 
включение элемента слева;
исключение элемента справа;
исключение элемента слева;
определение размера;
очистка.

1.7 Буферное окно
2. Граф
2.1 Список рёбер
2.2 Деревья
2.2.1 2-3-дерево
2.2.2 Дерево отрезков
2.2.3 Красно-чёрное дерево
2.2.4 BSP-дерево
2.2.5 B-дерево 
Основное предназначение: B-дерево предназначено для хранения информации на жёстком
диске. Время произвольного доступа к жёсткому диску очень велико (миллисекунды), поскольку
оно определяется скоростью вращения диска и перемещения головок. Поэтому важно уменьшить
количество узлов, просматриваемых при каждой операции, то есть высоту дерева, что достигается
путём высокой ветвистости.
преимущества:

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

недостатки: 

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

2.2.6 Двоичное дерево поиска
2.2.6.1 Самобалансирующееся дерево поиска
2.2.6.1.1 АВЛ-дерево
2.2.6.1.1.1 Дерево Фибоначчи
2.2.6.1.2 Красно-чёрное дерево
2.2.6.1.3 Расширяющееся дерево
2.2.7 Куча
2.2.7.1 Двоичная куча 
2.2.7.2 Биномиальная куча 
2.2.7.3 Фибоначчиева куча 
2.2.7.4 Сливаемая куча 
2.2.8 Суффиксное дерево
2.2.8 Префиксное дерево 
Существует еще следующее разделение структур:
Статические структуры данных
Полустатические структуры данных
Динамические структуры данных
Нелинейные структуры данных
источник
общий вид описания структур:
-основное предназначение, описание
-поддерживаемые операции
-преимущества
-недостатки
-готовая реализация в языке программирования (название функции или класса)
условные обозначения
(?) - под сомнением, поправьте пожалуйста если вдруг неправильно написано или наоборот
утвердите чтобы исключить неоднозначность.
редактирование продолжается..    


Ответы

Ответ 1



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

Ответ 2



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

Комментариев нет:

Отправить комментарий