Jakiego algorytmu użyć w problemie wyszukiwania zestawów...

0

Wstępem: Jestem tu nowy i nie za bardzo wiem, czy dobry dział wybrałem, ale ze wszystkich pasowało najlepiej.

Problem przedstawia się następująco:

Mam 8500 zestawów liczb.
Każdy zestaw składa się z 4 liczb od 0 do 63, czyli coś w tym rodzaju:

4, 6, 34, 54
6, 11, 46, 61
1, 4, 55, 63
2, 3, 45, 46
...

Chodzi o wyszukanie 16 takich zestawów liczb, aby żadna liczba od 0 do 63 się nie powtórzyła.

Wiem, że wyników takich są tysiące, jeśli nie miliony. Zależy mi, aby w możliwie krótkim czasie znajdywać te rozwiązania (w obecnej wersji programu wyszukanie wszystkich przypadków dla 9 zestawów z zakresu liczb od 0 do 35 zajmuje mi około godziny, a chciałbym zejść do rzędu sekund).

Nie proszę o rozwiązanie problemu, ale o wskazanie drogi - gdzie szukać, co zastosować?

0

A masz pewnosc, ze taki podzial jest mozliwy ? To znaczy, ze np we wszystkich zestawach nie wystapi cyfra 1.

Proponuje cos w tym guscie:
Robisz tablice od 0 do 63. Elementami tej tablicy sa pary: [flaga oznaczajaca, czy dana liczba juz jest wykorzystana ; oraz lista zestawow liczb (posortowanych), ktore zaczynaja sie od liczby bedacej indeksem tej tablicy]. Nastepnie jedziesz po kolejnych elementach tablicy i wybierasz pierwszy zestaw z brzegu (z listy), o ile spelnia wymagania + ustawiasz flage "wykorzystania" dla trzech pozostalych liczb z wybranego zestawu. Oczywiscie dla aktualnie analizowanej komorki tablicy tez ustawiasz te flage. I analizujesz tylko te, ktore nie maja jeszcze tej flagi. Po dojsciu do konca tablicy sprawdzasz, czy jeszcze jakies cyfry Ci zostaly (sposob dowolny, wybierz sam sobie), jesli tak, to... musisz kombinowac dalej jakos ;)

Przykład:
dla komorki o indeksie 5 w tej tablicy bedziesz przechowywał:

  • flaga (boolean) czy zostala juz ona "odhaczona"
  • liste zestawow liczb, ktore sie zaczynaja (po posortowaniu na cyfre 5), czyli np: (5,6, 22,55), (5, 11, 23, 33), (5, 16, 17, 18), (5, 52, 53, 56)
0

No w tym momencie robię coś podobnego (po kolei wszystkie, jeśli spotkam coś bez flagi, dodaję do rozwiązania i ustawiam flagę na wszystkich zestawach, w których występowały dodane przed chwilą liczby) i trwa to zdecydowanie za długo :/

0

Mozesz zapodac ten swoj zestaw liczb gdzies ? Czy to po prostu zwykly random ? Jak czesto chcesz to liczyc ?

0

Tak naprawdę póki co jest to losowane - w praktyce dane mają być 4 razy większe, tylko jeśli już teraz zajmuje to x minut, to przy 4 razy większych danych (potrzeba wybrania 64 zestawów z liczbami od 0-255) zajmie to czas t dążący do nieskończoności ;)

Do tej nieskończoności wystarczy, że dojdę jeden raz :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1