На этом шаге мы перечислим те области, где используются изученные алгоритмы.
Очень многое в нашем мире можно представить в виде графов. В предыдущих шагах вы увидели, как эффективны графы при работе с транспортными сетями. С подобными важными проблемами оптимизации сталкиваются и многие другие виды сетей: телефонные, компьютерные, инженерные сети (электричество, водопровод и т. п.). Графовые алгоритмы необходимы для эффективного решения задач в области телекоммуникаций, судоходства, транспорта и коммунального хозяйства.
Предприятиям розничной торговли приходится решать сложные задачи дистрибуции. Магазины и склады можно рассматривать как вершины, а расстояния между ними - как ребра графов, к которым применяются все те же алгоритмы. Сам Интернет - это гигантский граф, в котором каждое подключенное устройство представляет собой вершину, а каждое проводное или беспроводное соединение - ребро. Минимальное связующее дерево и поиск кратчайшего пути помогут узнать, экономит ли компания топливо или провода для соединений, - эти алгоритмы полезны не только для игр. Некоторые из наиболее известных мировых брендов стали успешными благодаря оптимизации с использованием графовых задач: например, компания Walmart построила эффективную дистрибьюторскую сеть, Google проиндексировала Интернет (гигантский граф), a FedEx нашла правильный набор концентраторов для подключения к адресам по всему миру.
Одни из самых очевидных приложений графовых алгоритмов - это социальные сети и картографические приложения. В социальной сети люди играют роль вершин, а связи между ними (такие как дружба в Facebook) - ребер. Один из известнейших инструментов разработчика Facebook так и называется - Graph API (https://developers.facebook.com/docs/graph-api). В картографических приложениях, таких как Apple Maps и Google Maps, графовые алгоритмы задействуются для указания направлений и расчета времени в пути.
Несколько популярных видеоигр также явно используют графовые алгоритмы. Mini Metro и Ticket to Ride - лишь два примера игр, моделирующих задачи, которые мы решали в приведенных шагах.
Со следующего шага мы начнем изучать генетические алгоритмы.