2009-02-05 13 views
6

Próbuję napisać program, który będzie pseudolosowo autogenerate (na podstawie wartości początkowej, aby ponownie uruchomić ten sam test więcej niż raz) rosnącą strukturę katalogów składającą się z plików. (to jest test warunków skrajnych instalacji bazy danych sterującej)Generowanie drzewa katalogów pseudolosowych?

Zastanawiam się, czy któryś z was był świadomy czegoś podobnego do quasirandom "wypełniających przestrzeń" sekwencji (np. van der Corput sequences lub Halton sequences), które mogą tutaj działać.

edytuj: Lub algorytm fraktalny. Brzmi to podejrzanie jak algorytm fraktalny.


edit 2: Nieważne, myślę, że zorientowali się oczywiste rozwiązanie, należy uruchomić z pustym drzewie, i po prostu korzystać z kolejnych wyjść generatora pseudolosowego do deterministycznego (na podstawie wygenerowanej liczby i stanu wygenerowane do tej pory drzewo) wykonują jedno z działań N, np utworzyć nowy podkatalog, dodać nowy plik, zmienić nazwę pliku, usunąć plik itp.

Chcę zrobić to w ten sposób, a nie po prostu zrzucać pliki do struktury folderów, ponieważ mamy do czynienia z sytuacją gdzie mamy problemy z dużymi numerami plików i nie jesteśmy pewni, jaka jest ich przyczyna. (głębokość drzewa, liczba nazw, liczba usunięć itd.)

To nie jest tylko jedno stałe drzewo, które muszę wygenerować, strategia użycia to: trochę rozwinąć strukturę drzewa, ocenić niektóre statystyki wydajności, rozwinąć trochę więcej, oceń statystyki wydajności itp.

+0

Jeśli uzyskasz odpowiedź, upewnij się, że używasz jej tylko dla dobra dobra. Brzmi jak zabawny problem do rozwiązania. –

+0

"Czy używasz swoich mocy na dobre, czy na niesamowite?" –

Odpowiedz

1

Jak wspomniałeś w swojej drugiej edycji, prawdopodobnie zaimplementowałbym to wszystko jako przechodzenie drzewa plików, przy czym PRNG decyduje "zmień katalog", "utwórz katalog" , "przesuń w górę o jeden poziom", "utwórz plik", "usuń plik" i podaj inną wartość, aby określić, który plik chcesz usunąć, do którego katalogu należy zmienić i wygenerować nazwy dla plików i katalogów

Podobny sposób, aby przetestować serwer przepływu pracy, który napisałem (chociaż nie potrzebowałem śledzić, gdzie znajdowały się elementy pracy, wystarczy wybrać losowo jeden z nich do działania).

+0

To właśnie postanowiłem zrobić. Innymi słowy, uczyń z niego maszynę skończoną (prawie automat komórkowy) –

2

Jeśli to tylko do testowania, co jest nie tak z prostym, naiwnym algorytmem generowania? Generuj losową (1-10) ilość podkatalogów, generuj dla nich nazwy, a następnie dla każdego katalogu rekursywnie generuj podkatalogi i pewną ilość plików.

Można to łatwo dostosować i można kontrolować materiał siewny dla rand. Dla bardziej zabawnych potrzeb dystrybucja ilości plików/katalogów może być nieliniowa, ale coś, co bardziej odpowiada Twoim potrzebom.

Brzmi jak coś, co można zbić w pół godziny, i skończyć. Nie widzę potrzeby czegoś matematycznego lub złożonego. Chyba że jest to tylko zabawa :-)

1

Jest to zestaw różnych problemów, które sprawiają, że jest to zabawna zagadka.

Najpierw mamy generator liczb pseudolosowych. Dostępnych jest wiele rzeczy. Oczekuję tylko funkcji, która tworzy liczbę w zakresie 0..n-1.

Następnie mamy algorytm do określania liczby podwęzłów w jednym węźle. Kuszące jest używanie funkcji liniowej, ale to nie jest uczciwa reprezentacja rzeczywistości. Możesz więc utworzyć następującą funkcję:

randomsize() { 
    int n = Random(0,10); 
    if (n<10) return n; 

    return Random(0,9) + 10 * random; 
} 

Ta funkcja tworzy małe liczby. Większość będzie w zakresie 0..9, ale szczyt jest praktycznie nieograniczony. Jeśli chcesz mieć większe numery, możesz również użyć większego progu. Więcej informacji można uzyskać, dodając nowy:

randomsize() { 
    int n = Random(0,100); 
    if (n<10) return n; 

    return Random(0,9) + 10 * random; 
} 

Ostatni problem polega na tworzeniu drzewa. To jest raczej proste. Ale należy pamiętać, że algorytm musi się skończyć.Więc trzeba wykonać jedną z następujących czynności:

  • korzystanie max głębokości
  • ubytek wygenerowany numer oparty na poziomie zagnieżdżenia
  • określenia liczby liści jako procent całkowitych podwęzłów. Ta wartość procentowa powinna wzrastać na wyższych poziomach (10-50 na pierwszym poziomie, 20-60 na drugim .. 50-100 na piątym, 60-100 na szóstym, do 90-100 na poziomie dziewiątym i wyższym:

Ofcourse możesz zmodyfikować parametry, aby utworzyć wymagane drzewo:

Powiązane problemy