В программировании алгоритм представляет собой множество всесторонне охарактеризованных направлений в организации для решения данной проблемы.
Характеристики достойного алгоритма
Информация и урожайность должны характеризоваться однозначно.
Каждая прогрессия в вычислениях должна быть ясной и однозначной.
Алгоритм должен быть лучшим среди широкого спектра подходов к решению проблемы.
В алгоритме не должно быть кода ПК. Скорее, вычисление должно быть написано так, чтобы оно, как правило, использовалось на сопоставимых диалектах программирования.
Примеры алгоритмов в программировании
Напишите алгоритм добавления двух чисел, введенных пользователем.
Шаг 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 только для простоты.