Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ekzamen_timp.docx
Скачиваний:
21
Добавлен:
19.06.2019
Размер:
1 Мб
Скачать
☆

1. Понятие алгоритмической сложности

Алгоритмическая сложность – функция зависимости объема работы, которая выполняется некоторым алгоритмом, от размера входных данных. При этом точное время мало кого интересует: оно зависит от процессора, типа данных, языка программирования и множества других параметров. Важна лишь асимптотическая сложность, т. е. сложность при стремлении размера входных данных к бесконечности.

Примеры

Сложность

Название

Применение

О (с)

фиксированная

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

О (log n)

логарифмическая

Найти элемент в отсортированном списке (бинарный поиск). Если массив отсортирован, мы можем проверить, есть ли в нём какое-то конкретное значение, методом деления пополам. Проверим средний элемент, если он больше искомого, то отбросим вторую половину массива - там его точно нет. Если же меньше, то наоборот - отбросим начальную половину. И так будем продолжать делить пополам, в итоге проверим log n элементов.

О (n)

линейная

Найти в списке элемент с максимальным значением в не отсортированном массиве. Нам придётся пройтись по всем n элементам массива, чтобы понять, какой из них максимальный.

О (n log n)

линейно-логарифмическая

Сортировка списка

О (n2)

квадратичная

Алгоритм сортировки вставками

О (n3)

кубическая

Перемножение двух матриц n на n

О (2n)

экспоненциальная

Решение задачи коммивояжёра с помощью динамического программирования (разбиение задач на более простые подзадачи)

Решение задачи о порядке перемножения матриц с помощью полного перебора

2. Сравнить структуры данных массив и список

Структура данных - это контейнер, который хранит данные в определенном макете. Этот «макет» позволяет структуре данных быть эффективной в некоторых операциях и неэффективной в других.

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

Динамический массив – массив, размер которого может изменяться во время исполнения программы. Возможность изменения размера отличает динамический массив от статического, размер которого задаётся на момент компиляции программы.

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

Связный список – динамическая структура данных, состоящая из узлов, каждый из которых содержит как собственно данные, так и одну или две ссылки на следующий и/или предыдущий узел списка.

Виды связных списков:

 линейный однонаправленный (односвязный) список, основные операции: инициализация списка, проверка списка на пустоту, добавление узла в список, удаление узла из списка, удаление корня списка, вывод элементов списка, взаимообмен двух узлов списка;

 двунаправленный связный список (те же самые операции);

Структура

Достоинства

Недостатки

Массив

- лёгкость вычисления адреса элемента по его индексу (поскольку элементы массива располагаются один за другим)

- одинаковое время доступа ко всем элементам

- малый размер элементов: они состоят только из информационного поля

- Сложность времени O (1) - фиксированная

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

- для динамического и/или гетерогенного массива - более низкое быстродействие

- при работе с массивом с указателями и при отсутствии дополнительных средств контроля - угроза выхода за границы массива и повреждения данных

- вероятность потери или нехватки памяти

Связный список

- эффективное (за константное время) добавление и удаление элементов

- размер ограничен только объёмом памяти компьютера и разрядностью указателей

- динамическое добавление и удаление элементов

- сложность прямого доступа к элементу, а именно определения физического адреса по его индексу (порядковому номеру) в списке

- на поля-указатели (указатели на следующий и предыдущий элемент) расходуется дополнительная память

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

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

- над связными списками гораздо труднее производить параллельные векторные операции, такие, как вычисление суммы

- Сложность времени O (n) - линейная

Соседние файлы в предмете Технологии и методы программирования