Упростите свой рабочий процесс: найдите miniwebtool.
Добавить
Сопутствующие инструменты
Калькулятор матрицы смежностиКалькулятор кратчайшего пути ДейкстрыКалькулятор раскраски графовВалидатор последовательности степеней графаРешатель задачи о стабильных браках
Домашняя страница > Математика > Продвинутые математические операции > Калькулятор топологической сортировки

Калькулятор топологической сортировки

Вычислите топологический порядок ориентированного ациклического графа (DAG), используя алгоритм Кана или поиск в глубину (DFS). Инструмент обнаруживает циклы, сообщает путь цикла, строит послойное представление для параллельного выполнения, поддерживает лексикографически минимальный порядок и анимирует каждый шаг на интерактивном графе.

Калькулятор топологической сортировки
Формат ребра: A -> B (также принимаются , =>, :). Макс. 80 вершин / 800 ребер.
Алгоритм Кана (лексикографический) дает уникальный, воспроизводимый порядок. Пост-порядок DFS — это классический метод поиска в глубину.

Embed Калькулятор топологической сортировки Widget

О Калькулятор топологической сортировки

Калькулятор топологической сортировки вычисляет линейный порядок вершин ориентированного ациклического графа (DAG), при котором каждое направленное ребро от u к v ставит u перед v. Введите свой граф в виде списка ребер или списка смежности, и инструмент вернет топологический порядок, используя алгоритм Кана или пост-порядок DFS, обнаружит циклы (с точным путем цикла), сгруппирует задачи в слои параллельного выполнения, подсчитает количество допустимых порядков и анимирует каждый шаг на интерактивном графе.

Что такое топологическая сортировка?

Для данного ориентированного графа G = (V, E) топологическая сортировка (или топологический порядок) — это линейное расположение v₁, v₂, …, vₙ его вершин, такое, что для каждого ориентированного ребра (u → v) u появляется перед v в этом расположении. Топологический порядок существует тогда и только тогда, когда в графе нет направленных циклов, то есть граф является DAG. Порядок редко бывает уникальным: граф может иметь много допустимых топологических сортировок, когда сразу несколько вершин имеют нулевую степень захода.

Определение топологического порядка
Перестановка (v₁, v₂, …, vn) множества V является топологической тогда и только тогда,
когда для каждого ребра (u → v) в E: позиция(u) < позиция(v)

Алгоритмы, используемые в этом калькуляторе

Алгоритм Кана (на основе BFS, 1962)

Алгоритм Кана — самая интуитивно понятная топологическая сортировка. На каждом шаге он выбирает вершину с нулевой степенью захода (без входящих ребер), добавляет ее в выходные данные и «удаляет» ее из графа, уменьшая степень захода каждого из ее последователей. Когда несколько вершин имеют нулевую степень захода, для разрешения неоднозначности может использоваться min-heap (дающая лексикографически наименьший порядок) или очередь FIFO (дающая порядок вставки). Алгоритм Кана работает за время O(|V| + |E|) и служит детектором циклов: если после опустошения очереди какая-либо вершина все еще имеет степень захода > 0, значит, в графе есть цикл.

Алгоритм Кана (псевдокод)
Kahn(G):
  Q ← { v ∈ V : indeg(v) = 0 }
  L ← [ ]
  while Q не пуста:
    u ← Q.pop()
    L.append(u)
    for каждое ребро u → v:
      indeg(v) -= 1
      if indeg(v) = 0: Q.push(v)
  if |L| < |V|: сообщить о цикле
  else: вернуть L

Пост-порядок DFS (Тарьян, 1976)

Алгоритм DFS выполняет поиск в глубину, и когда вершина завершается (то есть все ее последователи были полностью исследованы), она помещается в стек. Реверсирование стека в конце дает допустимый топологический порядок. Обнаружение циклов происходит естественно: встреча с вершиной, которая все еще находится в процессе исследования (помечена СЕРЫМ), означает, что найдено обратное ребро, следовательно, граф не является DAG. Пост-порядок DFS также работает за время O(|V| + |E|).

Пост-порядок DFS (псевдокод)
DFS-Topo(G):
  for каждую вершину u в V: color[u] ← WHITE
  L ← пустой стек
  for каждую вершину u в V:
    if color[u] = WHITE: visit(u)
  return reverse(L)

visit(u):
  color[u] ← GRAY
  for каждое ребро u → v:
    if color[v] = GRAY: сообщить о цикле
    if color[v] = WHITE: visit(v)
  color[u] ← BLACK; L.push(u)

Слои параллельного выполнения

Послойное представление DAG разделяет его вершины на уровни так, что каждое ребро идет с уровня с меньшим номером на уровень с большим. Вершины в одном слое независимы друг от друга, поэтому они могут выполняться параллельно. Количество слоев равно длине самого длинного пути плюс один — это критический путь DAG, минимальное количество последовательных раундов, необходимых для завершения всех задач даже при неограниченном параллелизме. Этот калькулятор автоматически создает послойный вид, если входные данные являются DAG.

Обнаружение циклов

Если граф содержит ориентированный цикл, топологическая сортировка невозможна. Наш калькулятор сообщает точный путь цикла (например, A → B → C → A) и выделяет ребра цикла красным цветом на визуализации. Удаления любого одного ребра в цикле достаточно для восстановления ацикличности.

Форматы ввода

Список ребер

Записывайте каждое направленное ребро как источник -> цель, разделяя их запятыми или новыми строками. Допустимые варианты стрелок: ->, , =>, -->, :. Вы также можете объединять ребра в цепочки: A -> B -> C — это сокращение для A->B и B->C. Метки вершин могут состоять из букв, цифр, подчеркиваний, тире и точек.

A -> B, B -> C, A -> C
C -> D
Рубашка -> Галстук -> Пиджак

Список смежности

Запишите вершину, двоеточие и ее прямых последователей (вершины, на которые она указывает). Вершине без последователей все равно нужна своя строка, например D:.

A: B, C
B: D
C: D
D:

Как пользоваться этим калькулятором

  1. Выберите формат: Переключайтесь между списком ребер и списком смежности с помощью переключателей.
  2. Введите граф: Вставьте свои данные или нажмите на один из быстрых примеров (порядок одевания, учебные курсы, цели сборки, граф с циклом и другие).
  3. Выберите алгоритм: Лексикографический Кана для уникального, воспроизводимого порядка; порядок вставки для сохранения очередности ввода; пост-порядок DFS для классического метода поиска в глубину; или «Показать все», чтобы увидеть все варианты рядом.
  4. Нажмите «Сортировать топологически»: Ниже появятся порядок, данные об обнаружении цикла, послойный вид, длина критического пути, общее количество допустимых порядков и интерактивный граф.
  5. Исследуйте: Нажмите «Играть», чтобы увидеть выдачу каждой вершины шаг за шагом. Значки входящих степеней обновляются в реальном времени. Перетаскивайте любой узел для изменения компоновки.

Реальное применение

Системы сборки и компиляторы

Такие инструменты, как make, Bazel, Gradle и npm, выполняют топологическую сортировку целей сборки, чтобы каждая цель компилировалась только после всех своих зависимостей. Цикл в графе зависимостей обычно выдается как фатальная ошибка — система сборки не может решить, с чего начать.

Планирование задач

Менеджеры проектов используют DAG для фиксации зависимостей задач. Топологическая сортировка дает допустимый порядок выполнения, а послойный вид — минимальное количество раундов при неограниченном параллелизме. Самая длинная цепь — это критический путь, определяющий общую продолжительность проекта.

Планирование учебных курсов

Каталог университетских курсов — это DAG: ребра являются отношениями предварительных условий. Топологический порядок — это допустимый план обучения, а слои подсказывают студентам, какие наборы курсов они могут изучать параллельно в каждом семестре.

Пересчет электронных таблиц

При изменении ячейки электронная таблица должна пересчитать каждую зависимую ячейку в порядке зависимости — это топологическая сортировка DAG зависимостей ячеек. Циклические ссылки отвергаются приложением.

Менеджеры пакетов и загрузчики плагинов

Apt, pip, Homebrew, Maven и бесчисленные фреймворки плагинов определяют порядок установки или загрузки путем топологической сортировки своих DAG зависимостей.

Разрешение символов и планирование инструкций

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

Подсчет топологических порядков

Для DAG с n вершинами количество различных допустимых топологических порядков может варьироваться от 1 (для полностью упорядоченной цепи) до n! (для графа без ребер). Вычисление точного количества в общем случае является #P-полной задачей, но для графов до 16 вершин этот калькулятор перечисляет их, используя формулу динамического программирования по маскам: f(S) = Σ f(S ∪ {v}) по всем v ∉ S, чьи предшественники уже находятся в S.

Сложность и производительность

Часто задаваемые вопросы

Что такое топологическая сортировка?

Топологическая сортировка ориентированного ациклического графа — это линейное упорядочение его вершин, при котором каждое направленное ребро от u к v ставит u перед v. Она представляет собой допустимый порядок обработки задач с соблюдением их зависимостей.

Какой алгоритм использует этот калькулятор?

Калькулятор запускает как алгоритм Кана, так и пост-порядок DFS. Алгоритм Кана многократно удаляет вершину с нулевой степенью захода и уменьшает степени захода ее последователей. Пост-порядок DFS выполняет поиск в глубину и инвертирует порядок завершения. Оба работают за время O(|V| + |E|).

Что если в моем графе есть цикл?

Граф с ориентированным циклом не имеет топологической сортировки. Калькулятор обнаруживает цикл, выделяет его красным цветом на визуализации и сообщает точный путь цикла, чтобы вы могли видеть, какие ребра нужно удалить, чтобы сделать граф DAG.

Что такое лексикографически наименьший топологический порядок?

Когда допустимо множество топологических порядков, лексикографически наименьший получается путем постоянного выбора алфавитно наименьшей вершины с нулевой степенью захода на каждом шаге. Стандартный режим Кана в этом калькуляторе возвращает этот уникальный порядок, который стабилен и легко воспроизводим.

Что такое послойный вид или вид по уровням?

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

Может ли граф иметь несколько допустимых топологических порядков?

Да. Если на любом шаге алгоритма Кана имеется несколько вершин с нулевой степенью захода, любая из них может быть выбрана следующей. Этот калькулятор подсчитывает точное количество различных топологических порядков для графов до 16 вершин.

В чем разница между алгоритмом Кана и пост-порядком DFS?

Алгоритм Кана работает сверху вниз: он многократно выбирает источники (степень захода 0) и выдает их первыми. Пост-порядок DFS работает снизу вверх: он сначала завершает стоки и добавляет их в начало порядка. Оба имеют сложность O(|V| + |E|) и создают допустимые топологические порядки, но обычно разные. Алгоритм Кана легче параллелизуется и адаптируется для лексикографического упорядочивания; DFS легче комбинировать с другими видами анализа на основе DFS, такими как поиск сильно связных компонентов.

Каков максимальный размер графа, поддерживаемый этим инструментом?

Калькулятор поддерживает до 80 вершин и 800 ребер. Подсчет общего количества допустимых топологических порядков ограничен 16 вершинами, так как задача является #P-полной и пространство состояний растет как 2ⁿ. Интерактивная визуализация и анимация алгоритмов плавно масштабируются до полного размера.

Дополнительная литература

Ссылайтесь на этот контент, страницу или инструмент так:

"Калькулятор топологической сортировки" на сайте https://ru.miniWebtool.com/калькулятор-топологической-сортировки/ от MiniWebtool, https://MiniWebtool.com/

командой miniwebtool. Обновлено: 20 апреля 2026 г.

Вы также можете попробовать наш AI Решатель Математических Задач GPT, чтобы решить ваши математические проблемы с помощью вопросов и ответов на естественном языке.

Продвинутые математические операции:

Избранные инструменты:

Калькулятор ангельских чиселКалькулятор знака ВенерыКалькулятор совместимости в любвиКалькулятор Солнечного, Лунного и Асцендентного Знаков 🌞🌙✨Конвертер см в футы и дюймыИзвлечение Изображений из ВидеоКонвертер футов и дюймов в сантиметрыОбъединить видеоКонвертер FPSИзменить скорость видеоАудио РазделительКалькулятор числа жизненного путиКалькулятор числа судьбыСоздатель GIFВидео КомпрессорУдалить аудио из видеоДобавить или заменить аудио в видеоДобавить текст к изображениюРазделитель изображенийКалькулятор лунного знакаКалькулятор Фаренгейта в ЦельсияРазделитель видеоКонвертер фунтов в килограммыУдалить строки, содержащие строкуАудио ЭкстракторГенератор штрих-кодовКалькулятор знака МарсаКонвертер дюймов в сантиметрыПоиск идентификатора пользователя InstagramПоиск работыГенератор случайных цветовГенератор филвордовКалькулятор совместимости лунных знаковПовернуть видеоMP3-луперКонвертер MP4 в GIFКалькулятор Рекомпозиции ТелаКалькулятор баланса астрологических стихийКалькулятор области определения и значенийКонвертер кг в фунтыКалькулятор Площади Неправильного МногоугольникаГенератор маленького текста ⁽ᶜᵒᵖʸ ⁿ ᵖᵃˢᵗᵉ⁾Калькулятор числа имениВерификатор гипотезы Гольдбаха⏱️ Калькулятор часовКонвертер сантиметров в дюймыКалькулятор дня года - какой сегодня день года?Календарь ретроградного МеркурияКалькулятор угла срезаДобавить водяной знак на видеоКалькулятор знака МеркурияКалькулятор калорий при беременностиГенератор случайных суперспособностейКакое у меня счастливое число?Калькулятор арксинусаКалькулятор гипотенузыКалькулятор теоремы ПифагораКалькулятор калорий при грудном вскармливанииЗациклить видеоКонвертер PSI в Бар🖱️ Счётчик кликовКалькулятор жима лежаГенератор случайных предметовОбрезка ВидеоСписок високосных летГенератор случайных английских словпоиск-MAC-адресаКалькулятор дня недели рожденияКалькулятор Периметра ЭллипсаШестнадцатеричный калькуляторКалькулятор Относительного Стандартного ОтклоненияКалькулятор возвращения СатурнаКонвертер римских цифрДобавить линию к изображениюКалькулятор инфляции в СШАКалькулятор даты зачатияКалькулятор вероятности броска кубиковПобитовый калькуляторГенератор кроссвордовКалькулятор ANOVAКалькулятор прямоугольного треугольникаКалькулятор беременности собакиКалькулятор подъёмной силы гелиевого шараКалькулятор количества цифрПоиск ID пользователя FacebookПреобразователь двоичного кода в десятичныйКалькулятор коэффициентов и процентовПродвинутый анализатор совместимости знаков зодиакаКалькулятор дозировки лекарствГенератор «Соедини точки»Калькулятор положения солнцаГенератор анаграммКалькулятор дефицита калорийКалькулятор продолжительности времениРешатель Карты Карно (K-Map)Калькулятор нумерологииКалькулятор процентного уменьшенияКалькулятор уравнений с модулемКалькулятор Спени Сжатия ДвигателяКонвертер дробного времениКонвертер изображения в ASCII артКалькулятор золотого прямоугольникаКалькулятор КосинусаКалькулятор числа личностиhba1c-калькуляторГенератор случайного IMEIГенератор случайных блюдКалькулятор Момента Затяжки БолтовКалькулятор цены за тысячу показовЦифровой калькулятор души⏱️ Онлайн секундомерКалькулятор композиции функцийПроверка имени пользователя в социальных сетяхКалькулятор времени охлаждения пиваСортировка чиселСтатистика канала YouTubeГенератор развёртки конусаГенератор случайных фиктивных адресовКалькулятор передаточного отношения велосипедаКалькулятор комплексных чиселКалькулятор мастер-номеровКалькулятор обратной функцииИнструмент для пикселизации изображенийКалькулятор уклона и классаКонвертер чашек в граммыСчётчик токенов ИИБросок кубиковГенератор случайных персонажей RPGСоздатель коллажейГенератор случайной турнирной сеткиКалькулятор калорий для кошекКалькулятор сухой массы телаКрутить колесоДвоичный в шестнадцатеричный конвертергенератор-нонограмм-пикроссКалендарь новолуния и полнолунияГенератор карточек бингоКалькулятор смешивания цветов красокHEX-конвертерВыбор Случайного ИмениГенератор случайной покерной рукиКалькулятор перевода дроби в десятичное числоКонвертер HTML в текстКонвертер десятичного числа в шестнадцатеричныйСлучайный выбор🎰 Калькулятор гарантии гачаКалькулятор крутящего моментаКалькулятор усечённого конусаПреобразователь сахара в кровиКалькулятор xG (ожидаемых голов) в футболеКонвертер ГМС в десятичные градусыКонвертер размера файлаКалькулятор модуляКалькулятор скорости езды на велосипедеКонвертер фунтов в граммыПалитра цветов изображенияГенератор шрифтов для Instagram⏰ Калькулятор табеля рабочего времениКонвертер изображений в Base64Конвертер лунного календаряКонвертер процентов в PPMОнлайн БлокнотГенератор случайного времениКалькулятор шагов в расстояниеКалькулятор числа выраженияКалькулятор конвертации масштаба моделиКалькулятор пропорциональной арендыКонвертер бар в PSIТрассировщик изображения в SVGГенератор зачёркнутого текстаГенератор цветовых схемКалькулятор Логарифма по Основанию 2Калькулятор рабочего времениИзвлекатель чиселКалькулятор VO2 MaxКонвертер унций в граммыПреобразователь Обычного Времени в Десятичное ВремяГенератор MAC-адресовГенератор и решатель судокуГенератор случайных группГенератор случайных дней рожденияКалькулятор TDEEКонвертер литров в стаканыКонвертер радиан в градусыГенератор случайных животныхКалькулятор возрастаКалькулятор коэффициента корреляцииКалькулятор среднего отклоненияконвертер ppm в проценты🔊 Генератор тоновКалькулятор доверительного интервала для пропорцииКалькулятор Монетизации YouTube ShortsПеревод из восьмеричной в шестнадцатеричную системуТранспонировщик музыкальной тональностиГенератор случайных аккордовКалькулятор веса еды для походаКалькулятор средней датыГенератор лабиринтовГенератор случайных странКалькулятор возраста по культурамКонвертер мА·ч в Вт·чКалькулятор трёхфазной мощностиКалькулятор кВАКалькулятор перевода ампер в ваттыКалькулятор Ватт в АмперыКалькулятор последовательного соединения резисторовКалькулятор тренияКалькулятор наклонной плоскостиКалькулятор механического преимуществаКалькулятор скорости звукаКалькулятор скорости волныКалькулятор плавучестиКалькулятор конечной скоростиКалькулятор длины волны де БройляКалькулятор энергии фотонаКалькулятор E=mc²Калькулятор замедления времениКалькулятор третьего закона КеплераКалькулятор второй космической скоростиКалькулятор гравитационной силыКалькулятор закона Бугера — Ламберта — БераКалькулятор уравнения НернстаКалькулятор осмотического давленияКалькулятор повышения температуры кипенияКалькулятор понижения температуры замерзанияКалькулятор процентного составаКалькулятор нормальностиКалькулятор моляльностиКонвертер pKa в KaКалькулятор Хендерсона-ХассельбахаКалькулятор теоретического выходаКалькулятор лимитирующего реагентаКалькулятор электронной конфигурацииИнтерактивная таблица МенделееваИИ Генератор Планов УроковИИ Генератор ВикторинГенератор цитирований (APA/MLA/Chicago)Калькулятор посещаемостиКалькулятор баллов APКалькулятор баллов ACTКалькулятор баллов SATКонвертер процентов в CGPAКонвертер CGPA в процентыПростой калькулятор оценок EZ GraderКалькулятор Стоимости Воспитания РебёнкаКалькулятор потребления молока для ребёнкаКалькулятор размера подгузниковГенератор имён для детейПредсказание цвета глаз ребёнкаКалькулятор перцентиля ИМТ для детейКалькулятор роста ребёнкаКалькулятор времени удвоения ХГЧКалькулятор срока родов при ЭКОКалькулятор имплантацииКитайский калькулятор пола ребёнкаФорматтер даты ISO 8601Конвертер юлианской датыКалькулятор дневного снаКалькулятор фаз ЛуныКалькулятор восхода и закатаWorld ClockКонвертер дат в римские цифрыОбратный отсчёт до пенсииКалькулятор трезвостиКалькулятор Половины Дня РожденияКалькулятор годовщиныКалькулятор номера неделиКалькулятор распределения чаевыхКалькулятор ROI Email-маркетингаКалькулятор стоимости лидаКалькулятор оборотного капиталаКалькулятор маржинальной прибылиКалькулятор FIFO / LIFOКалькулятор страхового запасаКалькулятор точки повторного заказаКалькулятор Оптимального Размера Заказа EOQКалькулятор АмортизацииКалькулятор цен на изделия ручной работыКалькулятор оптовой ценыКалькулятор прибыли ShopifyКалькулятор Amazon FBAКалькулятор комиссий eBayКалькулятор комиссий EtsyКалькулятор комиссий StripeКалькулятор комиссий PayPalКонвертер букмекерских коэффициентовКалькулятор десятиныКалькулятор ЗакятаКалькулятор гербового сбора ВеликобританииКалькулятор освобождения от HRAКалькулятор гратуитиКалькулятор NPSКалькулятор EPFКалькулятор PPFКалькулятор RDКалькулятор SWPКалькулятор гросс-апКалькулятор сравнения кредитовКалькулятор использования кредитаКалькулятор депозитной лестницыКалькулятор казначейских векселей T-BillКалькулятор облигаций IКалькулятор накоплений на колледж 529Калькулятор HSAКалькулятор выходного пособияКалькулятор повышения зарплатыГенератор счетовКалькулятор суточныхКалькулятор компенсации за пробегКалькулятор повышения арендной платыКалькулятор доступности арендыКалькулятор полной стоимости автомобиляКалькулятор доступности автомобиляКалькулятор мотоциклетного кредитаКалькулятор кредита на автодомКалькулятор кредита на лодкуКалькулятор кредита на землюКалькулятор строительного кредитаКалькулятор ипотеки с выплатой только процентовКалькулятор Кредита с Шаровым ПлатежомКалькулятор ипотечных пунктовКалькулятор PMIКалькулятор двухнедельных ипотечных платежейКалькулятор ипотеки ARMКалькулятор кредита VAКалькулятор зарплаты на рукиГенератор SQL-запросов с ИИИИ Генератор Регулярных ВыраженийИИ-визуализатор данных (вставка CSV)ИИ Анализатор Тона ТекстаИИ Анализатор РезюмеИИ конвертер единиц (естественный язык)ИИ Генератор Письма с ИзвинениямиИИ генератор вежливых отговорокИИ Генератор Маршрута ПутешествияИИ генератор списка чтенияГенератор плана тренировок ИИИИ Генератор плана питанияИИ генератор идей для подарковИИ генератор рецептов из ингредиентовКалькулятор ROI стипендийКалькулятор стоимости колледжаКалькулятор часов изучения языка до свободного владенияГенератор словарных викторинГенератор заметок КорнеллаКалькулятор кривой обученияПланировщик интервальных повторений флеш-картКалькулятор затирки для плиткиКалькулятор возможностей процесса Шести СигмЗагрузчик миниатюр YouTubeКалькулятор доходов YouTube