Zaskakująca liczba problemów ma dość naturalne ograniczenia w programowaniu liniowym (LP). Przykłady, takie jak przepływy sieciowe, dopasowanie dwustronne, gry o sumie zerowej, najkrótsze ścieżki, forma regresji liniowej, a nawet ocena obwodu, patrz rozdział 7 w [1]!
Ponieważ ocena obwodu ogranicza się do programowania liniowego, każdy problem w musi mieć sformułowanie programowania liniowego. Dlatego mamy „nowy” algorytm sortowania poprzez redukcję do programu liniowego. Więc moje pytania są
- Jaki jest program liniowy, który posortuje tablicę liczb rzeczywistych?
- Jaki jest czas działania algorytmu sortowania redukcji do LP i rozwiązania?
- Algorytmy S. Dasgupta, C. Papadimitriou i U. Vazirani (2006)
Odpowiedzi:
Poniższa odpowiedź jest w zasadzie równoważna tej, którą już znasz, ale może wydawać się nieco mniej „magiczna”. Z drugiej strony jest bardziej techniczna, ale uważam, że ogólna technika „napisz swój problem jako optymalizacja macierzy permutacji i wywołaj Birkhoffa-von Neumanna” jest świetna do poznania.
Dla permutacji z zdefiniuj macierz permutacji jako macierz 0-1, tak że jeśli i przeciwnym razie. Jest to po prostu macierz, która permutuje współrzędne wektora zgodnie z : jeśli to . Odtąd oznaczę jako .{ 1 , … , n } P σ P i j = 1 j = σ ( i ) P i j = 0 x σ y = P σ x y i = x σ ( i ) y = P σ x σ ( x )σ {1,…,n} Pσ Pij=1 j=σ(i) Pij=0 x σ y=Pσx yi=xσ(i) y=Pσx σ(x)
Jeszcze jedna definicja: nieujemna macierz jest podwójnie stochastyczna, jeśli każdy z jej wierszy i każda z kolumn sumuje się do 1.M.n×n M
I jeden fakt, który jest bardzo ważny w optymalizacji kombinatorycznej - twierdzenie Birkhoffa-von Neumanna:
Zauważ, że podwójnie stochastyczna matryca jest definiowana przez nierówności
Wszystkie te nierówności wzięte razem determinują polytop , a twierdzenie Birkhoffa-von Neumanna stwierdza, że wszystkie krańcowe punkty (wierzchołki) tego polytopa są macierzami permutacji. Z podstawowego programowania liniowego wiemy, że oznacza to, że każdy program liniowy, który ma powyższe nierówności jako swoje ograniczenia (i żadnych innych ograniczeń), będzie miał macierz permutacji jako optymalne rozwiązanie.P
Zatem biorąc pod uwagę dane wejściowe do posortowania, musimy tylko opracować liniowy cel dla którego:a=(a1,…,an) fa(M)
Następnie sformułuj program liniowy w celu maksymalizacji i powyższych nierówności jako ograniczeń, a masz gwarancję, że optymalnym rozwiązaniem jest macierz permutacji dla tak że jest sortowane. Oczywiście łatwo jest „odczytać” z .fa(M) Pσ σ σ(a) σ Pσ
Jednym wyborem dla jest gdzie . Zweryfikuj tofa(M) vTMa v=(1,…,n)
I voila, masz liniowy program do sortowania. Wydaje się głupie do sortowania, ale w rzeczywistości jest to skuteczna metoda optymalizacji.
źródło