
- •1. Структурная схема микропроцессора (на примере i8086). Назначение регистров.
- •3. Организация основной памяти.
- •3. Структура и характеристики оперативной памяти
- •4. Модель osi
- •5. Стек протоколов tcp/ip
- •6. Классификация компьютерных сетей
- •7. Данные и модели данных
- •8. Модель данных «сущность-связь»
- •Ограничения целостности
- •9. Реляционная модель данных
- •10. Основные направления исследования в области ии
- •11. Метод резолюции в лппп.
- •12. Продукционная модель
- •13. Основные парадигмы языков программирования.
- •14. Основные понятия ооп: инкапсуляция, наследование, полиморфизм
- •1. Инкапсуляция
- •2. Полиморфизм
- •3. Наследование
- •15. Понятие алгоритма.
- •16. Понятие о временной и емкостной сложности алгоритма
- •17. Машина Тьюринга: детерминированная и недетерминированная
- •18. Понятие формального языка и формальной грамматики
- •19. Основные понятия теории графов.
- •20. Понятие количества информации и энтропии. Теорема Шеннона.
- •21. Деревья в теории графов.
- •22. Модели линейного программирования (постановка задачи, математическая модель, решение графическим методом).
- •23. Двойственность в задачах линейного программирования.
- •25. Элементы теории игр.
- •2. Подпрограммы. Процедуры и функции
- •3. Массивы
- •4. Записи
- •5. Работа с Динамическими данными
- •6. Динамические структуры данных. Линейные списки.
- •7. Динамические структуры данных: двоичные деревья
- •8. Работа с файлами
- •9.Операции целочисленной арифметики
- •10. Системы счисления. Перевод чисел из одной системы счисления в другую
- •11. Язык sql. Назначение и основные команды.
- •Манипулирование данными
- •Простые запросы
- •12. Алгоритмы внутренней сортировки.
- •13. Алгоритмы внешней сортировки
- •14. Нахождение кратчайших путей в графе
- •15. Поиск в ширину
- •16. Поиск остова и минимального остова.
- •17. Линейная модель работы информационно-поисковой системы.
- •18. Хеширование
- •Основные достоинства в-дерева
- •20. Логические вопросно-ответные системы:выполнение запросов различных типов.
- •21. Поиск в семантической сети.
- •22. Принципы динамического программирования. Иллюстрация на примере.
- •23. Адресация в Интернете
- •Доменные имена
- •Общий вид формата url-адреса
- •Как работает dns-сервер
- •24. Основные сервисы в сети Интернет.
- •Word Wide Web (www) - "Всемирная паутина"
- •Поиск информации в сети
- •VoIp сервис
- •Мессенджеры
- •25. Использование html. Структура Web(html) страницы.
15. Поиск в ширину
задача анализа графов с целью выявления их структуры и вычисления метрических характеристик: многие задачи такого рода могут быть решены путем систематического обхода графа с посещением всех его вершин и исследованием всех его ребер. Такой обход можно выполнить двумя стратегиями — поиск в глубину и поиск в ширину.
Работа алгоритма обхода состоит в последовательном посещении вершин и исследовании ребер. Какие именно действия выполняются при посещении вершины и исследовании ребра — зависит от конкретной задачи, для решения которой производится обход. В любом случае факт посещения вершины запоминается, так что с момента посещения и до конца работы алгоритма она считается посещенной. Вершину, которая еще не посещена, будем называть новой. В результате посещения вершина становится открытой и остается такой, пока не будут исследованы все инцидентные ей ребра. После этого она превращается в закрытую.
Идея поиска в ширину состоит в том, чтобы посещать вершины в порядке их удаленности от некоторой заранее выбранной или указанной стартовой вершины. Иначе говоря, сначала посещается сама вершина а, затем все вершины, смежные с а, то есть находящиеся от нее на расстоянии 1, затем вершины, находящиеся от а на расстоянии 2, и т. д.
Рассмотрим алгоритм поиска в ширину с заданной стартовой вершиной а. Вначале все вершины помечаются как новые. Первой посещается вершина а, она становится единственной открытой вершиной. В дальнейшем каждый очередной шаг начинается с выбора некоторой открытой вершины х. Эта вершина становится активной. Далее исследуются ребра, инцидентные активной вершине. Если такое ребро соединяет вершину х с новой вершиной у, то вершина у посещается и превращается в открытую. Когда все ребра, инцидентные активной вершине, исследованы, она перестает быть активной и становится закрытой. После этого выбирается новая активная вершина, и описанные действия повторяются. Процесс заканчивается, когда множество открытых вершин становится пустым.
Основная особенность поиска в ширину, отличающая его от других способов обхода графов, состоит в том, что в качестве активной вершины выбирается та из открытых, которая была посещена раньше других. Именно этим обеспечивается главное свойство поиска в ширину; чем ближе вершина к старту, тем раньше она будет посещена.
Обходом графа называется перебор его вершин в определенном порядке
Существует 2 метода обхода графов - поиск в ширину и поиск в глубину.
Поиск в ширину представляет собой следующий просмотр вершин графа:
A) Выбирается произвольная начальная вершина v.
B) Просматриваются вершины, находящиеся на расстоянии 1 от V (смежные с v). затем просматриваются непросмотренные вершины на расстоянии 2 от v (смежные со смежными) и т.д.
Запишем алгоритм.
ВХОД - начальная вершина v., C - матрица смежности графа.
Перед запуском процедуры выполним:
for i:=1 to n do lab[i]:=true; //все вершины помечаем, как непроcмотренные.
procedure shfind(v); begin
ОЧЕРЕДЬ:= ; ОЧЕРЕДЬ<=v; //ОЧЕРЕДЬ – есть упор. список
while ОЧЕРЕДЬ<> do begin
p<=ОЧЕРЕДЬ; посетить p; lab[p]:=false; //посещаем и помечаем ее, как просмотренную.
for u:=1 to n do if (([p,u]=1)or (c[u,p]=1))and lab[u] then ОЧЕРЕДЬ<=u/;/все смежные непосещенные вершин помещаем в очередь.
end;end;
Процедура поиска в глубину
Идея этого метода — идти вперед в неисследованную область, пока это возможно, если же вокруг все исследовано, отступить на шаг назад и искать новые возможности для продвижения вперед
Понятия новой, открытой, закрытой и активной вершин для поиска в глубину имеют такой же смысл, как и для поиска в ширину. Отметим, что всегда имеется не более чем одна активная вершина.
Обход начинается с посещения заданной стартовой вершины a, которая становится активной и единственной открытой вершиной. Затем выбирается инцидентное вершине а ребро (а,у) и посещается вершина у. Она становится открытой и активной. Заметим, что при поиске в ширину вершина а оставалась активной до тех пор, пока не были исследованы все инцидентные ей ребра. В дальнейшем, как и при поиске в ширину каждый очередной шаг начинается с выбора активной вершины из множества открытых вершин. Если все ребра, инцидентные активной вершине х, уже исследованы, она превращается в закрытую. В противном случае выбирается одно из неисследованных ребер (х,у), это ребро исследуется. Если вершина у новая, то она посещается и превращается в открытую.
Главное отличие от поиска в ширину состоит в том, что при поиске в глубину в качестве активной выбирается та из открытых вершин, которая была посещена последней.
Поиск в глубину предполагает рассмотрение вершин в следующем порядке:
A) Просматриваем произвольную нач. вершину v.
B) Рекурсивно вызываем поиск в глубину для всех смежных с v и еще непросмотренных вершин. При этом массив меток должен быть глобальным и пред вызовом все lab[i]:=true.
Алгоритм.
procedure gfind(v); begin
lab[v]:=false; посетить v;
for u:=1 to n if (([v,u]=1)or (c[v,p]=1))and lab[u] then gfind(u)
end;
Замеч 1. Обходы графа позволяют решать многие конкретные задачи.
Замеч 2. Для обоих способов обхода - T~ekn - экспоненциальный (док-во опускается).