2013-02-14 3 views
2

Что такое хороший способ создания случайного дерева (или матрицы смежности, которая удовлетворяет свойствам дерева)? В настоящее время у меня есть следующая структура данных, которую я возвращаю, но я хотел бы генерировать это случайным образом. Какие-либо предложения?Создание случайного дерева?

return [{ 
     Source: "A1", 
     Target: "A2", 
    }, { 
     Source: "A2", 
     Target: "A3", 
    }, { 
     Source: "A1", 
     Target: "A4", 
    }, { 
     Source: "A4", 
     Target: "A6", 
    }, { 
     Source: "A4", 
     Target: "A7", 
    }, { 
     Source: "A3", 
     Target: "A8", 
    }, { 
     Source: "A3", 
     Target: "A5", 
    }]; 
+0

Когда вы говорите случайное ... Вы имеете в виду сбалансированное дерево? – smk

+0

@SajitKunnumkal: Собственно, все в порядке. Предпочтительно то, что имеет более узлы листа, но кроме этого, у меня нет никаких предпочтений. – Legend

ответ

5

Дерево с п узлами может быть однозначно выражается в виде последовательности из п-2 целых чисел (в диапазоне [0, N-1]). Это называется Prüfer sequence.

Создание случайной последовательности не должно быть проблемой. Тогда вам просто нужно преобразовать последовательность в свою древовидную структуру, и все готово.

+0

Спасибо! Это именно то, что я ищу. Я предполагаю, что когда вы говорите, что «создание случайной последовательности не должно быть проблемой», это всего лишь массив случайных целых чисел и что нет особых ограничений, которым они должны следовать. Это верно? Я имею в виду, если есть способ контролировать глубину дерева, которое генерируется. – Legend

+0

Да, для последовательности нет дополнительных ограничений (кроме диапазона записей). Если вы хотите контролировать глубину, вам нужно определить глубину дерева. В конце концов вы можете установить произвольный узел в качестве корневого узла. Но помимо этого невозможно контролировать глубину. –

+0

Удивительный! Спасибо за ваше время. – Legend