Як я можу генерувати випадковим чином висоту, що охоплює дерева?


9

Для проекту, над яким я працюю, я повинен генерувати випадкові простягаються дерева з обмеженою висотою.

В основному я роблю наступне: 1) Створіть дерево, що перекидається, 2) Перевірте можливість, якщо можливо, збережіть його.

1) Починаючи з дерева, що має мінімальний розмір (Прима або Крускала), я додаю неіснуючий край, і це створює цикл, я виявляю цей цикл і видаляю один з країв цього циклу, який дає мені нове дерево, що перекидається, і я продовжую це розкинуте дерево, додавши новий край ...

2) Припустимо, існує спеціальна вершина vcenter. Для кожної вершиниv, довжина шляху від v до Vcenter повинно бути менше δ, де δ - заданий параметр.

Чи є кращий (розумний) спосіб зробити це?

PS Я забув вказати інше обмеження (моя помилка): ступінь вершин також має бути обмеженим.


Я не впевнений, чи правильно мені це станеться. На першому кроці ви видаляєте краю просто випадковим чином або так, щоб висота дерева була (можливо) зменшена?
Саха

Я випадковим чином додаю і видаляю краї.
Арман

Чи можете ви замість цього обрати вибіркові випадкові найкоротші дерева, що охоплюють дерева? Це спрощує речі
Ярослав Булатов

чи є у вас якісь кошти по краях? ти шукаєш розкидне дерево з висотоюδі мінімальна вартість? Як писав @pboothe, ви можете використовувати BFS і все. Єдина проблема полягає в тому, що BFS використовує занадто багато пам'яті. Якщо ви піклуєтесь про витрати, ви можете спробувати алгоритм у вікіпедії щодо евклідових мінімуму, що охоплює дерева ( en.wikipedia.org/wiki/Euclidean_minimum_spanning_tree ). Він має час роботиO(nlogn) з O(n)простору.
Маркос Вільягра

Отже, ваша проблема має три обмежені величини: висоту дерева, ступінь кожної вершини та відстань від v_center, чи правильно це? Саме обмежене обмеження ступеня саме робить проблему NP важкою, але я думаю, що ви шукаєте метод, який, швидше за все, швидко дасть рішення, а не точний алгоритм.
Джагадіш

Відповіді:


7

Я працював над деревами з обмеженою глибиною кілька років тому, вони справді цікаві. Деякі з моїх колег придумали алгоритми передачі повідомлень, які зробили чудову роботу, але я не можу знайти жоден їх код. Ми написали це у стилі фізики тут: http://iopscience.iop.org/1742-5468/2009/12/P12010/ . Вони сказали мені, що це також працює з межею ступеня, хоча це не ввійшло в папір.

Запропонований вами підхід, який я б назвав ланцюгом Маркова Монте-Карло, часто є конкурентом підходу, що передає повідомлення. Якщо ви зацікавлені в вибірковій вибірці приблизно рівномірно з набору дерев обмеженого ступеня, обмеженої глибиною, що охоплюють даний графік, я пропоную змінити ваш підхід до використання "м'яких" меж. Тобто замість відхилення крайового заміну, який змушує дерево порушувати обмеження глибини, прийміть його, але з меншою ймовірністю, ніж своп, який не порушує межу. Якщо у вас є параметр, який контролює, наскільки меншою є ця ймовірність, ви можете зробити обмеження, що порушують конфігурації, менш імовірними, поки ви не знайдете можливе рішення, яке майже рівномірно випадкове.

Велике питання - скільки часу вам потрібно запускати ланцюжок. Оскільки простягається дерево зі ступенем не більше 2 - це гамільтонів шлях, слід очікувати, що будь-який родовий зв’язок буде експоненціальним у розмірі графіка. Але, можливо, графіки, які вас цікавлять, в чомусь особливі.


2
Більше деталей, а також фільм: healthyalgorithms.wordpress.com/2010/12/23/…
Авраам Флексман

3

Якщо ваша проблема полягає в тому, щоб рівномірно відібрати простягаюче дерево з набору S, де S - це набір з усіх максимум високих дерев висоти h, для деякого введення h, тоді ваша стратегія працює (тобто вибір вибір випадкового дерева, що охоплює, і перевірити, чи не більше його висоти h).

Однак я не впевнений, що алгоритм, який ви описали, створить випадкове дерево, що охоплює. Я б рекомендував переглядати стандартні алгоритми. Існує два алгоритми: алгоритм Вілсона та алгоритм Олдоса-Бродера. Ви можете подивитися тут . Існує новіший (наближений) алгоритм, але він досить складний.

Крім того, може бути спосіб генерування цього розкидного дерева безпосередньо з обмеженою висотою. Але я ніколи не чув про такі алгоритми.


1

Скористайтеся першим пошуком! Зробіть BFS з кожної вершини графіка, виберіть отримане дерево найменшої висоти. BFS завжди знаходить шлях від кореня до кожної іншої вершини з найменшими пересками.


Ви точно маєте рацію. Ми почали робити з BFS, але це не спрацювало через обмеженість ступеня вершин. Я забув згадати про це обмеження (моя помилка): ступінь вершин у генерованому дереві також має бути обмеженим. Ваша відповідь правильна з поточним питанням, але я думаю, я повинен відредагувати своє запитання.
Арман

Тоді ваша проблема майже напевно є NPC за рахунок зменшення з Degree Constrained Spanning Tree - en.wikipedia.org/wiki/Degree-constrained_spanning_tree
Пітер Бут
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.