[Algorytmy] Czy da się poprawić złożoność czasową?
-
- Użytkownik
- Posty: 1824
- Rejestracja: 11 sty 2007, o 20:12
- Płeć: Mężczyzna
- Lokalizacja: Katowice, Warszawa
- Podziękował: 73 razy
- Pomógł: 228 razy
[Algorytmy] Czy da się poprawić złożoność czasową?
Dana jest tablica \(\displaystyle{ 2n}\)-elementowa, w której siedzą liczby całkowite. Mamy napisać algorytm, który sprawdzi, czy spośród elementów tej tablicy da się wybrać taki podzbiór \(\displaystyle{ n}\)-elementowy, by jego suma była równa sumie elementów niewybranych.
Mój pomysł był taki, by wysumować całą tablicę. Dostaniemy wtedy jakąś sumę \(\displaystyle{ S}\). Nasz problem sprowadza się zatem do rozstrzygnięcia, czy istnieje taki podzbiór \(\displaystyle{ n}\) elementowy, którego suma wynosi \(\displaystyle{ \frac{S}{2}}\). Ale tutaj nie mam kompletnie żadnego pomysłu, jak to zrobić w jakiejś rozsądnej złożoności czasowej.
Proszę, w miarę możliwości, o same wskazówki, a nie całe rozwiązania.
Pozdrawiam
Mój pomysł był taki, by wysumować całą tablicę. Dostaniemy wtedy jakąś sumę \(\displaystyle{ S}\). Nasz problem sprowadza się zatem do rozstrzygnięcia, czy istnieje taki podzbiór \(\displaystyle{ n}\) elementowy, którego suma wynosi \(\displaystyle{ \frac{S}{2}}\). Ale tutaj nie mam kompletnie żadnego pomysłu, jak to zrobić w jakiejś rozsądnej złożoności czasowej.
Proszę, w miarę możliwości, o same wskazówki, a nie całe rozwiązania.
Pozdrawiam
-
- Użytkownik
- Posty: 1824
- Rejestracja: 11 sty 2007, o 20:12
- Płeć: Mężczyzna
- Lokalizacja: Katowice, Warszawa
- Podziękował: 73 razy
- Pomógł: 228 razy
[Algorytmy] Czy da się poprawić złożoność czasową?
A gdybyśmy zmodyfikowali problem na następujący:
dla ciągu \(\displaystyle{ 2n}\) elementowego rozstrzygnąć, czy da się wybrać tak podciąg \(\displaystyle{ n}\) elementowy, by podciągi wybrany i niewybrany były takie same (kolejność jest istotna).
dla ciągu \(\displaystyle{ 2n}\) elementowego rozstrzygnąć, czy da się wybrać tak podciąg \(\displaystyle{ n}\) elementowy, by podciągi wybrany i niewybrany były takie same (kolejność jest istotna).
-
- Użytkownik
- Posty: 311
- Rejestracja: 30 gru 2011, o 02:21
- Płeć: Mężczyzna
- Lokalizacja: Puławy
- Podziękował: 11 razy
- Pomógł: 53 razy
[Algorytmy] Czy da się poprawić złożoność czasową?
Mam pewien pomysł ale nie wiem czy wyjdzie z tego coś sensownego. Jak nie chcesz całego algorytmu na tacy to poczekaj aż zaklepie i sprawdze czy jakoś działa ; ].
Ogólnie założenie mam takie że próbuje generować dwa takie ciągi, a na końcu sprawdzam czy są równej długości.
EDIT: Chyba będzie działać...
wskazówka(implementacyjna)
wskazówka 2(algorytmiczna):
Ogólnie założenie mam takie że próbuje generować dwa takie ciągi, a na końcu sprawdzam czy są równej długości.
EDIT: Chyba będzie działać...
wskazówka(implementacyjna)
Ukryta treść:
Ukryta treść:
-
- Użytkownik
- Posty: 1824
- Rejestracja: 11 sty 2007, o 20:12
- Płeć: Mężczyzna
- Lokalizacja: Katowice, Warszawa
- Podziękował: 73 razy
- Pomógł: 228 razy
[Algorytmy] Czy da się poprawić złożoność czasową?
\(\displaystyle{ 1, 1, 2, 3, 3, 2.}\)
Z Twojego algorytmu wynika, że się da wybrać żądany podciąg (bo utworzyliśmy ciągi złożone z \(\displaystyle{ 1, 2, 3}\)), ale wybrać ich się nie da, bo kolejność się nie zgadza.
Czy może źle rozumiem?
Z Twojego algorytmu wynika, że się da wybrać żądany podciąg (bo utworzyliśmy ciągi złożone z \(\displaystyle{ 1, 2, 3}\)), ale wybrać ich się nie da, bo kolejność się nie zgadza.
Czy może źle rozumiem?
-
- Użytkownik
- Posty: 342
- Rejestracja: 31 maja 2008, o 19:44
- Płeć: Mężczyzna
- Lokalizacja: Radom
- Podziękował: 26 razy
- Pomógł: 28 razy
[Algorytmy] Czy da się poprawić złożoność czasową?
Anyway \(\displaystyle{ 1,1,2,1,1,2}\) - taktyka z dawaniem dwóch kolejnych takich samych do dwóch różnych ciągów tu nie działa. Chyba, że chodzi o coś innego we wskazówce drugiej?
Problem trochę mi przypomina ten postawiony w
... miwojazer/ .
Dynamiczny algorytm kwadratowy jest bardzo podobny - stanem jest \(\displaystyle{ P(i,k)}\), który przyjmuje \(\displaystyle{ 0}\) lub \(\displaystyle{ 1}\) w zależności od tego, czy można prefiks długości \(\displaystyle{ i}\) podzielić na ciąg długości \(\displaystyle{ k}\) i drugi "taki sam" (w sensie, krótszy jest prefiksem dłuższego) długości\(\displaystyle{ i-k}\).
\(\displaystyle{ P(i,k)=1}\),jeśli \(\displaystyle{ k \le n}\) oraz (\(\displaystyle{ P(i-1,k-1) = 1}\) i można za pomocą \(\displaystyle{ T}\) przedłużyć pierwszy ciąg, lub jeśli \(\displaystyle{ P(i-1,k)=1}\) i można przedłużyć drugi).
Problem trochę mi przypomina ten postawiony w
... miwojazer/ .
Dynamiczny algorytm kwadratowy jest bardzo podobny - stanem jest \(\displaystyle{ P(i,k)}\), który przyjmuje \(\displaystyle{ 0}\) lub \(\displaystyle{ 1}\) w zależności od tego, czy można prefiks długości \(\displaystyle{ i}\) podzielić na ciąg długości \(\displaystyle{ k}\) i drugi "taki sam" (w sensie, krótszy jest prefiksem dłuższego) długości\(\displaystyle{ i-k}\).
\(\displaystyle{ P(i,k)=1}\),jeśli \(\displaystyle{ k \le n}\) oraz (\(\displaystyle{ P(i-1,k-1) = 1}\) i można za pomocą \(\displaystyle{ T}\) przedłużyć pierwszy ciąg, lub jeśli \(\displaystyle{ P(i-1,k)=1}\) i można przedłużyć drugi).
Ostatnio zmieniony 19 gru 2012, o 20:04 przez Panda, łącznie zmieniany 1 raz.
-
- Użytkownik
- Posty: 311
- Rejestracja: 30 gru 2011, o 02:21
- Płeć: Mężczyzna
- Lokalizacja: Puławy
- Podziękował: 11 razy
- Pomógł: 53 razy
[Algorytmy] Czy da się poprawić złożoność czasową?
Kolejka panowie, kolejka...
Kontener FIFO.
EDIT: Jak chcecie moge przedstawić cały swój algorytm.
Cały algorytm:
Kontener FIFO.
EDIT: Jak chcecie moge przedstawić cały swój algorytm.
Cały algorytm:
Ukryta treść:
Ostatnio zmieniony 19 gru 2012, o 20:11 przez gryxon, łącznie zmieniany 2 razy.
-
- Użytkownik
- Posty: 363
- Rejestracja: 24 sie 2012, o 09:27
- Płeć: Mężczyzna
- Lokalizacja: Cieszyn
- Pomógł: 80 razy
[Algorytmy] Czy da się poprawić złożoność czasową?
Mały lecz znaczący błąd
"Dodajemy element ciągu do Ciągu A. i kolejki"
"Dodajemy element ciągu do Ciągu A. i kolejki"
-
- Użytkownik
- Posty: 342
- Rejestracja: 31 maja 2008, o 19:44
- Płeć: Mężczyzna
- Lokalizacja: Radom
- Podziękował: 26 razy
- Pomógł: 28 razy
[Algorytmy] Czy da się poprawić złożoność czasową?
W skrócie:
Jeśli element \(\displaystyle{ t}\) może pomóc ciągowi \(\displaystyle{ B}\) dogonić ciąg \(\displaystyle{ A}\), to go dodaj do \(\displaystyle{ B}\), jeśli nie, to dodaj do \(\displaystyle{ A}\).
A czy to się nie wyłoży dla?
Powiem od razu że prawidłowy wynik to \(\displaystyle{ A=B=caabbabb}\), tymczasem, parę pierwszych kroków generuje - moim zdaniem - \(\displaystyle{ (A,B)=(caabb,c)}\), a potem \(\displaystyle{ (A,B)=(caabb,ca)}\), i tu się zacina, bo to zły wybór..
Jeśli element \(\displaystyle{ t}\) może pomóc ciągowi \(\displaystyle{ B}\) dogonić ciąg \(\displaystyle{ A}\), to go dodaj do \(\displaystyle{ B}\), jeśli nie, to dodaj do \(\displaystyle{ A}\).
A czy to się nie wyłoży dla
Kod: Zaznacz cały
caabbcabbaabbabb
Powiem od razu że prawidłowy wynik to \(\displaystyle{ A=B=caabbabb}\), tymczasem, parę pierwszych kroków generuje - moim zdaniem - \(\displaystyle{ (A,B)=(caabb,c)}\), a potem \(\displaystyle{ (A,B)=(caabb,ca)}\), i tu się zacina, bo to zły wybór..
-
- Użytkownik
- Posty: 311
- Rejestracja: 30 gru 2011, o 02:21
- Płeć: Mężczyzna
- Lokalizacja: Puławy
- Podziękował: 11 razy
- Pomógł: 53 razy
[Algorytmy] Czy da się poprawić złożoność czasową?
Nie da się wybrać takiego ciągu z twojego przypadku chyba...
Edit: sorry może jednak da ; >, zaraz ogarne bo chwilowo nie mam czasu.
Edit: sorry może jednak da ; >, zaraz ogarne bo chwilowo nie mam czasu.
-
- Użytkownik
- Posty: 342
- Rejestracja: 31 maja 2008, o 19:44
- Płeć: Mężczyzna
- Lokalizacja: Radom
- Podziękował: 26 razy
- Pomógł: 28 razy
[Algorytmy] Czy da się poprawić złożoność czasową?
W sensie, że nie da się ? No jak to nie Ciąg \(\displaystyle{ b}\) to drugie \(\displaystyle{ c}\) plus sufiks.
Kod: Zaznacz cały
caabbabb