* placeholder * 0413更新 * 0413删除comments * docs(ru): refine wording after sentence-level Chinese comparison --------- Co-authored-by: Veronica <[email protected]> Co-authored-by: krahets <[email protected]>
7.4 KiB
Алгоритмы повсюду
Говоря об алгоритмах, естественно вспомнить о математике. Однако на самом деле многие алгоритмы не связаны со сложной математикой, а больше полагаются на базовую логику, которая повсеместно встречается в нашей повседневной жизни.
Прежде чем углубиться в обсуждение алгоритмов, стоит упомянуть интересный факт: вы уже точно освоили множество алгоритмов и привыкли применять их в повседневной жизни. Далее приведем несколько конкретных примеров, чтобы подтвердить этот факт.
Пример 1: поиск в словаре. В словаре все слова упорядочены по алфавиту. Предположим, нам нужно найти слово, начинающееся на букву r. Обычно это делают так, как показано на рисунке ниже.
- Откройте словарь примерно на половине страниц и посмотрите, какая буква является первой на этой странице. Предположим, это буква
m. - Поскольку в алфавите буква
rидет послеm, исключаем первую половину словаря, и область поиска сужается до второй половины. - Продолжайте повторять шаги
1.и2., пока не найдете страницу, где первой буквой слов будетr.
Навык поиска в словаре, которым владеет каждый школьник, на самом деле является известным алгоритмом двоичного поиска. С точки зрения структуры данных словарь можно рассматривать как отсортированный массив. С точки зрения алгоритма последовательность операций по поиску в словаре можно считать двоичным поиском.
Пример 2: упорядочивание карт. Во время игры в карты необходимо каждый раз упорядочивать карты в руке от меньшего к большему. Обычно это делают так, как показано на рисунке ниже.
- Разделите карты на упорядоченную и неупорядоченную части, предполагая, что изначально самая левая карта уже упорядочена.
- Из неупорядоченной части извлеките одну карту и вставьте ее в правильное место в упорядоченной части. После этого две самые левые карты станут упорядоченными.
- Повторяйте шаг
2., каждый раз перемещая одну карту из неупорядоченной части в упорядоченную, пока все карты не станут упорядоченными.
Метод упорядочивания карт по своей сути является алгоритмом сортировки вставками, который весьма эффективен при обработке небольших наборов данных. Многие функции сортировки в библиотеках программирования используют именно этот алгоритм.
Пример 3: сдача. Предположим, что в супермаркете мы купили товар стоимостью 69 руб. и дали кассиру купюру в 100 руб. Кассир должен вернуть нам 31 руб. Обычно он рассуждает так, как показано на рисунке ниже.
- Варианты выбора – это купюры номиналом меньше
31руб. Пусть у нас имеются номиналы1,5,10и20руб. - Взять самую крупную доступную купюру в
20руб. Остаток сдачи составит31 - 20 = 11руб. - Взять самую крупную из оставшихся купюр в
10руб. Остаток составит11 - 10 = 1руб. - Взять самую крупную из оставшихся купюр в
1руб. Остаток составит1 - 1 = 0руб. - Завершить выдачу сдачи, схема:
20 + 10 + 1 = 31руб.
В этих шагах мы на каждом этапе выбираем наилучший вариант (используя купюры наибольшего номинала), в итоге получая рабочую схему сдачи. С точки зрения структуры данных и алгоритмов этот метод по своей сути является жадным алгоритмом.
От приготовления блюда до межзвездных путешествий решение практически любой задачи неразрывно связано с алгоритмами. Появление компьютеров позволило нам с помощью программирования хранить структуры данных в памяти, а также писать код для вызовов к центральному и графическому процессорам для выполнения алгоритмов. Таким образом, мы можем переносить задачи из реальной жизни в компьютер, решая различные сложные проблемы более эффективно.
!!! tip
Если вы все еще испытываете трудности с пониманием таких понятий, как структуры данных, алгоритмы, массивы и двоичный поиск, продолжайте чтение. Эта книга проведет вас в мир знаний об этих фундаментальных понятиях.






