1_Обзор алгоритма
Введение
Чтобы начать говорить об алгоритмах, необходимо начать с определения: «Алгоритмы — это конечный набор упорядоченных инструкций, целью которых является решение задачи». Существуют различные определения, но смысл всегда один и тот же.
Давайте сравним работу алгоритма с рецептом пирога, где реализация пирога — это проблема, которую мы хотим решить. Для начала должно быть ясно, в чем проблема, какой пирог мы хотели бы сделать? Какие ингредиенты нам понадобятся? На сколько человек торт? После того, как мы все это проанализировали, мы можем начать с подготовки.
Следуя рецепту, элементы соединяют в указанном порядке, например, сначала молоко с мукой и сахаром, затем дрожжи и, наконец, щепотку соли.
Это точно конечный набор шагов, целью которых является решение задачи по приготовлению торта.
Если следовать всем шагам без каких-либо изменений, по идее торт всегда должен быть одинаковым. В информатике работа алгоритма аналогична, есть много маленьких шагов, обычно строго математического характера, которые, если следовать таким же образом, позволяют нам прийти к тому же результату. Если, с другой стороны, мы изменим один из ингредиентов, результат будет другим в рецепте и в компьютерных науках.
Этапы реализации алгоритма включают две фазы:
● Фаза планирования , на которой изучаются различные шаги и набрасывается первая структура алгоритма, например, когда все ингредиенты выкладываются на стол, поэтому мы еще не готовим, а планируем, что использовать и что делать.
В информатике выделяют следующие этапы:
- Псевдокод , где алгоритмы на естественном языке. Это может понять каждый, не будучи экспертом.
- Фрагмент , это как псевдокод, но больше похоже на язык программирования. Если сниппет создан, то псевдокод — нет, и создать его может только эксперт.
- План выполнения , какой процесс будет выполняться первым? Какие следующие? Можно ли некоторые из них исполнять вместе? Думая о рецепте пирога, вам может понадобиться время, чтобы разогреть духовку или дать тесту отдохнуть, так что я могу сделать что-то еще в это время?
Требования
Алгоритмы производят вычисления и нуждаются в данных на входе для работы. Эти две переменные могут привести нас к:
- Алгоритмы высокой интенсивности данных , которые требуют большого количества входных данных, но не требуют большого количества вычислений;
- Алгоритмы с высокой интенсивностью вычислений требуют больших ресурсов, но не больших данных;
- Алгоритмы, интенсивно использующие данные и вычисления , нуждаются как в данных, так и в вычислениях.
Когда алгоритм считается работоспособным? Алгоритм всегда должен иметь три характеристики, чтобы быть функциональным. Должно быть:
- Правильно , он должен вернуть правильные ответы.
- Понятно , максимально просто.
- Эффективный , он не должен занимать слишком много времени, даже если он правильный, ждать ответа тысячи лет невозможно, но даже один день неприемлем для большинства алгоритмов.
Время, необходимое для запуска алгоритма, является предметом обсуждения в компьютерном сообществе, поэтому нет недостатка в способах оценить его скорость:
● Оценка производительности , вычисляется среднее между самым быстрым и самым медленным выполнением. Если оценки верны, выполнение никогда не должно проходить наихудшую оценку.
● Big O , этот индикатор оценивает время, необходимое для каждой операции, и может принимать следующие значения:
- 1 = сложность постоянна , время не меняется в зависимости от данных. Так что, если я добавлю 10 или 20 граммов дрожжей в пирог, выпечка всегда будет 10 минут.
- N = время изменяется в зависимости от данных , поэтому допустим, что если я добавлю 10 граммов дрожжей в кекс, его приготовление займет 10 минут, а если я добавлю 20 граммов, то приготовление займет 20 минут.
- N 2 = время пропорционально квадрату входа . Итак, если на этот раз с 10 граммами потребуется 10 минут, если я положу 20 граммов, пирог будет готовиться 40 минут.
- Logn = пропорционален логарифму входного размера . Вы поймали меня на том, что у меня нет кулинарного примера, чтобы предложить в этом случае. Просто знайте, что в этом случае каждый раз, когда я ввожу заданное, время выполнения алгоритма уменьшается.
Объяснимость
В заключение, алгоритм должен иметь последнюю характеристику: он должен быть объяснимым. Тот, кто обращается к коду алгоритма, должен понимать, как каждая его часть влияет на конечный результат. В настоящее время банки, государства, учебные заведения и компании используют алгоритмы для задач, влияющих на жизнь людей, таких как отклонение резюме или отправка его на следующий этап отбора, предоставление ипотечного кредита или забота о слежке. И это лишь некоторые из задач, которые выполняет алгоритм.
Поэтому понятность необходима для предотвращения добровольной или невольной дискриминации некоторых групп людей. Облегчить некоторым людям доступ к ипотечному кредиту, изменив алгоритм, чрезвычайно просто для эксперта, поэтому алгоритмы должны быть понятными.
Одним из методов оценки является работа с используемыми переменными. Если вы меняете переменную, можно понять, как эта переменная влияет на алгоритм, поэтому отображается область влияния переменной.

![В любом случае, что такое связанный список? [Часть 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































