Download Article
Download Article
An algorithm is a set of steps designed to solve a problem or accomplish a task. Algorithms are usually written in pseudocode, or a combination of your speaking language and one or more programming languages, in advance of writing a program. This wikiHow teaches you how to piece together an algorithm that gets you started on your application.
Steps
-
1
Determine the outcome of your code. What is the specific problem you want to solve or the task you want it to accomplish? Once you have a solid idea of what you’re aiming to accomplish, you can determine the steps it will take to get there.
-
2
Decide on a starting point. Finding your starting and ending point are crucial to listing the steps of the process. To determine a starting point, determine the answers to these questions:[1]
- What data/inputs are available?
- Where is that data located?
- What formulas are applicable to the issue at hand?
- What are the rules to working with the available data?
- How do the data values relate to each other?
Advertisement
-
3
Find the ending point of the algorithm. As with the starting point, you can find the end point of your algorithm by focusing on these questions:
- What facts will we learn from the process?
- What changes from the start to the end?
- What will be added or no longer exist?
-
4
List the steps from start to finish. Start with broad steps. To use a real-world example, let’s say your goal is to have lasagna for dinner. You’ve determined that the starting point is to find a recipe, and that the end result is that you’ll have a lasagna fully cooked and ready to eat by 7 PM. Your steps may look something like this:
- Search for a recipe online.
- Look for the ingredients you already have in the kitchen.
- Make a list of ingredients you’ll need from the store.
- Buy the missing ingredients.
- Return home.
- Prepare the lasagna.
- Remove the lasagna from the oven.
-
5
Determine how you will accomplish each step. Now that you have a step-by-step outline, it’s time to think about how you might code each step. Which language will you use? What resources are available? What’s the most efficient way to accomplish each step in that language? Incorporate some of that code into your algorithm. Expand each step until you’ve detailed the entire process.
- For example, the first step in our lasagna algorithm is Search for a recipe online. But what is involved in this search? Be specific. For example:
- Turn on your computer.
- Check to make sure you’re connected to the internet. Connect to the internet if you aren’t already.
- Open a web browser.
- Enter your search terms.
- Click a recipe link.
- Determine whether the recipe meets your needs.
- Filter out recipes that aren’t vegetarian.
- Make sure the recipe makes at least 5 servings.
- Repeat some of these steps until you find the right recipe.
- Turn on your computer.
- Consider the resources at your disposal, such as the capabilities of the system you’re developing a program for. In the case of lasagna, we assume the person making the lasagna knows how to search the internet, operate an oven, etc.
- For example, the first step in our lasagna algorithm is Search for a recipe online. But what is involved in this search? Be specific. For example:
-
6
Review the algorithm. Now that you’ve written your algorithm, it’s time to evaluate the process. Your algorithm is designed to accomplish something specific, and you’ll need it to start writing your program. Ask yourself the following questions, and address each as necessary:[2]
- Does the algorithm solve the problem/accomplish the task?
- Does it have clearly defined inputs and outputs?
- Should the end goal be redefined to be more general? More specific?
- Can any of the steps be simplified?
- Is the algorithm guaranteed to end with the correct result?
Advertisement
Add New Question
-
Question
How do I write an algorithm that 7 is greater than 5?
nicholasz2510 Gaming, Travel, and Music
Community Answer
The syntax can vary over different languages, but to write the conditional 7 is greater than 5 would most likely by simply be this: 7 > 5.
-
Question
How do I make an algorithm of the sum of two numbers?
Adam Blalock
Community Answer
To add two numbers in a programming language, you just use a «+» between them. In Python (a programming language), it would look like: x = 10, y = 13; print x + y.
-
Question
Is there any way to understand this easier? I’m 15 and still trying to understand the concepts.
I just started programming and my college professors are very vague and make understanding the concepts pretty hard. Your best bet is to keep looking up the terms on Google, that’s what I’ve been doing, and it works to a degree.
See more answers
Ask a Question
200 characters left
Include your email address to get a message when this question is answered.
Submit
Advertisement
-
Check out existing algorithms for ideas on writing your own.
-
Use fast calculating iterations.
-
Focus on efficiency when coding.
Show More Tips
Thanks for submitting a tip for review!
Advertisement
About This Article
Article SummaryX
1. Determine the problem or task to accomplish.
2. Decide the starting point.
3. Figure out the endpoint.
4. List the steps that occur between the start and finish.
5. Break down the steps as necessary.
6. Review the algorithm and change where necessary.
Did this summary help you?
Thanks to all authors for creating a page that has been read 439,219 times.
Is this article up to date?
Загрузить PDF
Загрузить PDF
Эта статья поможет вам написать алгоритм на любом языке программирования. В современном мире языки программирования являются важнейшей составляющей нашей жизни и используются для того, чтобы разрабатывать различные компьютерные программы и приложения. Если вы хотите написать код, сначала вам нужно разработать алгоритм.
Шаги
-
1
Помните, что создание алгоритма — это поэтапный процесс.
-
2
В зависимости от того, с каким языком программирования вы работаете, используйте соответствующий синтаксис.
-
3
Приступите к процессу.
-
4
Вводите в алгоритм переменные и операции с ними.
-
5
Если в алгоритме есть какие-то циклы, постарайтесь составлять списки подчисел.
-
6
Если цикл или условие не могут быть выполнены, постарайтесь сделать так, чтобы программа переходила к предыдущему шагу.
-
7
Используйте операторы перехода, чтобы переходить от одного оператора к другому.
-
8
Постарайтесь не включать излишние первоначальные данные в алгоритм.
-
9
Опишите выражения.
-
10
Используйте выражения, прерывающие и завершающие процесс.
Реклама
-
1
Получите входные данные пользователя.
-
2
Проверьте, соответствуют ли логин и пароль пользователя сохраненным в базе учетным данным.
-
3
Если соответствуют, запустите сессию и перенаправьте пользователя в личный кабинет.
-
4
Если не соответствуют, выведите на экран сообщение об ошибке, перенаправьте его на ту же страницу с формой логин-пароль и попросите ввести данные снова.
-
5
Завершение алгоритма.
Реклама
Советы
- Удалите избыточные комментарии.
- Используйте соответствующую логику.
- Используйте быстрые и эффективные вычислительные циклы.
- Делайте алгоритм как можно более лаконичным.
- Делайте алгоритм как можно более эффективным.
- Придумайте четкий план действий, прежде чем приступать к написанию алгоритма.
Реклама
Предупреждения
- Всегда проверяйте пространственную и временную сложность алгоритма.
- Не забывайте прерывать процесс, иначе произойдет сбой.
Реклама
Об этой статье
Эту страницу просматривали 8460 раз.
Была ли эта статья полезной?
Итак, опустив долгие и нудные восхваления Паскаля, которые так любят публиковать в своих статьях редакторы многих сайтов, приступим непосредственно к самому основному – к программированию.
В школах, как правило, изучение Паскаля начинают с решения простейших задач путем составления различных алгоритмов или блок-схем, которое многие так часто игнорируют, считая никому не нужной ерундой. А зря. Я, как и любой другой человек, хоть немного соображающий в программировании (не важно где – в Паскале, Си, Дельфи), могу уверить Вас – умение правильно и быстро составлять схемы является фундаментом, основой программирования.
Блок-схема — графическое представление алгоритма. Она состоит из функциональных блоков, которые выполняют различные назначения (ввод/вывод, начало/конец, вызов функции и т.д.).
Существует несколько основных видов блоков, которые нетрудно запомнить:
Сегодняшний урок я решила посвятить не только изучению блок-схем, но также и изучению линейных алгоритмов. Как Вы помните, линейный алгоритм — наипростейший вид алгоритма. Его главная особенность в том, что он не содержит никаких особенностей. Как раз это и делает работу с ним простой и приятной.
Задача №1: «Рассчитать площадь и периметр прямоугольника по двум известным сторонам».
Данная задача не должна представлять особой трудности, так как построена она на хорошо известных всем нам формулах расчета площади и периметра прямоугольника, поэтому зацикливаться на выведении этих формул мы не будем.
Составим алгоритм решения подобных задач:
1) Прочитать задачу.
2) Выписать известные и неизвестные нам переменные в «дано». (В задаче №1 к известным переменным относятся стороны: a, b ;к неизвестным — площадь S и периметр P)
3) Вспомнить либо составить необходимые формулы. (У нас: S=a*b; P=2*(a+b))
4) Составить блок-схему.
5) Записать решение на языке программирования Pascal.
Запишем условие в более кратком виде.
Дано: a, b
Найти: S, P
Блок-схема:
Структура программы, решающей данную задачу, тоже проста:
- 1) Описание переменных;
- 2) Ввод значений сторон прямоугольника;
- 3) Расчет площади прямоугольника;
- 4) Расчет периметра прямоугольника;
- 5) Вывод значений площади и периметра;
- 6) Конец.
А вот и решение:
Program Rectangle; Var a, b, S, P: integer; Begin write('Введите стороны прямоугольника!'); readln(a, b); S:=a*b; P:=2*(a+b); writeln('Площадь прямоугольника: ', S); write('Периметр прямоугольника: ', P); End.
Задача №2: Скорость первого автомобиля — V1 км/ч, второго – V2 км/ч, расстояние между ними S км. Какое расстояние будет между ними через T часов, если автомобили движутся в разные стороны? Значения V1, V2, T и S задаются с клавиатуры.
Решение осуществляем, опять же, следуя алгоритму. Прочитав текст, мы переходим к следующему пункту. Как и во всех физических или математических задачах, это запись условий задачи:
Дано: V1, V2, S, Т
Найти: S1
Далее идет самая главная и в то же время самая интересная часть нашего решения – составление нужных нам формул. Как правило, на начальных стадиях обучения все необходимые формулы хорошо нам известны и взяты из других технических дисциплин (например, на нахождение площади различных фигур, на нахождение скорости, расстояния и т.п.).
Формула, используемая для решения нашей задачи, выглядит следующим образом:
S1=(V1+V2)*T+S
Следующий пункт алгоритма – блок-схема:
А также решение, записанное в Pascal :
Program Rasstoyanie; Var V1, V2, S, T, S1: integer; {Ввод } begin write('Введите скорость первого автомобиля: '); readln(V1); write('Введите скорость второго автомобиля: '); readln(V2); write('Введите время: '); readln(T); write('Введите расстояние между автомобилями: '); readln(S); S1:=(V1+V2)*T+S; writeln('Через ', t,'ч. расстояние ', S1,' км.'); End.
Вам может показаться, что две эти программы правильны, но это не так. Ведь сторона треугольника может быть 4.5, а не 4, а скорость машины не обязательно круглое число! А Integer — это только целые числа. Поэтому при попытке написать во второй программе другие числа выскакивает ошибка:
Чтобы решить эту проблему вам надо вспомнить какой тип в Pascal отвечает за нецелые числа. В этом уроке мы рассматривали основные типы. Итак, это вещественный тип — Real. Вот, как выглядит исправленная программа:
Как видите, эта статья полезна для прочтения как новичкам, так и уже более опытными пользователям Pascal, так как составление блок-схем не только очень простое и быстрое, но и весьма увлекательное занятие.
Алгоритмизация и программирование являются
одной из трудных для понимания учащимися тем в
предмете информатика, а при наличии дефицита
часов, выделяемых на изучение предмета, перед
учителем встает довольно сложная задача «Как
познакомить хотя бы с основами программирования
всех учащихся, в том числе и непрофильных
классов?». Между тем, как мы видим и в новых
стандартах и в демо-версии ЕГЭ по информатике эта
тема занимает существенное место. Предлагаемые
ниже материалы помогают познакомить ребят с
основными алгоритмическими конструкциями и
реализацией их на языке программирования
Паскаль и дать начальное представление о языке.
Заинтересовавшиеся учащиеся могут в дальнейшем
продолжить изучение языка программирования на
спецкурсе.
Предлагаю задания к трем урокам: по линейному
алгоритму, ветвлению и циклам. Типы переменных и
структура программы на Паскале рассматриваются
на предыдущих уроках.
Начальная подготовка учащихся.
- Знание основных алгоритмических конструкций:
линейный алгоритм, ветвление, цикл. - Знание основных типов переменных.
- Знание структуры программы на Паскале.
Ход урока.
Перед каждым уроком учитель раскладывает на
столах «Папки ученика», в которых находятся
листы с заданиями, таблица «Реализация элементов
блок – схемы алгоритма на языке Паскаль»,
«Алгоритм создания программы по шаблону» и
другой справочный материал. Если
предполагается создание программы по шаблону,
т.е. ученики редактируют уже имеющуюся программу,
то соответствующий файл *.pas с текстом программы
должен находится на жестком диске в
соответствующем каталоге.
Для знакомства с реализацией алгоритмической
конструкции средствами языка используется сайт http://schools.keldysh.ru/gym1522/inform/pascal/ (см. Приложение1)
Обсуждается задание, проговаривается сценарий,
составляется блок-схема алгоритма.
Далее ученики работают самостоятельно по
предложенному заданию. На каждый тип алгоритма
дано несколько заданий, одно выполняется в
классе, остальные могут быть домашним или
дополнительным заданием.
В качестве заданий на ветвление и циклы взяты
задачи по физике, так как программирование
изучается на уроках интегрированного с физикой
курса «Компьютерное моделирование физических
процессов и явлений» в 9 классе.
Описание приложений.
- Адрес сайта «Паскаль для начинающих» — http://schools.keldysh.ru/gym1522/inform/pascal/ Немного
сокращенный вариант находится в архиве (Приложение1.zip). Сайт выполнен
с использованием флэш-технологии, позволяет в
анимационной форме дать начальное представление
о языке Паскаль 7.0 Для демонстрации надо
разархивировать в каталог на жестком диске.
Главная страница сайта – index.html - Тексты программ для создания программ по
шаблону – файлы Приложение2.pas и Приложение3.pas. Их
надо переименовать в Shablon1.pas и Shablon2.pas и поместить
в соответствующий каталог на диске.
Использованная литература дана в Приложении 1
на сайте в разделе «ссылки».
Реализация элементов блок – схемы
алгоритма на языке Паскаль.
Элемент блок |
В программе |
Действия |
BEGIN |
Начало работы |
|
END. |
Конец работы |
|
WRITE (‘A,B) |
На экране появляется надпись: введите A, B (оператор вывода данных) |
|
WRITE (C) |
На экране появляется значение переменной C. (оператор вывода данных) |
|
WRITE (‘результат=’,S) |
На экране появляется текст результат= и значение переменной S. (оператор вывода данных) |
|
READ (X,Y) |
Надо вводить два числа с клавиатуры (оператор ввода данных) |
|
C:=4*T ; D:=A+B; I:=I+1; |
После выполнения операторов, переменным присваиваются следующие значения: C=4T, D=A+B, I=I+1 (операторы присваивания) |
|
IF A>B THEN
ELSE
|
Если условие A>B верно, то выполняется группа операторов ОП.1, в противном случае – группа операторов ОП.2 (условный оператор) |
|
WHILE I<=N DO
|
Пока будет выполнено I? N, выполняется группа операторов ОП.1 (оператор цикла с предусловием, ОП.1 – тело цикла) |
|
REPEAT ОП.1 UNTIL I>N |
Выполняется группа опера-торов ОП.1 до тех пор, пока не будет выполнено условие I>N. (оператор цикла с постусловием, ОП.1 – тело цикла) |
|
FOR I:=1 TO N DO
|
Для каждого I от 1 до N выполняется группа операторов ОП.1 (оператор цикла с параметром, I – параметр цикла) |
Линейный алгоритм. Простейшая
программа (ввод/вывод данных, вычисление суммы,
разности, произведения и частного двух чисел).
Задание
Написать программу, которая
Примерный вид экрана при работе |
||
Введите свое имя Вася Привет, Вася Введите 2 числа 2 6 Сумма чисел равна 8 |
Для выполнения задания можно использовать
приведенный ниже текст программы или заранее
подготовленный учителем файл Shablon1.pas (файл Приложение2.pas) с текстом
программы, который находится в каталоге CLASS (там
же находятся личные папки учащихся). Ученик
проставляет вместо вопросительных знаков
необходимые операторы и служебные слова.
Комментарии в фигурных скобках поясняют, что
необходимо сделать. Программа состоит из двух
частей. В первой части программы демонстрируется
использование операторов ввода и вывода, во
второй, после комментария {ЗАДАНИЯ}, ученику надо
самому записать необходимые операторы,
используя приведенную выше блок-схему и
комментарии в программе. Алгоритм создания
программы по шаблону дан ниже.
Текст программы по линейному
алгоритму
PROGRAM P1;
{Объявление переменной S для ввода имени, надо
указать тип переменной — строковый}
VAR S: ???? ;
{Объявление переменных A и B для ввода чисел,
надо указать тип переменных — целые числа со
знаком}
VAR A,B: ???? ;
{Объявление переменной C для вывода результата,
надо указать тип переменной — все действительные
числа}
VAR C: ???? ;
{Начало раздела инструкций}
BEGIN
{Оператор вывода на экран сообщения (просьба
ввести имя)}
WRITE (‘Введите свое имя’);
{Оператор ввода данных (значение переменной S =
имя пользователя)}
READLN (S);
{Вывод на экран сообщения (приглашения к работе)
– слово «Привет» и значение переменной S
(введенное пользователем имя)}
WRITELN (‘Привет, ‘, S);
{ЗАДАНИЯ:}
{1)Запишите оператор вывода на экран
приглашения к вводу 2 чисел (переменные A и В)}
???????
{2) Запишите оператор ввода для переменных A и В}
???????
{3) Запишите оператор присваивания для
вычисления значения переменной С (сумма,
разность, произведение, частное двух чисел)}
C:=?????;
{4) Запишите оператор вывода на экран результата
вычислений (сумма (разность, произведение,
частное) = <значение переменной>}
????????
{Конец программы, конец раздела инструкций}
END.
Ветвление. Моделирование
равномерного прямолинейного движения двух тел.
Задания
Построить компьютерную модель движения двух
I. Найти скорость сближения (удаления) 2-х Рассмотреть случаи: 1. Тела двигаются в одном направлении. 2. Тела двигаются в противоположных
Примерный вид экрана при работе |
||
Введите скорость 1 тела 10 Введите скорость 2 тела 5 Введите направление 1 тела L Введите направление 2 тела R
Скорость равна 15 |
||
II. Добавить ввод начальных координат тел и определить сближаются или отдаляются тела. III. Определить расстояние
IV. Выводить на экран текущие координаты тел.
V. Выводить на экран картину движения тел. |
||
Примечания:
|
Текст программы на ветвление
PROGRAM P2;
{Объявление переменных V1, V2 и V для значений
скоростей, тип переменных — целые числа со знаком
}
VAR V1, V2, V: ??? ;
{Объявление переменных A1 и A2 для значений
направлений, значения переменных — символы}
VAR A1, A2: ??? ;
{Начало раздела инструкций}
BEGIN
{Оператор вывода на экран сообщения (просьба
ввести скорость первого тела)}
WRITE (‘Введите скорость 1 тела’);
{Оператор ввода данных (значение переменной V1)}
READLN (V1);
{Тоже для второго тела}
?????????????
?????????????
{Аналогично осуществить ввод направлений
движения}
WRITE (‘Введите направление 1 тела’ );
READLN (A1);
?????????????
?????????????
{Условный оператор: проверка условия
равенства значений переменных A1 и A2}
IF A1 = A2 THEN V := V1 — V2 ELSE V := V1 + V2;
{Определение модуля вектора ABS – функция
вычисление абсолютной величины}
V:=ABS(V);
{Оператор вывода на экран результата
вычислений }
????????
{Конец программы, конец раздела инструкций}
END.
Текст программы находится в файле Приложение3.pas (в кодировке MS
DOS). Его надо переименовать в Shablon2.pas и можно
использовать при создании программы по шаблону
(см. алгоритм ниже).
Алгоритм создания программы по
шаблону.
1. Войти в систему программирования Turbo Pascal 7.0.
2. Открыть файл ShablonK.pas (K — номер шаблона):
2.1. File -> Open
2.2. Перейти в каталог CLASS (в списке Files
выбрать ..)
2.3. Выбрать файл ShablonK.pas (K — номер шаблона)
2.4. Подтвердить выбор (Open)
3. Выполнить задание, заменяя ????.
4. Сохранить файл в своем каталоге:
4.1. (File -> Save as)
4.2. Убедится, что находитесь в своем каталоге
(нижняя строчка)
4.3. Ввести имя файла
4.4. Подтвердить сохранение (Ok)
5. Запустить программу (Run -> Run или Ctrl+F9)
6. При наличии ошибок, внести изменения в
программу и повторить пункт 5.
7. Просмотреть результат выполнения программы (Debug
User Screen или Alt+F5)
8. Сохранить файл (File -> Save или F2)
9. Выйти из системы программирования (File ->
Exit или Alt+X)
Для циклического алгоритма уже текст программы
не дается. Учащиеся должны сами составить
программу по блок – схеме.
Циклы. Моделирование
равноускоренного движения.
Задания
Построить модель равноускоренного движения
I.. Тело двигается по прямой. Выводить на Исходные данные (задаются с клавиатуры): 1. Начальная скорость тела (V0, м/с). 2. Ускорение тела со знаком (A, м/с2). 3. Начальное положение тела (X0, м). 4. Время движения (TK, с). Расчетные данные (выводятся на экран):
Примерный вид экрана при работе |
||
Введите скорость тела 10 Введите ускорение тела 2 Введите нач. положение тела 0 Введите время движения тела 200 T = 0 X = 0 T = 10 X = 200 T = 20 X = 600 ………..
T = 200 X = 42000 |
||
II. Рассмотреть случай, когда известно конечное положение тела, но неизвестно время движения. III. Организовать ввод/вывод
Примечание: блок-схема и фрагменты программы |
||
Реализация блока |
||
Цикл с предусловием |
Цикл с постусловием | Цикл с параметром |
x:=x0;
t:=0;
While T <= TK do
begin
X:=X0+V0*T+A*T*T/2;
Writeln (‘T = ‘,T,’ X = ‘,X);
T:=T+10; end; |
X:=X0;
T:=0;
Repeat
X:=X0+V0*T+A*T*T/2;
Writeln (‘T = ‘,T,’ X = ‘,X); T:=T+10;
Until T>=TK; |
X:=X0; T:=0; N:=Trunc(TK/10);
For i:=0 to N do
begin
T:=i*10; X:=X0+V0*T+A*T*T/2;
Writeln (‘T = ‘,T,’ X = ‘,X);
end; |
Чтобы что-то было сделано компьютером, нужно указать ему, как это сделать. Нужно написать программу с пошаговым объяснением: какие задачи компьютер должен выполнить и каким образом. В этом нам помогают алгоритмы.
Алгоритмы — это набор инструкций, используемых компьютерами для решения тех или иных задач, ведущих к достижению конечной цели.
Знание алгоритмов имеет важнейшее значение для создания и разработки эффективных компьютерных программ. В этой статье я хотел бы поделиться своим опытом изучения алгоритмов в университете и рассказать о том, как он помог мне в учебе и карьере.
Первое знакомство
Я начал программировать, когда ещё учился в средней школе. А первые шаги делал, создавая калькуляторы и светофоры на Visual Basic. Позже освоил HTML и Java. В то время я разрабатывал настольные и веб-приложения. Я просто писал хоть какой код, о внутренней логике и не задумывался.
Поступив в университет на специальность компьютерных наук, на втором курсе я начал изучать структуры данных и алгоритмы. Это был обязательный курс, поэтому его должен был пройти каждый.
Из программиста в разработчики
Изучение структур данных и алгоритмов стало поворотным пунктом в моём понимании компьютерного программирования: теперь я думал больше как инженер-разработчик, а не как программист. Почему я так говорю? Приведу несколько примеров.
Пример 1: алгоритмы сортировки
Представьте, что мы делаем приложение для интернет-магазина. Нам надо, чтобы пользователи могли просматривать товары в порядке возрастания цены. Для этого товары нужно отсортировать по цене. Будь я начинающим программистом, добавил бы цены в массив (или список) с записью их индексов и просто вызвал бы встроенный в массив метод sort()
. Что на самом деле происходит внутри метода sort()
? Когда я раньше делал приложения, я об этом и понятия не имел.
Алгоритмы сортировки — это одна из базовых тем, которую в первую очередь проходят на курсе по изучению структур данных и алгоритмов в университете.
Различают следующие алгоритмы сортировки:
- сортировка вставками;
- сортировка выбором;
- быстрая сортировка;
- сортировка пузырьком;
- сортировка слиянием.
Изучив различные алгоритмы сортировки, я понял, что для каждой задачи нужен свой алгоритм сортировки. Все алгоритмы сортировки различаются по временной сложности, которая зависит от размера данных. Наибольшее значение имеет их время выполнения при разработке приложений, даже если это всего лишь несколько секунд. Кроме того, я узнал о внутренних алгоритмах сортировки (сортировка элементов на месте) и внешних алгоритмах сортировки (требуют дополнительного пространства для хранения элементов во время сортировки). Всё это заставило меня тщательно обдумывать выбор алгоритмов сортировки для каждого конкретного приложения, принимая во внимание ограничения по времени и памяти.
Пример 2: синтаксический анализ математических выражений
При вводе какого-нибудь математического выражения в калькулятор или в ячейку электронной таблицы, например MS Excel, оно автоматически вычисляется, и мы получаем ответ. Вы когда-нибудь задумывались о том, как это выражение высчитывается? А вот нам пришлось разработать программное обеспечение для работы с электронными таблицами и реализовать парсер выражений. Именно тогда я узнал о популярном алгоритме сортировочной станции. В нём используется очередь для хранения значений и стек для хранения операторов. Я узнал о реальных приложениях, в которых применяются такие структуры данных, как очереди и стеки (изучал их на курсе по структурам данных и алгоритмам), и понял лежащую в их основе логику. Меня так и распирала гордость оттого, что удалось самостоятельно реализовать алгоритм сортировочной станции, хотя таких реализаций тогда было уже полным-полно. 😃
Пример 3: списки, множества и словари
Когда нужно сохранить кучу значений, я применяю списки. Раньше я не задумывался, нужно ли соблюдать очерёдность или нужно ли допускать дубли: просто использовал список для всего подряд. Узнав о том, что, помимо списков, существуют ещё словари и множества, я понял, что всё это можно применять в различных сценариях. Так, сделав правильный выбор в той или иной ситуации и отдав предпочтение, скажем словарю, можно фактически ускорить выполнение кода. Например, если надо проверить принадлежность элемента, гораздо быстрее это будет сделать во множестве или словаре (на это требуется константное время), чем при использовании списка (требуется время, пропорциональное длине списка). Кроме того, список допускает наличие дублей, в то время как множество — нет.
Всё это примеры из моего опыта, иллюстрирующие переход от мышления программиста к мышлению инженера-разработчика. Когда я делал выбор в пользу более подходящей структуры данных или более быстрого алгоритма, происходило значительное улучшение производительности моего кода.
С чего начать?
Изучаем концепции программирования
Прежде чем приступать к изучению алгоритмов, я бы порекомендовал освоить такие понятия программирования, как переменные, функции, классы и особенно понятия объектно-ориентированного программирования (ООП). Это будет вашим фундаментом для понимания более продвинутых концепций из области компьютерных наук.
Осваиваем алгоритмы и их принципы работы
Помимо материалов моего курса, я занимался также по учебнику «Алгоритмы: построение и анализ» Томаса Х. Кормена, Чарльза Э. Лейзерсона, Рональда Ривеста и Клиффорда Штайна. Можно начать с самых азов:
- анализа временной и пространственной сложности;
- терминов “O” большое и “o” малое;
- рекурсии;
- базовых структур данных, таких как массивы, матрицы, связные списки, стеки, очереди, деревья и т. д.;
- основных алгоритмов, таких как алгоритмы поиска и сортировки.
Анализ временной и пространственной сложности — это очень важная тема, которую необходимо освоить, чтобы анализировать алгоритмы. Затем можно перейти к более продвинутым алгоритмам, таким как алгоритмы на графах.
Самое важное — чётко понимать, что происходит внутри алгоритма. Раньше я брал простые примеры и применял алгоритм, чтобы посмотреть, что происходит на каждом его шаге. Проработка примеров помогала мне лучше понять, что происходит в алгоритме, причём мне никогда не приходилось эти алгоритмы запоминать. Если меня попросят написать псевдокод для алгоритма, я смогу легко связать его с примером и проработать его, вместо того чтобы запоминать каждый шаг.
Погружаемся в код с головой
На курсе нам предлагалось реализовать различные структуры данных с нуля, используя основные их операции. Например, двоичные деревья поиска (BST) в C++ с операциями вставки, удаления, поиска, обхода с предварительной выборкой, обхода с отложенной выборкой и обхода с порядковой выборкой. Приходилось создавать класс BST и реализовывать все эти операции в виде функций. Предлагалось даже сравнивать время выполнения определённых операций с различными размерами наборов данных. Это был отличный опыт. Я многому научился благодаря этим занятиям и стал лучше разбираться в операциях. Такой учебный процесс с практическими заданиями помог мне лучше понять концепцию алгоритмов.
Можно начать программировать с языков, поддерживающих ООП. Это легко с очень простыми в освоении языками:
- C++
- Java
- Python
Для новичков один из этих языков будет в самый раз.
Ресурсы для обучения
Онлайн-курсы
Можно заниматься дистанционно на:
- Coursera: специализация «Алгоритмы», специализация «Структуры данных и алгоритмы», «Алгоритмы, часть I», «Алгоритмы, часть II».
- MIT Open Courseware: «Введение в алгоритмы».
- Академия Хана: «Алгоритмы».
- Udacity: «Введение в алгоритмы», «Введение в структуры данных и алгоритмы», «Структуры данных и алгоритмы», «Введение в алгоритмы для студентов», «Вычислимость, сложность и алгоритмы».
- edX: «Алгоритмы: дизайн и анализ, часть 1», «Алгоритмы: дизайн и анализ, часть 2», «Алгоритмы и структуры данных», «Алгоритмы: дизайн и техники», «Алгоритмы: дизайн и анализ», «Графовые алгоритмы».
и многие другие платформы. Для лучшего понимания можно попробовать приведённые там упражнения.
Средства интерактивной визуализации алгоритмов
Кроме того, можно попробовать платформы визуализации алгоритмов:
- Визуализация структуры данных.
- Визуализатор алгоритмов.
- VisuAlgo.
- Визуальное отображение алгоритмов сортировки| Toptal.
- Анимированные алгоритмы.
- Визуализации и визуальное отображение алгоритма.
Они доступны в Интернете и понимают пошаговый механизм работы алгоритмов.
Упражнения на закрепление
Освоив азы, можно переходить к практическим занятиям, закрепляя пройденный материал в упражнениях. Вот платформы, на которых собраны очень хорошие задачи самых разных уровней сложности:
- «Проект Эйлер».
- HackerRank.
- CodeChef.
- Coderbyte.
- Exercism.
- Codewars.
- LeetCode.
Чем больше практики, тем лучше понимание. Закрепление учебного материала в упражнениях — это хороший способ узнать, как изученные теории можно применить в решении задач.
Подводя итоги
Резюмируем статью списком из десяти рекомендаций для тех, кто приступает к изучению алгоритмов:
- Начинайте с изучения основ.
- Сформируйте чёткое понимание того, что происходит в алгоритме.
- Прорабатывайте шаги алгоритма с примерами.
- Обстоятельно разберитесь в анализе сложности.
- Попробуйте самостоятельно реализовывать алгоритмы.
- Записывайте всё важное, чтобы вернуться к этому в будущем.
- Занимайтесь дистанционно на онлайн-курсах платформ для обучения.
- Следите за онлайн-лекциями, опубликованными известными университетами.
- Закрепляйте пройденный материал в упражнениях.
- Если среди упражнений вам попались трудные задачи, не расстраивайтесь. После завершения упражнения можно будет почитать специальную инструкцию и понять, где вы застряли.
Дополнительные материалы для чтения
Если хотите узнать больше о структурах данных и алгоритмах, то можете ознакомиться со следующими статьями:
Заключение
Не забывайте о том, что путь к совершенству — практика!
Надеюсь, для вас эта статья была полезной и познавательной.
Спасибо за внимание.
Читайте также:
- Алгоритмы поиска, которые должен знать каждый специалист по обработке и анализу данных
- Алгоритмы машинного обучения простым языком. Часть 1
- 10 Графовых алгоритмов
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Vijini Mallawaarachchi: How to be Good at Algorithms?