Рубрика «алгоритмы на графах»

Представим типичную ситуацию на первом курсе: вы прочитали про алгоритм Диница, реализовали, а он не заработал, и вы не знаете, почему. Стандартное решение — это начать отлаживать по шагам, каждый раз рисуя текущее состояние графа на листочке, но это жутко неудобно. Я попробовала исправить положение в рамках семестрового проекта по Software Engineering, а в посте расскажу, как у меня в итоге получился плагин для Visual Studio. Скачать можно тут, исходный код и документацию можно посмотреть тут. Вот скриншот графа, который получился для алгоритма Диница.

Отладка алгоритмов на графах — теперь с картинками - 1Читать полностью »

Наверное, сейчас очень мало людей, которым ни разу не приходилось пользоваться услугами такси, тем более, что последнее время популярность этого вида транспорта растет, а цена неуклонно падает. На личном опыте могу сказать, что это удобный способ, например, съездить с маленьким ребенком в поликлинику.

А Вы когда-нибудь задумывались, за что мы в таких случаях платим?

Без сомнения, основную часть составляет плата за время водителя и издержки на автомобиль, однако было бы довольно опрометчиво считать, что эта плата распространяется только на то время, пока Вы в пути. Кода таксисту приходится долго ждать очередного заказа, кто заплатит за его время и простой машины? — в конечном итоге мы с вами. Таксист по праву не согласится на вознаграждение за день ниже его стоимости на трудовом рынке, выполняй он при этом в среднем пять заказов или двадцать пять. Мне стало интересно, каково время не выгодного никому простоя и как его можно уменьшить. Ниже я хотел бы поделиться с вами результатами собственного исследования этого вопроса.Читать полностью »

Однажды на зачете мне попалась следующая задача. Придумайте алгоритм, находящий две вершины дерева с максимальным расстоянием друг от друга, и докажите его корректность. В тот момент я в принципе не знала, что у деревьев есть диаметр, радиус и много прочих вещей. Уже после зачета друг просветил меня, рассказав, что это за алгоритм, но без доказательства. Именно вопросом о доказательстве долгое время была забита моя голова. После прочтения нескольких статей, стало понятно, что материал не уляжется, пока самостоятельно себе не объясню все практически на пальцах (может, и читателю придется по вкусу). Перейдем от демагогии к сути.

Диаметр дерева — это максимальное расстояние между двумя вершинами в дереве. Алгоритм поиска состоит в двух запусках BFS. Первый идет от произвольной вершины дерева, во время обхода насчитываются расстояния от текущей вершины до всех других. Затем из них выбирается самая удаленная. Из нее делается второй запуск BFS. Насчитываются новые расстояния. Максимальное среди них и будет диаметром.

Почему этот простой с виду алгоритм работает корректно?
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js