В программировании алгоритм представляет собой множество всесторонне охарактеризованных направлений в организации для решения данной проблемы.

Характеристики достойного алгоритма

Информация и урожайность должны характеризоваться однозначно.

Каждая прогрессия в вычислениях должна быть ясной и однозначной.

Алгоритм должен быть лучшим среди широкого спектра подходов к решению проблемы.

В алгоритме не должно быть кода ПК. Скорее, вычисление должно быть написано так, чтобы оно, как правило, использовалось на сопоставимых диалектах программирования.

Примеры алгоритмов в программировании

Напишите алгоритм добавления двух чисел, введенных пользователем.

Шаг 1: Начать

Шаг 2: Объявите переменные номер 1, номер 2 и сумму.

Шаг 3: Считайте значения num1 и num2.

Шаг 4: Считайте значения num1 и num2 и присвойте результат сумме.

sum←num1+num2

Шаг 5: Показать сумму

Шаг 6: Стоп

Напишите алгоритм поиска наибольшего из трех различных номеров, введенных пользователем.

Шаг 1: Начать

Шаг 2: Объявите переменные a,b и c.

Шаг 3: Читайте переменные a,b и c.

Шаг 4: Если a>b

Если a>c

Дисплей a – это наибольшее число.

Эльза

Дисплей c – это наибольшее число.

Эльза

Если b>c

Дисплей b – это наибольшее число.

Эльза

Дисплей c – это наибольшее число.

Шаг 5: Стоп

Напишите алгоритм поиска всех корней квадратичного уравнения ax2+bx+c=0.

Шаг 1: Начать

Шаг 2: Объявите переменные a, b, c, D, x1, x2, rp и ip;

Шаг 3: Рассчитать дискриминант

D←b2-4ac

Шаг 4: Если D≥0

r1←(-b+√D)/2a

r2←(-b-√D)/2a

Отображение r1 и r2 в качестве корней.

Else

Рассчитать реальную часть и воображаемую часть

rp←b/2a

ip←√(-D)/2a

Отображение rp+j(ip) и rp-j(ip) в качестве корней

Напишите алгоритм поиска факториала номера, введенного пользователем.

Шаг 1: Начать

Шаг 2: Объявите переменные n, факториал и i.

Шаг 3: Инициализация переменных

factorial←1

i←1

Шаг 4: Прочитайте значение n

Шаг 5: Повторяйте шаги до тех пор, пока i=n

5.1: factorial←factorial*i

5.2: i←i+1

Шаг 6: Показать факториал

Шаг 7: Стоп

Напишите алгоритм проверки, является ли число, введенное пользователем, простым или нет.

Шаг 1: Начать

Шаг 2: Объявите переменные n,i,флаг.

Шаг 3: Инициализация переменных

flag←1

i←2

Шаг 4: Считайте n у пользователя.

Шаг 5: Повторите шаги до i<(n/2)

5.1 Если остаток n÷i равен 0

flag←0

Перейдите к шагу 6

5.2 i←i+1

Шаг 6: Если флаг = 0

Дисплей n не самый лучший

другое

Дисплей n – лучший

Шаг 7: Стоп

Напишите алгоритм поиска серии Фибоначчи до термина≤1000.

Шаг 1: Начать

Шаг 2: Объявим переменные first_term, second_term и temp.

Шаг 3: Инициализация переменных first_term←0 second_term←1

Шаг 4: Отобразить первый_термин и второй_термин.

Шаг 5: Повторяйте шаги до второго_термина≤1000.

5.1: temp←second_term

5.2: второй_term←second_term+first term

5.3: first______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

5.4: Отображать второй_термин

Шаг 6: Стоп

Почему каждый программист должен научиться оптимизировать алгоритмы.

Что такое Алгоритмы?

Как правило, вычисление – это лишь уведомление о шагах, предпринятых для решения проблемы. По сути, это ответ.

Например, вычисления для решения проблемы факториалов могут выглядеть примерно так:

Проблема: найти факториал n

Инициализировать факт = 1

Для каждого значения v в диапазоне от 1 до n:

Умножить факт на v

факт содержит факториал n

Здесь алгоритм написан на английском языке. Если бы он был написан на языке программирования, то мы бы назвали его кодом. Вот код для нахождения факториала числа на Си++.

int factorial(int n) {

int факт = 1;

for (int v = 1; v <= n; v++) {

факт = факт * n;

}

ответный факт;

}

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

Информационные структуры и вычисления (DSA) дают детальные ответы на стандартные вопросы и дают знание о том, как продуктивно использовать каждую из них. Он также показывает вам исследование по оценке производительности вычислений. Это дает вам возможность выбрать лучшее из различных решений.

Использование структур и алгоритмов данных делает Ваш код масштабируемым.

Время ценно.

Предположим, Элис и Боб пытаются решить основную проблему нахождения всего исходного 1011 нормального числа. Пока Боб составлял расчёт, Элис его актуализировала, продемонстрировав, что он настолько же базоват, насколько и осуждение Дональда Трампа.

Алгоритм (по Бобу)

Сумма инициализации = 0

для каждого натурального числа n в диапазоне от 1 до 1011 (включительно):

сложить n к сумме

суммарный ответ

Код (по Элис)

int findSum() {

int sum = 0;

for (int v = 1; <= 100000000000; v++) {

сумма += v;

}

сумма возврата;

}

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

Элис: Давайте запустим этот код и откроем все.

Раскачиваемся: Я запустила этот код несколько мгновений назад, но он все еще не указывает на доходность. Что с ним?

О нет, что-то получилось плохо! Компьютер – самая детерминированная машина. Возвращение и попытка запустить его снова не помогут. Так что мы должны разобрать, что с этим простым кодом.

Двумя самыми значительными достоинствами компьютерной программы являются время и память.

Время, необходимое компьютеру для запуска кода:

Время выполнения кода = количество инструкций * время выполнения каждой инструкции

Количество направлений зависит от используемого кода, а время, затрачиваемое на выполнение каждого кода, зависит от вашей машины и компилятора.

Для этой ситуации полное количество выполняемых директив (допустим, x) будет x = 1 + (1011 + 1) + (1011) + 1, что равно x = 2 * 1011 + 3

Дайте нам шанс принять, что ПК может выполнить директивы y = 108 за одну секунду (он может колебаться в зависимости от расположения машины). Время, необходимое для выполнения вышеприведенного кода, составляет

Время выполнения кода = x/y (более 16 минут).

Можно ли улучшить вычисления с целью, чтобы Элис и Боб не зависали на 16 минут каждый раз, когда они запускают этот код?

Я уверен, что вы ранее предполагали правильную технику. Весь первый N характерных чисел дается по рецепту:

Целый = N * (N + 1)/2

Переключение в код будет выглядеть примерно так:

int sum(int N) {

вернуть N * (N + 1)/2;

}

Этот код выполняет только одно указание и завершает задание независимо от того, что стоит. Дайте ему шанс быть более примечательным, чем все известное человечеству количество частиц. Он обнаружит результат в мгновение ока.

В этом случае общее количество выполненных инструкций (скажем, x) равно x = 1 + (1011 + 1) + (1011) + 1, что равно x = 2 * 1011 + 3

Предположим, что компьютер может выполнить y = 108.

Дайте нам шанс принять, что ПК может выполнить директивы y = 108 за одну секунду (он может колебаться в зависимости от настройки машины). Время, необходимое для выполнения вышеприведенного кода:

Время, необходимое для выполнения кода = x/y (более 16 минут).

Можно ли улучшить расчеты с целью, чтобы Элис и Боб не зависали на 16 минут каждый раз, когда они запускают этот код?

Я уверен, что вы ранее предполагали правильную технику. Все первые N нормальных чисел даются уравнением:

Целая = N * (N + 1)/2

Переключение в код будет выглядеть примерно так:

int sum(int N) {

вернуть N * (N + 1)/2;

}

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

Время, необходимое для решения этой задачи, составляет 1/г (а это 10 наносекунд). Кстати, комбинированная реакция ядерной бомбы занимает 40-50 нс, что подразумевает, что ваша программа завершится эффективно, независимо от того, бросает ли кто-то ядерную бомбу на ваш компьютер одновременно с запуском вашего кода.)

Замечание: Компьютеры берут пару рекомендаций (не 1) для фигурного увеличения и деления. Я сказал 1 только для простоты.