Szukam algorytmu, który mógłby znaleźć dwa najbardziej odległe elementy w drzewie binarnym, nie szukając żadnego specjalnego języka, tylko dla algorytmu.znajdowanie dwóch najbardziej odległych elementów w drzewie binarnym
Dzięki.
Szukam algorytmu, który mógłby znaleźć dwa najbardziej odległe elementy w drzewie binarnym, nie szukając żadnego specjalnego języka, tylko dla algorytmu.znajdowanie dwóch najbardziej odległych elementów w drzewie binarnym
Dzięki.
Nazywa się średnicę drzewa.
int diameter(Tree * t) // post: return diameter of t
{
if (t == 0) return 0;
int lheight = height(tree->left);
int rheight = height(tree->right);
int ldiameter = diameter(tree->left);
int rdiameter = diameter(tree->right);
return max(lheight + rheight + 1, max(ldiameter,rdiameter));
}
alt text http://www.cs.duke.edu/courses/spring00/cps100/assign/trees/diameter.jpg
+1 za dobrĘ ... próbkę algorytmu korzystajĘ ... cego z struktury drzewa. Musisz jednak zapisać wierzchołki, na które masz odległość, oraz najgłębsze wierzchołki dla wysokości. – Li0liQ
@ Li0liQ: Tak, na końcu chcemy nazwy wierzchołków, które są najdalej od siebie. Dodam to ASAP. Dzięki. –
Przepraszam, napisałem, że potrzebowałem węzłów, ale po prostu potrzebowałem dystansu :) dzięki za to świetne wyjaśnienie, nie znałem tej "średnicy" rzeczy, to się przyda, mam nadzieję. – attwad
To, czego szukasz, można nazwać graph diameter. Aby go zdobyć, musisz obliczyć ścieżkę od dowolnego wierzchołka do dowolnego innego, a następnie przejść przez wszystkie z nich i znaleźć największy.
Można to osiągnąć za pomocą Dijkstra's algorithm lub po prostu distance matrix (co można osiągnąć, zasilając adjacency matrix), chociaż zajmie to więcej czasu niż algorytm Dijkstry.
+1 za otrzymanie tego pierwszego :) –
Ponieważ jest to drzewo, istnieje tylko jedna ścieżka między dowolną parą wierzchołków. Dzięki temu łatwiej nam znaleźć średnicę wykresu.
Najprostszym sposobem na zrobienie tego jest wykonanie dwóch prostych przemieszczeń drzewa. Po pierwsze, weź dowolny dowolny węzeł jako root i oblicz odległość od niego za pomocą prostego systemu plików DFS/BFS. Teraz weź węzeł znajdujący się najdalej od katalogu głównego (ten pierwszy węzeł najbardziej odległej pary), a czyniąc go nowym katalogiem głównym, przeprowadź kolejne przejście odległości obliczeniowych drzewa. Najdalszym węzłem jest drugi węzeł pary.
Dowód na to, że to działa, jest pozostawiony jako ćwiczenie.
Istnieje również inny sposób obliczania najbardziej odległej pary przez obliczanie i porównywanie najdalszych par dla każdego poddrzewa drzewa, zaczynając od dowolnego węzła jako root (wspomnianego już w innej odpowiedzi).
Odległa zależnie od środka? Ścieżka? Czy możesz podać przykład, aby wyjaśnić swoje pytanie? – Riduidel
Jaka jest twoja miara odległości tutaj? Długość ścieżki w drzewie? – Joey