[Algorytmy] Permutacja dająca największą sumę
-
- Użytkownik
- Posty: 1922
- Rejestracja: 26 mar 2012, o 18:52
- Płeć: Mężczyzna
- Lokalizacja: Warszawa
- Podziękował: 695 razy
- Pomógł: 4 razy
[Algorytmy] Permutacja dająca największą sumę
Witam,
Mamy listę \(\displaystyle{ [a_1, a_2, a_3, a_4, ...., a_n]}\)
Naszym zadaniem jest teraz znaleźć taką permutację tej listy, aby suma:
\(\displaystyle{ \sum_{i=1}^{n-1} | x_{p_{i+1}} - x_p_i |}\) była możliwie największa.
Mamy listę \(\displaystyle{ [a_1, a_2, a_3, a_4, ...., a_n]}\)
Naszym zadaniem jest teraz znaleźć taką permutację tej listy, aby suma:
\(\displaystyle{ \sum_{i=1}^{n-1} | x_{p_{i+1}} - x_p_i |}\) była możliwie największa.
Ostatnio zmieniony 29 lis 2013, o 09:29 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
-
- Moderator
- Posty: 2828
- Rejestracja: 15 cze 2008, o 15:45
- Płeć: Mężczyzna
- Lokalizacja: Seattle, WA
- Podziękował: 3 razy
- Pomógł: 356 razy
[Algorytmy] Permutacja dająca największą sumę
Sortujesz liczby a następnie sprawdzasz dwa ustawienia:
oraz:
Powinno zadziałać, aczkolwiek nie dowodziłem tego.
Kod: Zaznacz cały
największa ; najmniejsza ; druga największa ; druga najmniejsza ...
Kod: Zaznacz cały
najmniejsza ; największa ; druga najmniejsza ; druga największa ...
-
- Użytkownik
- Posty: 1922
- Rejestracja: 26 mar 2012, o 18:52
- Płeć: Mężczyzna
- Lokalizacja: Warszawa
- Podziękował: 695 razy
- Pomógł: 4 razy
[Algorytmy] Permutacja dająca największą sumę
Generalnie to w sumie bym nie odrzucał tak szybko tego Twojego pomysłu jednak, biorąc pod uwagę, że obydwa przypadki rozważasz.
Faktycznie miałem taki pomysł, ale rozważałem jeden przypadek i pochopnie napisałem, że to nie zadziała.
Należy spróbować zastanowić się nad uzasadnieniem tego.
Faktycznie miałem taki pomysł, ale rozważałem jeden przypadek i pochopnie napisałem, że to nie zadziała.
Należy spróbować zastanowić się nad uzasadnieniem tego.
-
- Użytkownik
- Posty: 1922
- Rejestracja: 26 mar 2012, o 18:52
- Płeć: Mężczyzna
- Lokalizacja: Warszawa
- Podziękował: 695 razy
- Pomógł: 4 razy
[Algorytmy] Permutacja dająca największą sumę
Czy uważasz, że ten przykład uwala algorytm ?
Pokaże te dwa przypadki:
\(\displaystyle{ [0;1;1;2;1;1;1;1]
[2;0;1;1;1;1;1;1]}\)
Jak moglibyśmy niby lepiej uzyskać ?
Pokaże te dwa przypadki:
\(\displaystyle{ [0;1;1;2;1;1;1;1]
[2;0;1;1;1;1;1;1]}\)
Jak moglibyśmy niby lepiej uzyskać ?
- Zordon
- Użytkownik
- Posty: 4977
- Rejestracja: 12 lut 2008, o 21:42
- Płeć: Mężczyzna
- Lokalizacja: Kraków
- Podziękował: 75 razy
- Pomógł: 910 razy
[Algorytmy] Permutacja dająca największą sumę
Algorytm zwróci inny wynik niż pokazujesz. Tak czy inaczej, żadne z Twoich ustawień nie jest optymalne. Jest takim zaś \(\displaystyle{ [1,2,1,1,1,1,0,1]}\).
edit: tutaj jest opisane zachłanne podejście, które działa ... 37&t=14074 ale niekoniecznie łatwo jest to udowodnić
edit: tutaj jest opisane zachłanne podejście, które działa ... 37&t=14074 ale niekoniecznie łatwo jest to udowodnić
-
- Moderator
- Posty: 2828
- Rejestracja: 15 cze 2008, o 15:45
- Płeć: Mężczyzna
- Lokalizacja: Seattle, WA
- Podziękował: 3 razy
- Pomógł: 356 razy
[Algorytmy] Permutacja dająca największą sumę
Okej, dla tego kontrprzykładu wystarczy budować tablice od środka, czyli:
Aczkolwiek to wydaje mi się grubymi nićmi szyte Trzeba na spokojnie usiąść i pokminić teoretycznie.
Kod: Zaznacz cały
największy
najmniejszy ; największy ; drugi najmniejszy
drugi największy ; najmniejszy ; największy ; drugi najmniejszy ; trzeci największy
-
- Moderator
- Posty: 2828
- Rejestracja: 15 cze 2008, o 15:45
- Płeć: Mężczyzna
- Lokalizacja: Seattle, WA
- Podziękował: 3 razy
- Pomógł: 356 razy
[Algorytmy] Permutacja dająca największą sumę
Tak obstawiasz, czy masz jakieś mocniejsze przesłanki (na przykład przeszło na jakimś konkursie)?Zordon pisze:Budowanie od środka działa
- Zordon
- Użytkownik
- Posty: 4977
- Rejestracja: 12 lut 2008, o 21:42
- Płeć: Mężczyzna
- Lokalizacja: Kraków
- Podziękował: 75 razy
- Pomógł: 910 razy
[Algorytmy] Permutacja dająca największą sumę
Tak, to jest klasyczne zadanie Nawet chyba gdzieś widziałem dowód. Przy odrobinie zawziętości można to samemu wymyślić, ale zapewne nie jest to przyjemne.
-
- Użytkownik
- Posty: 5101
- Rejestracja: 11 mar 2011, o 16:31
- Płeć: Mężczyzna
- Lokalizacja: 52°16'37''N 20°52'45''E
- Podziękował: 4 razy
- Pomógł: 1001 razy
[Algorytmy] Permutacja dająca największą sumę
AlboAfish pisze:Kod: Zaznacz cały
najmniejszy ; największy ; drugi najmniejszy
Kod: Zaznacz cały
drugi największy; najmniejszy ; największy
Dowód nie wydaje się trudny. Jeśli \(\displaystyle{ x_1\le x_2\le\ldots\le x_{2n}}\), to tą metodą uzyskamy wynik
\(\displaystyle{ 2(x_2-x_1)+4(x_3-x_2)+6(x_4-x_3)+\ldots+2(n-1)(x_n-x_{n-1}) +\\
+ (2n-1)(x_{n+1}-x_n) +\\
+2(n-1)(x_{n+2}-x_{n+1})+\ldots+2(x_{2n}-x_{2n-1}).}\)
Większego wyniku uzyskać nie możemy. Dla \(\displaystyle{ k<n}\) składnik \(\displaystyle{ x_{k+1}-x_k}\) może być policzony co najwyżej z krotnością \(\displaystyle{ 2k}\), bo skoro każdy z wierzchołków \(\displaystyle{ x_1,\ldots,x_k}\) odwiedzamy tylko raz, to wychodzi z nich co najwyżej \(\displaystyle{ 2k}\) krawędzi, zatem jest co najwyżej \(\displaystyle{ 2k}\) krawędzi z tych wierzchołków do wierzchołków \(\displaystyle{ x_{k+1},\ldots,x_{2n}}\). Tak samo dla składników z trzeciej linijki. Składnik środkowy może być z krotnością co najwyżej \(\displaystyle{ 2n-1}\), bo tyle jest wszystkich krawędzi.
Dla nieparzystej liczby wyrazów jest trochę trudniej, ale też da się udowodnić.