MakarovSuites
Русский
EnglishDeutschРусскийУкраїнськаFrançaisEspañolItalianoPolski
Связь и лицензии

Math

Самый дешёвый путь

Местность, где шаг стоит цену клетки, в которую входишь, и волна закрытых вершин расходится по ЦЕНЕ, а не по расстоянию. Ползунок кладёт на карту отрицательное ребро, и у него три измеренных участка: права, ошибается, пути нет вовсе.

Самый дешёвый путь — Изображение из программы
Изображение из программы

Что происходит

Шаг здесь стоит цену клетки, в которую входишь, поэтому волна закрытых вершин расходится не кругами: через дешёвую низину она уходит далеко, в дорогую гряду упирается. Эта картинка и есть вся разница между обходом в ширину и Дейкстрой. Пока веса неотрицательны, ответ доказуемо кратчайший, и проверяется он здесь Беллманом — Фордом до неподвижной точки — никогда вторым запуском того же алгоритма — да ещё полным перебором простых путей на маленьких сетках. На ровной местности цена имеет точный вид w(i + j): любой монотонный путь стоит одинаково. Счётчики тоже тождества: каждая вершина закрывается ровно один раз, каждое ребро релаксируется ровно один раз, и рёбер 4m(m−1). Дальше ползунок кладёт на карту одно направленное отрицательное ребро, и у него три участка, каждый измерен, а не описан. До −15 не ломается ничего: отрицательное ребро само по себе не беда. От −16 до −50 Дейкстра отвечает 93 там, где правда 92, потом 78, потом 58 — всегда БОЛЬШЕ, потому что закрытую вершину она не переоткрывает, — и рядом с жёлтым маршрутом появляется настоящий, чтобы ошибку было видно, а не объявлено. На −51 возникает отрицательный цикл: кратчайшего пути нет вовсе, Беллман — Форд это говорит, а Дейкстра печатает те же 93 с невозмутимым видом.

Уравнения модуля
Уравнения
местность на сетке m x m, у каждой клетки цена 1..9, шаг стоит столько, сколько стоит клетка, в которую вы входите; старт вверху слева, цель внизу справа
при неотрицательных весах алгоритм Дейкстры верен - проверено по алгоритму Беллмана-Форда, доведённому до неподвижной точки, а на 3x3 и 4x4 - по ПОЛНОМУ перебору простых путей
у ровной местности есть замкнутая формула: стоимость до (i, j) = w(i + j), поэтому цель стоит w·2(m−1) - 120 при w = 5, m = 13
закрытых вершин = m² (каждая закрывается ровно один раз);  релаксаций = рёбер = 4m(m−1) = 624 при m = 13;  вставок в кучу 169 на местности по умолчанию
по умолчанию 13x13, скидка выключена:  самый дешёвый путь до цели 93, те же 93 по Беллману-Форду, 25 клеток в маршруте, 0 клеток, где они расходятся
одно направленное ребро-скидка из (0,7) в (5,0), и у ползунка ТРИ режима, все измерены:
вплоть до −15:  ошибки нет совсем - отрицательное ребро само по себе не проблема
от −16 до −50:   Дейкстра выдаёт 93, тогда как на самом деле 92, 78, 58 - всегда СЛИШКОМ БОЛЬШОЕ значение, а ответы расходятся на 65, 122, 159 из 169 клеток
−51 и ниже: отрицательный цикл - кратчайшего пути нет, Беллман-Форд это показывает, а Дейкстра всё равно печатает 93
концы ребра-скидки выбраны перебором всех пар: окну нужно d(дальней) − d(ближней) < k < cost(от ближней к дальней), и оно пусто, когда дешёвый путь к дальней клетке идёт через ближнюю

Другие эксперименты

К каталогу
Ним и двоичная сумма — Изображение из программы

Math

Ним и двоичная сумма

Кучи камней, а под ними их двоичная запись. Разряд, в котором единиц нечётное число, горит красным; когда красных нет, ходящий уже проиграл. Правило проверено разбором всей игры, а не пересказано.

Дерево игры и альфа-бета — Изображение из программы

Math

Дерево игры и альфа-бета

Дерево игры, в котором каждый блок высотой со своё значение: MAX-вершина ровно с самый высокий из детей, MIN-вершина — с самый низкий. Минимакс смотрит каждый лист; альфа-бета пропускает то, что не может изменить ответ, и сколько пропустит — зависит от порядка ходов.

Код Хаффмана — Изображение из программы

Math

Код Хаффмана

Очередь частот превращается в дерево префиксного кода. Выберите букву, чтобы увидеть её биты; проходите слияния по шагам.