Oto tło tego pytania. Graliśmy z przyjaciółmi w grę, w której każdy musi dać innym ludziom prezent. Aby ustalić, kto powinien komuś dać prezent, decydujemy się na losowanie. Problem w tym, że ktoś może dać sobie prezenty, co nie jest śmieszne. Widać, że oczekiwana liczba takich nieszczęśliwych osób wynosi 1, więc zdarza się to dość często.
W tym celu rozwiązywanie problemów wydaje się doskonale pasować. Jeśli mogę rzetelnie wygenerować porozumienie, mogę wybrać tylko jedno porozumienie i użyć go, aby zdecydować, komu dać komuś prezenty.
Generowanie losowych ustaleń można przeprowadzić metodą Las Vegas. Ale problem polega na tym, że spodziewał się tylko wielomianowego czasu działania. Doszedłem więc do problemu znalezienia i-tej drogi. Jeśli mogę losowo wybrać i w [1, D_n] i użyć jakiegoś najgorszego algorytmu czasu wielomianowego (wydajnego), aby uzyskać i-ty układ, to jest to zrobione.
źródło
Odpowiedzi:
To może być dobre pytanie, ale w obecnej formie jest źle sformułowane. Dobrze znane algorytmy generowania losowych odchyleń mają liniowy oczekiwany czas, ale być może otwartym problemem jest znalezienie najgorszego przypadku algorytmu wielomianowego czasu.
Zobacz na przykład: http://www.siam.org/proceedings/analco/2008/anl08_022martinezc.pdf (i slajdy: http://www.lsi.upc.edu/~conrado/research/talks/analco08.pdf )
źródło
Dlaczego nie dla każdej pozycji i losowo wybierać spośród wszystkich elementów innych niż ja ? Na przykład możesz wybrać indeks do oryginalnej tablicy z [0..n-2] , a jeśli otrzymasz j> = i , użyj j + 1 .
źródło