HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Сначала графы использовались только в математике - с их помощью решались задачи, связанные с картами. Со временем графы пришли и в программирование, потому что они подходят для решения широкого круга задач:</p>
1 <p>Сначала графы использовались только в математике - с их помощью решались задачи, связанные с картами. Со временем графы пришли и в программирование, потому что они подходят для решения широкого круга задач:</p>
2 <ul><li>Составление расписаний</li>
2 <ul><li>Составление расписаний</li>
3 <li>Заполнение грузовых контейнеров</li>
3 <li>Заполнение грузовых контейнеров</li>
4 <li>Работа с компьютерной графикой</li>
4 <li>Работа с компьютерной графикой</li>
5 <li>Поиск дешевых авиабилетов</li>
5 <li>Поиск дешевых авиабилетов</li>
6 <li>Построение маршрутов на реальных картах и в компьютерных играх</li>
6 <li>Построение маршрутов на реальных картах и в компьютерных играх</li>
7 </ul><p>Все эти непохожие задачи решаются одним и тем же способом - с помощью алгоритмов на графах.</p>
7 </ul><p>Все эти непохожие задачи решаются одним и тем же способом - с помощью алгоритмов на графах.</p>
8 <p>В этом курсе мы изучим с самыми важными алгоритмами на графах, а пока познакомимся с самым главным термином этого курса.</p>
8 <p>В этом курсе мы изучим с самыми важными алгоритмами на графах, а пока познакомимся с самым главным термином этого курса.</p>
9 <h2>Что такое графы</h2>
9 <h2>Что такое графы</h2>
10 <p>Графы - это важное, но случайное изобретение. Математик Леонард Эйлер придумал их, когда решал задачу о кенигсбергских мостах.</p>
10 <p>Графы - это важное, но случайное изобретение. Математик Леонард Эйлер придумал их, когда решал задачу о кенигсбергских мостах.</p>
11 <p>По условию этой задачи в городе Кенигсберге было семь мостов. Его жители пытались составить маршрут, который позволил бы обойти все мосты, не проходя ни по одному мосту дважды. Схематически карта города выглядит так:</p>
11 <p>По условию этой задачи в городе Кенигсберге было семь мостов. Его жители пытались составить маршрут, который позволил бы обойти все мосты, не проходя ни по одному мосту дважды. Схематически карта города выглядит так:</p>
12 <p>Эйлер поставил на карте четыре точки и соединил их дугами:</p>
12 <p>Эйлер поставил на карте четыре точки и соединил их дугами:</p>
13 <p>Карту города можно убрать совсем и увидеть рисунок, с которым работал Эйлер:</p>
13 <p>Карту города можно убрать совсем и увидеть рисунок, с которым работал Эйлер:</p>
14 <p>Значительно упростив представление задачи, Эйлер доказал, что нужного маршрута не существует. Более того, он вывел общее правило, которое помогает определить, можно ли построить подобный маршрут на произвольной карте.</p>
14 <p>Значительно упростив представление задачи, Эйлер доказал, что нужного маршрута не существует. Более того, он вывел общее правило, которое помогает определить, можно ли построить подобный маршрут на произвольной карте.</p>
15 <p>Так Эйлер изобрел метод, который позволяет сводить сложные задачи к наглядным рисункам. Фигуры, подобные рисунку Эйлера, стали называть<strong>графами</strong>*. Точки называются<strong>вершинами графа</strong>*, а соединяющие их дуги -<strong>ребрами</strong>.</p>
15 <p>Так Эйлер изобрел метод, который позволяет сводить сложные задачи к наглядным рисункам. Фигуры, подобные рисунку Эйлера, стали называть<strong>графами</strong>*. Точки называются<strong>вершинами графа</strong>*, а соединяющие их дуги -<strong>ребрами</strong>.</p>
16 <p>Название "граф" происходит от греческого слова<em>графо</em>- "писать" или "рисовать". Слова "картография" и "фотография" произошли из этого же корня.</p>
16 <p>Название "граф" происходит от греческого слова<em>графо</em>- "писать" или "рисовать". Слова "картография" и "фотография" произошли из этого же корня.</p>
17 <p>Разглядывая рисунок, Эйлер понял такую закономерность:</p>
17 <p>Разглядывая рисунок, Эйлер понял такую закономерность:</p>
18 <ul><li>Если из вершины выходит четное количество ребер, то ее можно "пройти", побывав на каждом ребре ровно один раз</li>
18 <ul><li>Если из вершины выходит четное количество ребер, то ее можно "пройти", побывав на каждом ребре ровно один раз</li>
19 <li>Если же ребер нечетное число, то между собой можно связать только две нечетных вершины</li>
19 <li>Если же ребер нечетное число, то между собой можно связать только две нечетных вершины</li>
20 </ul><p>На графе эта закономерность выглядит так:</p>
20 </ul><p>На графе эта закономерность выглядит так:</p>
21 <p>Так Эйлер сформулировал правило:</p>
21 <p>Так Эйлер сформулировал правило:</p>
22 <blockquote><p>Можно посетить все вершины графа, пройдя по каждому ребру ровно один раз, но только в том случае, если у графа только две нечетные вершины или вообще нет нечетных вершин</p>
22 <blockquote><p>Можно посетить все вершины графа, пройдя по каждому ребру ровно один раз, но только в том случае, если у графа только две нечетные вершины или вообще нет нечетных вершин</p>
23 </blockquote><p>По этому правилу получается, что кенигсбергские мосты обойти нельзя, потому что они образуют граф с четырьмя нечетными вершинами. Эйлер не просто решил конкретную головоломку, но и сформулировал общую теорему, которую можно приложить к самым разным задачам.</p>
23 </blockquote><p>По этому правилу получается, что кенигсбергские мосты обойти нельзя, потому что они образуют граф с четырьмя нечетными вершинами. Эйлер не просто решил конкретную головоломку, но и сформулировал общую теорему, которую можно приложить к самым разным задачам.</p>
24 <h2>Другие задачи на графах</h2>
24 <h2>Другие задачи на графах</h2>
25 <p>Одна из распространенных задач с графами - это выдача купюр.</p>
25 <p>Одна из распространенных задач с графами - это выдача купюр.</p>
26 <p>Обычно банкоматы стараются выдать сумму наименьшим числом банкнот. Если вы попросили 5000 рублей, банкомат выдаст 5000 рублей одной купюрой. Если такой купюры нет, то банкомат выдаст 2000, 2000 и 1000 рублей. Существует быстрый алгоритм, который всегда оптимально решает эту задачу.</p>
26 <p>Обычно банкоматы стараются выдать сумму наименьшим числом банкнот. Если вы попросили 5000 рублей, банкомат выдаст 5000 рублей одной купюрой. Если такой купюры нет, то банкомат выдаст 2000, 2000 и 1000 рублей. Существует быстрый алгоритм, который всегда оптимально решает эту задачу.</p>
27 <p>То же самое работает и в логистике. Например, при перевозке контейнеров их заполняют ящиками стандартных размеров. Ящики нужно разместить как можно плотнее, чтобы обойтись минимальным числом контейнеров. Графы позволяют решить и эту задачу.</p>
27 <p>То же самое работает и в логистике. Например, при перевозке контейнеров их заполняют ящиками стандартных размеров. Ящики нужно разместить как можно плотнее, чтобы обойтись минимальным числом контейнеров. Графы позволяют решить и эту задачу.</p>
28 <p>Еще один пример - текстовые редакторы. Они не только опознают слова с ошибками, но и предлагают варианты замены. Очень непросто найти в словаре несколько слов, похожих на ошибочное, но графы могут разобраться и с этим.</p>
28 <p>Еще один пример - текстовые редакторы. Они не только опознают слова с ошибками, но и предлагают варианты замены. Очень непросто найти в словаре несколько слов, похожих на ошибочное, но графы могут разобраться и с этим.</p>
29 <p>В целом, задачи на графах встречаются в самых разных областях. Но есть одна проблема - их не всегда легко опознать.</p>
29 <p>В целом, задачи на графах встречаются в самых разных областях. Но есть одна проблема - их не всегда легко опознать.</p>
30 <p>Поэтому в этом курсе мы затронем задачи, которые на первый взгляд вообще не имеют отношения к графам.</p>
30 <p>Поэтому в этом курсе мы затронем задачи, которые на первый взгляд вообще не имеют отношения к графам.</p>
31 <p>Например, к таким задачам относятся:</p>
31 <p>Например, к таким задачам относятся:</p>
32 <ul><li>Задача коммивояжера</li>
32 <ul><li>Задача коммивояжера</li>
33 <li>Задача о рюкзаке</li>
33 <li>Задача о рюкзаке</li>
34 </ul><p>Они заметно отличаются по формулировке, но при этом решаются с помощью одних и тех же алгоритмов.</p>
34 </ul><p>Они заметно отличаются по формулировке, но при этом решаются с помощью одних и тех же алгоритмов.</p>
35 <h2>Точность и производительность</h2>
35 <h2>Точность и производительность</h2>
36 <p>Кстати, графы - та область программирования, где часто применяются приближенные решения вместо точных. Иногда эти алгоритмы с приближенными решениями называются<strong>эвристическими</strong>.</p>
36 <p>Кстати, графы - та область программирования, где часто применяются приближенные решения вместо точных. Иногда эти алгоритмы с приближенными решениями называются<strong>эвристическими</strong>.</p>
37 <p>Дело в том, что точные алгоритмы на графах работают настолько медленно, что их нельзя применять на практике даже для очень небольших наборов данных.</p>
37 <p>Дело в том, что точные алгоритмы на графах работают настолько медленно, что их нельзя применять на практике даже для очень небольших наборов данных.</p>
38 <p>В теории алгоритмов есть<strong>классы сложности</strong>, с которым мы познакомимся в конце курса.</p>
38 <p>В теории алгоритмов есть<strong>классы сложности</strong>, с которым мы познакомимся в конце курса.</p>
39 <p>Мы узнаем, что такое<strong>задачи класса NP</strong>и почему они считаются сложным. Также мы познакомимся с несколькими приближенными алгоритмами и решим с их помощью несколько разных задач.</p>
39 <p>Мы узнаем, что такое<strong>задачи класса NP</strong>и почему они считаются сложным. Также мы познакомимся с несколькими приближенными алгоритмами и решим с их помощью несколько разных задач.</p>
40 <h2>Выводы</h2>
40 <h2>Выводы</h2>
41 <p>Повторим ключевые выводы курса:</p>
41 <p>Повторим ключевые выводы курса:</p>
42 <ul><li>Задачи на графах часто решаются графически - в таких случаях очевидно, что задачу надо решать через графы</li>
42 <ul><li>Задачи на графах часто решаются графически - в таких случаях очевидно, что задачу надо решать через графы</li>
43 <li>Иногда с первого взгляда не понятно, что задача решается с помощью графов. В этом курсе мы научимся распознавать такие задачи</li>
43 <li>Иногда с первого взгляда не понятно, что задача решается с помощью графов. В этом курсе мы научимся распознавать такие задачи</li>
44 <li>Точные алгоритмы на графах работают очень медленно</li>
44 <li>Точные алгоритмы на графах работают очень медленно</li>
45 <li>Чтобы быстро решать задачи на графах, программисты прибегают к эвристическим алгоритмам</li>
45 <li>Чтобы быстро решать задачи на графах, программисты прибегают к эвристическим алгоритмам</li>
46 <li>В курсе мы разберем несколько эвристических алгоритмов</li>
46 <li>В курсе мы разберем несколько эвристических алгоритмов</li>
47 </ul>
47 </ul>