предисловие
Эта статья начинается с обзора структур данных и алгоритмов. Хоть и открыто много серий, но все они важные.
Структуры данных и алгоритмы — одна из отличительных черт, отличающих программистов от кодеров.Конечно, я думаю, что инженеры-программисты более продвинуты, чем программисты.
Каждая статья в этой серии сортируется после переваривания и усвоения, чтобы показать, что эта часть меня была понята. Кхм, цель их изучения - просто для применения, как какое-то доказательство обоснования данных, э-э, это хулиган, чтобы уйти со сцены, я не занимаюсь направлением алгоритма и трачу так много опыта на исследование процесса доказательства и так далее. на., мдзз? Поэтому следующие статьи больше ориентированы на приложения.
Рекомендуемый список книг
Я не несу ответственности за рекомендацию волны, конечно, ее широко хвалят. Просто прочитайте Алгоритмы.
Может вместе лучше смотрится
Начало работы: «Структура данных Dahua», «Иллюстрация алгоритма»
Системное обучение: «Описание структур данных и алгоритмов»
Том: «Алгоритмы (4-е издание)»
База
Если структуры данных и алгоритмы являются одной из основ программирования, то следующие понятия являются общими основами структур данных и алгоритмов:
- временная сложность
- космическая сложность
А их теоретическая основа такова:
- Обозначение большого O
- Немного математики
Хорошо, по одному.
базовая основа
Обозначение большого O
Давайте сначала посмотрим на координатные изображения двух функций, они таковы:
Координатная диаграмма:
Видно, что тенденция роста желтой кривой намного больше, чем у синей кривой. В это время n принимает значение только 30, еслиТогда разница между ними будет очень и очень большой.
В области алгоритмов эту растущую тенденцию мы используем大O表示法
Выражать.
так
означает纵坐标y的值
следить横坐标n
тенденция роста, которая
Изображение этой функции.
закончено, оy轴
К чему это относится, будет сказано позже.
несколько математических
В обозначении большого O, упомянутом выше, мы можем
посмотри на ситуацию. Например
, когда в式1
В случае , потому что обозначение Big O выражает тенденцию к увеличению значения оси y. Если n равно 1,100 млн соответственно, то очевидно, что решающим фактором является:
Очевидно, да
. так
. Что вы хотите этим сказать, хотя式2
является полиномом, но в случае анализа Big-O мы рассматриваем только член, который оказывает наибольшее влияние на тенденцию роста.
Доказательство также очень хорошее: тенденция роста, как следует из названия, представляет собой коэффициент роста, который эквивалентенy / x
.
Уравнение 2, разделенное на n, становится:
, который может быть дополнительно упрощен как, Следовательно, первый пункт оказывает наибольшее влияние на тенденцию роста.
.
Общие функциональные изображения
В области алгоритмов есть несколько образов функций, которые необходимо освоить, как показано ниже:
В нотации большого O все они представляют тенденцию роста. Вы можете разделить на n и самостоятельно доказать, какое из них больше. То же самое верно и для рисунка. В заключение:временная и пространственная сложность
Оценка производительности алгоритма заключается в том, чтобы посмотреть на время работы и занимаемый объем памяти. Почему эти два параметра? Я думаю, что это должно быть так: В сочетании с архитектурой фон Неймана компьютер состоит из: памяти, вычислителя, контроллера и устройств ввода и вывода. Устройства ввода-вывода и контроллеры учитывать не нужно, поэтому остается память и калькуляторы. Разве алгоритм не просто сокращает объем вычислений и памяти на одной машине? По моему скромному мнению.
Ну так это приводит к时间复杂度
а также空间复杂度
Концепция чего-либо.
временная сложность
В приведенной выше нотации большого O значение координат оси Y не было специально определено. Мы предполагаем, что время, затрачиваемое машиной на выполнение каждой инструкции, одинаково, например, 1 единица времени, поэтому оно эквивалентно единице времени, необходимой для выполнения c инструкций, равной c. При анализе временной сложности алгоритма мы выражаем ось ординат большой нотации O как время, затрачиваемое на выполнение программы (или количество раз выполнения инструкции), поэтому: Временная сложность O(n) выражается как тенденция к увеличению времени, необходимого для правильного выполнения программы. и конкретные
Глядя на функцию в скобках, то есть на картинку выше, мы видим, что она больше.
космическая сложность
Как и временная сложность, при расчете пространственной сложности O(n) представляет тенденцию к увеличению пространства, затрачиваемого программой на правильное выполнение, что на самом деле проще, чем сценарий временной сложности.
простое упражнение
Сделайте упражнение, чтобы обозначить конец, разделите его на две лекции, и напишите, и вырвете. Например, проанализируйте временную и пространственную сложность следующих программ:
void atom(int n) {
int arr[n];
int i;
for (int i = 0; i < n; i++) {
arr[i] = i;
}
}
Временная сложность такова: независимо от того, насколько велико n, строки 2 и 3 выполняются 1 раз, тело цикла for в строке 5 выполняется n раз, а тело цикла for в строке 6 выполняется n раз, поэтому общее это: n + n + 1 + 1 , мы изучили, только посмотрите на наиболее влиятельные, затем это 2n, который далее упрощается до нескольких основных функций, и, наконец, n. так:
Временная сложность: O(n).
Сложность пространства такова: i занимает 1 единицу, а массив arr занимает n, поэтому в итоге:
Сложность пространства: O (n)