Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МДК.01.02(2003).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
891.39 Кб
Скачать

11.8. Алгоритм leaky bucket ("дырявое ведро")

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

Потеря пакетов — вещь малоприятная, но это блокирует процессы, которые могут привести к коллапсу сегмента или всей сети.

Там, где потеря пакетов нежелательна, можно применить более гибкий алгоритм.

11.9. Алгоритм "маркерное ведро"

Алгоритм token bucket (маркерное ведро) предполагает наличие в буферном устройстве (или программе) некоторого количества маркеров. При поступлении на вход буфера пакетов маркеры используются для их транспортировки на выход. Дальнейшая передача данных на выход зависит от генерации новых маркеров. Поступающие извне пакеты тем временем накапливаются в буфере. Таким образом, полной гарантии отсутствия потерь мы не имеем и здесь. Но алгоритм token bucket позволяет передавать на выход "плотные" группы пакетов ограниченной численности (по числу маркеров), снижая в некоторых случаях вероятность потери. Если буферное устройство "смонтировано" внутри ЭВМ отправителя, потерь можно избежать вовсе, блокируя передачу при заполнении буфера. Как в одном, так и в другом алгоритме мерой передаваемой информации может быть не пакет, а n -байт (где n — некоторое оговоренное заранее число).

Основные понятие теории графов.

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

Граф

Графы обычно изображаются в виде геометрических фигур, так что вершины графа изображаются точками, а ребра - линиями, соединяющими точки (рис. 2.15).

Рис. 2.15

Петля это дуга, начальная и конечная вершина которой совпадают.

Простой граф граф без кратных ребер и петель.

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

Пустым называется граф без ребер. Полным называется граф, в котором каждые две вершины смежные.

Способы представление графов.

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

Предположим, что все вершины и все ребра неориентированного графа или все вершины и все дуги (включая петли) ориентированного графа пронумерованы начиная с единицы. Граф (неориентированный или ориентированный) может быть представлен в виде матрицы типа , где — число вершин, а — число ребер (или дуг). Для неориентированного графа элементы этой матрицы задаются следующим образом:

Для ориентированного графа элементы матрицы задаются так:

Матрицу типа , определенную указанным образом, называют матрицей инциденций.

Пример 5.5. Для ориентированного графа, представленного на рис. 5.8, нумерация вершин уже задана. Зададим нумерацию дуг следующим образом: дуге присвоим номер 1, дуге — 2, дуге — 3 и дуге — 4.

Матрицу инциденции удобно заполнять по столбцам, записывая для k-й дуги 1 в i-й и (–1) в j-й строках k-го столбца и 0 во всех остальных строках k-го столбца. В результате получим матрицу

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

Оценим, например, временные затраты на решение с помощью матрицы инциденций такой простой задачи в ориентированном графе: для данной вершины найти ее "окружение" — множество преемников и множество предшественников вершины , т.е. множество всех вершин, непосредственно достижимых из , и множество всех вершин, из которых она непосредственно достижима.

Для решения этой задачи на матрице инциденций ориентированного графа нужно идти по строке с номером до появления ненулевого элемента (+1 или –1). В случае если обнаружена +1, в соответствующем столбце надо найти строку, в которой записано число –1. Номер строки, в которой стоит это число, дает номер вершины, непосредственно достижимой из данной вершины. Если обнаружена –1, в столбце надо найти строку, в которой записана 1, и получить номер вершины, из которой непосредственно достижима данная вершина. Для получения всего "окружения" надо проделать указанный поиск для всех ненулевых элементов k-й строки. Наиболее трудоемкой процедурой является поиск ненулевого элемента в столбце. Число таких процедур поиска равно степени вершины . Будем в этом случае говорить, что сложность алгоритма анализа окружения вершины составляет (порядка ).

Можно увидеть, что поиск "окружения" всех вершин займет время порядка произведения числа вершин ориентированного графа на сумму степеней всех вершин, которая, как можно показать, пропорциональна числу дуг ориентированного графа. Таким образом, сложность алгоритма поиска "окружения" составляет , т.е. поиск занимает время порядка произведения числа вершин на число дуг.

Более эффективной матричной структурой, представляющей граф, служит матрица смежности вершин, или булева матрица графа. Это квадратная матрица В порядка , элементы которой определяют следующим образом:

для неориентированного графа

для ориентированного графа

Заметим, что в k-й строке матрицы ориентированного графа количество единиц равно полустепени исхода вершины , а количество единиц в k-м столбце — полустепени захода .

Для неориентированного графа матрица смежности вершин симметрическая. Для ориентированного графа, изображенного на рис. 5.8, матрица смежности вершин имеет вид

Рассмотрим решение задачи поиска "окружения" с использованием матрицы смежности вершин. Для определения "окружения" вершины нужно сначала идти по k-й строке матрицы и искать ненулевые элементы. Если элемент , то вершина достижима из вершины . После просмотра k-й строки надо просмотреть k-й столбец. Если элемент , то вершина достижима из вершины .

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

Матрица смежности вершин является достаточно эффективным способом представления графов. Однако эту матрицу удобно строить по графу, уже заданному каким-либо способом, например рисунком. Во многих задачах граф создается динамически, т.е. в ходе решения задачи меняется множество вершин и множество ребер (или дуг). В этом случае эффективным способом машинного представления графа являются списки смежности (или списки инцидентности).

Рассмотрим ориентированный граф. Для задания множества вершин, непосредственно достижимых из вершины v, используют линейный однонаправленный список. Каждый элемент такого списка включает данные (например, некоторое число) и указатель на следующий элемент списка. Список в целом задается указателем на его первый элемент (голову списка). Последний элемент списка содержит "пустой" указатель (рис. 5.11).