Что такое алгоритм?
Алгоритмы
Прежде чем мы поговорим о большой O, важно сначала понять, что такое "алгоритм".
Алгоритм - это совокупность точно заданных правил решения некоторого класса задач или набор инструкций, описывающих порядок действий исполнителя для решения определённой задачи.
Основные аспекты
- Эффективность: Скорость выполнения алгоритма и его требования к памяти, обычно анализируемые с помощью нотации Big O.
- Корректность: Алгоритм должен правильно выполнять задачу, для которой он предназначен, во всех случаях использования.
- Универсальность: Алгоритм должен быть применим к широкому диапазону входных данных.
- Понятность: Логика алгоритма должна быть ясной и доступной для понимания другими разработчиками.
Алгоритмы принимают входные данные и производят выходные данные. Выходные данные будут ответом на вопрос, касающийся входных данных.
Например, допустим, у вас есть непустой массив положительных целых чисел, называемый nums, и вы хотите ответить на вопрос: "Какое самое большое число в nums?".
Чтобы ответить на этот вопрос, вы напишете алгоритм, который принимает массив, называемый nums, в качестве входных данных и выводит самое большое число в nums. Вот пример такого алгоритма:
- Создайте переменную maxNum и инициализируйте ее значением 0.
- Пройдите по каждому элементу num в nums.
- Если num больше maxNum, обновите maxNum = num.
- Выведите maxNum.
Здесь мы записали набор инструкций, которые при выполнении решат проблему. Теперь мы можем реализовать эти инструкции в коде, чтобы компьютер мог быстро решить проблему. Существуют важные требования к алгоритмам в контексте LeetCode:
Алгоритмы должны быть детерминированными. При одинаковых входных данных алгоритм должен всегда давать одинаковые выходные данные. То есть не должно быть никакой случайности.
Алгоритм должен быть корректным для любых произвольных допустимых входных данных. В нашем примере мы сказали, что nums - это непустой массив положительных целых чисел. Существует бесконечно много таких массивов, и наш алгоритм работает для всех них. Обратите внимание, что если бы nums содержал отрицательные числа, входные данные были бы недопустимыми, поскольку мы указали, что числа положительные. На самом деле, наш алгоритм бы даже сломался, потому что мы инициализировали maxNum значением 0, так что если бы все элементы nums были отрицательными, мы бы неверно вывели 0.