![]() | |||||||
|
|
Многие вычислительные приложения естественным образом используют не только набор элементов (items), но также и набор соединений (connections) между парами таких элементов. Отношения, которые вытекают из этих соединений, немедленно вызывают множество естественных вопросов. Существует ли путь от одного такого элемента к другому, вдоль этих соединений? В какие другие элементы можно перейти из заданного элемента? Какой путь от одного элемента к другому считается наилучшим?
Графы представляют собой распространенные структуры в информатике, и алгоритмы для работы с графами очень важны. Имеются сотни интересных вычислительных задач, сформулированных с использованием графов. В данной работе мы коснемся только некоторых фундаментальных алгоритмов, которые представляют несомненную практическую ценность.
Во втором разделе рассматривается задача вычисления кратчайшего пути между вершинами, когда каждому ребру присвоена некоторая длина или вес. Здесь будут рассмотрены вопросы, посвященные вычислению кратчайшего пути из одной вершины во все остальные, а также поиск кратчайших путей для всех пар вершин. В третьем разделе описывается вычисление остовного дерева минимального веса. Такое дерево представляет собой набор ребер, связывающий все вершины графа с наименьшим возможным весом (каждое ребро обладает некоторым весом). Эта задача решается при помощи жадного алгоритма.
При описании времени работы алгоритма над данным графом G = (V, Е) мы обычно определяем размер входного графа в терминах количества его вершин |V| и количества ребер |Е| графа, т.е. размер входных данных описывается двумя, а не одним параметром. Для удобства и краткости в вычислениях сложности алгоритма символ V будет означать |V|, а символ Е — |Е|. Такое соглашение позволяет сделать формулы для времени работы более удобочитаемыми без риска неоднозначности. [вверх] |