PJW
2007-04-26 20:24:29 UTC
Cześć
W jaki sposób wygenerować losowy graf spójny (|V| = n, gdzie n jest
podane)? W literaturze i w sieci nie mogę znaleźć żadnego danego
algorytmu na ten problem.
Mam pewną koncepcję, otóż:
1. Tworzę rosnący ciąg: f(x) = x + 1, gdzie x należy do <0, n).
Np. dla n = 5.
1 2 3 4 5
2. Zamieniam elementy losowo tzn. swap(tab[i], tab[rand() % n]) w pętli
for i dostaje np. 3 2 1 5 4
3. Tworzę w ten sposób krawędzie i zachowuje spójność grafu:
3 -> 2 -> 1 -> 5 -> 4
Graf ten zapisuje np. w liście incydencji.
1 -> 2 -> 5
2 -> 3 -> 1
3 -> 2
4 -> 5
5 -> 1 -> 4
4. "Strzelam" losowo wartość z powyższego ciągu np. 5 i szukam węzła dla
tego węzła, by stworzyć nową krawędź. (tutaj pomijam węzły 1 i 4, więc
szukam wśród węzłów 2 i 3)
Algorytm dosyć skomplikowany i nieprzyjemny w implementacji. Macie
jakieś inne koncepcje lub ewentualnie ulepszenia do powyższego algorytmu?
Pozdrawiam,
PJW
W jaki sposób wygenerować losowy graf spójny (|V| = n, gdzie n jest
podane)? W literaturze i w sieci nie mogę znaleźć żadnego danego
algorytmu na ten problem.
Mam pewną koncepcję, otóż:
1. Tworzę rosnący ciąg: f(x) = x + 1, gdzie x należy do <0, n).
Np. dla n = 5.
1 2 3 4 5
2. Zamieniam elementy losowo tzn. swap(tab[i], tab[rand() % n]) w pętli
for i dostaje np. 3 2 1 5 4
3. Tworzę w ten sposób krawędzie i zachowuje spójność grafu:
3 -> 2 -> 1 -> 5 -> 4
Graf ten zapisuje np. w liście incydencji.
1 -> 2 -> 5
2 -> 3 -> 1
3 -> 2
4 -> 5
5 -> 1 -> 4
4. "Strzelam" losowo wartość z powyższego ciągu np. 5 i szukam węzła dla
tego węzła, by stworzyć nową krawędź. (tutaj pomijam węzły 1 i 4, więc
szukam wśród węzłów 2 i 3)
Algorytm dosyć skomplikowany i nieprzyjemny w implementacji. Macie
jakieś inne koncepcje lub ewentualnie ulepszenia do powyższego algorytmu?
Pozdrawiam,
PJW