Задать вопрос
Ответы пользователя по тегу Алгоритмы
  • Проверка на достижимость в направленном графе?

    Lite_stream
    @Lite_stream Автор вопроса
    Кажется нашёл проблему: алгоритм выше неправильно работает при наличии перекрёстных рёбер :(
    Например, если было бы ребро из 10 в 5

    66a3769a45cd8073448150.png
    Ответ написан
    Комментировать
  • Когда целесообразно использовать именно такую реализацию DSU?

    Lite_stream
    @Lite_stream Автор вопроса
    Оффтоп

    Вот, кстати, нашёл задачу, где dsu не асимптотически, но быстрее. чем dfs, ну и даже сам код лаконичнее и яснее

    Конечно не очень хороший бенчмарк, но leetcode для dsu выдаёт в среднем 150 милисекунд, а для dfs 190 милисекунд, там для dfs, в частности, нужно ещё в список смежности превратить исходный массив, нужна мапа (медленная) для vertex To component, сет для used ну и сам код намного длинее выходит

    В общем, dfs не очень работает с матрицей смежности и тем более списком ребёр (как в задаче выше), а только с списком смежности, поэтому если в задаче изначально граф дан не в нужном виде, то лучше использовать dsu, ну и также, чтобы рукам не поддерживать компоненты связности, так как это заложено в dsu. То есть если в ходе работы алгоритма нет чёткой структуры графа, или рёбра вообще появляются налету (находятся по каким-то признакам, а не даны заранее), то как раз через dsu удобно делать unite(from, to) этих рёбер

    Вот ещё причину нашёл
    Ответ написан
    Комментировать