Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
30-40.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
38.37 Кб
Скачать

30. Алгоритм Крускала

Алгоритм Крускала — алгоритм побудови мінімального кістякового дерева зваженого неорієнтовного графа. Алгоритм було вперше описано Джозефом Крускалом 1956 року.

Алгоритм Крускала (як і алгоритм Прима) є класичним алгоритмом розв'язання задачі пошуку мінімального кістякового дерева. У разі використання найшвидших реалізацій час його роботи становить О(E log E). Основна частина часу витрачається на сортування ребер за вагою. Алгоритм Краскала знаходить мінімальне остовне дерево. На вхід алгоритм Краскала приймає неорієнтовані граф, який задається за допомогою структури edge: x - з якої вершини, y - в яку, w - вага ребра. Після того, як вважали граф, ми повинні впорядкувати всі ребра по зростанню. Далі потрібно розглядати ребра по - порядку, вирішуючи брати чи не брати ребро. Ми повинні взяти ребро, якщо воно з'єднує вершини, які розташовані в різних подмножествах, і не брати якщо в одному, для того, щоб довідатися в якому безлічі знаходиться вершина використовується функція getLeader. Для того, щоб відповісти на питання об'єднувати чи дві вершини використовується функція unite. Таким чином, пробігшись по всіх ребрах і взявши тільки ті, які підходять ми побудуємо мінімальне остовне дерево.

31 Алгоритм Прима.

Алгоритм Прима - алгоритм побудови мінімального остовного дерева зваженого зв'язного неорієнтованого графа. Алгоритм вперше був відкритий в 1930 році чеським математиком Войцехом Ярніком, пізніше перевідкритий Робертом приймемо в 1957 році, і, незалежно від них, Е. Дейкстри в 1959 році.Алгоритм Прима знаходить мінімальне остовне дерево. Ідея даного алгоритму полягає в додавання однієї за одною вершин в дерево, таким чином, що відстань від вже помічених вершин до неї було мінімальним. На вхід алгоритм приймає n - кількість вершин і m - кількість ребер, а потім йде m трійок, де перше число з якої вершини, друге число в яку, а третє вага ребра. Побудова починається з дерева, що включає в себе одну (довільну) вершину. Протягом роботи алгоритму дерево розростається, поки не охопить всі вершини вихідного графа. На кожному кроці алгоритму до поточного дереву приєднується найлегше з ребер, що з'єднують вершину з побудованого дерева і вершину не з дерева.

32. Алгоритм пошуку в глибину.

Граф - це сукупність двох кінцевих множин: множини точок і безлічі ліній, що попарно з'єднують деякі з цих точок. Безліч точок називаються вершинами (вузлами) графа. Безліч ліній, що з'єднують вершини графа, називаються ребрами (дугами) графа.

Пошуком в глибину називається спосіб обходу вершин графа, який, розпочавшись від якої-небудь вершини, рекурсивно застосовується до всіх вершин, в які можна потрапити з поточної. Нехай граф з N вершинами заданий матрицею суміжності A[N][N] . Створимо одновимірний масив int visited[N] і заповнимо його нулями, вважаючи, що жодна вершина до початку виконання алгоритму не була відвідана. Функція обходу записується таким чином:void go(int curr) { visited[curr] = 1; /* помечаем текущую вершину как пройденную */ for (int i = 0; i < N; i++) if (!visited[i] && A[curr][i]) go(i); } ... /* в тексте программы */ go(start);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]