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>