Forum Informatyka UJ forum Strona Główna Informatyka UJ forum
Rocznik 2005 - czyli najlepsze forum w sieci
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Zadanie D:nawiasy
Idź do strony 1, 2  Następny
 
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 i 3 semestr - Algorytmy i Struktury Danych
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
kap00ch
Mistrz grilla



Dołączył: 09 Mar 2006
Posty: 1840
Przeczytał: 0 tematów

Skąd: ja sie tu wzialem?

PostWysłany: Śro 23:14, 11 Paź 2006    Temat postu: Zadanie D:nawiasy

a ja sie juz cieszylem ze jest jedno nowe ;p [link widoczny dla zalogowanych]
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
kg86
zielony żul



Dołączył: 22 Gru 2005
Posty: 1194
Przeczytał: 0 tematów

Skąd: pochodze?

PostWysłany: Śro 23:32, 11 Paź 2006    Temat postu:

nie wiem czy ja dobrze kumam tresc tego zadania, ale jesli mamy wyrazenie nawiasowe A, to np. k A -k tez jest poprawnym wyrazeniem nawiasowym i zawiera podciag A :P albo wstawic gdzies do srodka k -k i tez bedzie ok... wiec gdzie jest haczyk? :)
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
ostoj
Przewijak Tasmy



Dołączył: 08 Lis 2005
Posty: 883
Przeczytał: 0 tematów

Skąd: Tychy

PostWysłany: Śro 23:38, 11 Paź 2006    Temat postu:

Kod:
Napisz program, który dla danego wyrażenia nawiasowego A znajdzie najkrótsze poprawne wyrażenie nawiasowe, które zawiera A jako podciąg. Innymi słowy, program powinien wstawić do A minimalną liczbę nawiasów, tak aby uzyskać poprawne wyrażenie nawiasowe.


wniosek z tego taki ze A nie musi byc poprawnym wyrazeniem nawiasowym
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
kg86
zielony żul



Dołączył: 22 Gru 2005
Posty: 1194
Przeczytał: 0 tematów

Skąd: pochodze?

PostWysłany: Czw 12:11, 12 Paź 2006    Temat postu:

no wlasnie to przeoczylem :P dzieki :)
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Rogal
Zjeb z kaszanką



Dołączył: 13 Mar 2006
Posty: 1745
Przeczytał: 0 tematów

Skąd: koło podbiegunowe

PostWysłany: Czw 13:30, 12 Paź 2006    Temat postu:

Zdecydowanie NALEŻY używać return. Dostałem za to 2 gwiazdki :D
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
mateo
pijak



Dołączył: 08 Mar 2006
Posty: 296
Przeczytał: 0 tematów

Skąd: Krk - Biały Prądnik

PostWysłany: Czw 14:18, 12 Paź 2006    Temat postu:

@Rogal: zapodalbys binarke?

EDIT: juz nie trzeba... napisalem sobie symulator wyjscia i znalazlem blad.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
przem
[świeżak]



Dołączył: 13 Paź 2006
Posty: 14
Przeczytał: 0 tematów

Skąd: Krosno

PostWysłany: Pią 21:18, 13 Paź 2006    Temat postu:

Czy mógłby ktoś napisać poprawne wyjście dla wejścia -1 1, jakoś nie mogę rozkminić tego zadania z góry dzięki!
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
mateo
pijak



Dołączył: 08 Mar 2006
Posty: 296
Przeczytał: 0 tematów

Skąd: Krk - Biały Prądnik

PostWysłany: Pią 22:21, 13 Paź 2006    Temat postu:

przem napisał:
Czy mógłby ktoś napisać poprawne wyjście dla wejścia -1 1, jakoś nie mogę rozkminić tego zadania z góry dzięki!


dla testu:
1
-1 1 0
poprawny wynik to:
1 -1 1 -1 0


a tak dodatkowo to polecam 2 niby proste ale za to bardzo uzyteczne testy ktore wykrywaja taki glupi blad jak naprzyklad mialem ja:
2
1 1 -1 -1 0
1 -1 1 -1 0
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Rogal
Zjeb z kaszanką



Dołączył: 13 Mar 2006
Posty: 1745
Przeczytał: 0 tematów

Skąd: koło podbiegunowe

PostWysłany: Sob 19:04, 14 Paź 2006    Temat postu:

moja rada:
jeśli dla testu przykładowego dostajecie odpowiedź

1 2 1 -1 1 -1 -2 -1

to choć jest ona poprawna to jednak prawdopodobnie macie błąd
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
mateo
pijak



Dołączył: 08 Mar 2006
Posty: 296
Przeczytał: 0 tematów

Skąd: Krk - Biały Prądnik

PostWysłany: Sob 21:45, 14 Paź 2006    Temat postu:

Rogal napisał:
moja rada:
jeśli dla testu przykładowego dostajecie odpowiedź

1 2 1 -1 1 -1 -2 -1

to choć jest ona poprawna to jednak prawdopodobnie macie błąd



kwiatekm@virgo:~/ASD2/D_nawiasy$ ./nawiasy < 00
1 2 1 -1 1 -1 -2 -1 0


hmmmmm.... :)
jakby to powiedziec... to chyba nie do konca jest regula :P wszystko zalezy od tego gdzie wybieramy miejsce na dopisanie nawiasu zamykajacego gdy mozemy go dopisac gdziekolwiek.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
hansu
Nieomylny Admin



Dołączył: 17 Lis 2005
Posty: 1990
Przeczytał: 0 tematów

Skąd: przychodzimy? Czym jestesmy? Dokad zmierzamy?

PostWysłany: Sob 23:01, 14 Paź 2006    Temat postu:

No to jest chyba raczej oczywiste ze dopisujemy do zaraz za otwierajacym - wtedy mamy pewnosc ze ten manewr w zaden sposob nie wplynie na reszte ciagu...
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Rogal
Zjeb z kaszanką



Dołączył: 13 Mar 2006
Posty: 1745
Przeczytał: 0 tematów

Skąd: koło podbiegunowe

PostWysłany: Sob 23:04, 14 Paź 2006    Temat postu:

dobra, zarzucę lepszym testem :D
Kod:
1
1 2 -1 1 2 -1 0
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
mateo
pijak



Dołączył: 08 Mar 2006
Posty: 296
Przeczytał: 0 tematów

Skąd: Krk - Biały Prądnik

PostWysłany: Nie 0:59, 15 Paź 2006    Temat postu:

hansu napisał:
No to jest chyba raczej oczywiste ze dopisujemy do zaraz za otwierajacym - wtedy mamy pewnosc ze ten manewr w zaden sposob nie wplynie na reszte ciagu...


no dla mnie to takie oczywiste nie jest.. :P rownie dobra jest pozycja na samym koncu rozwazanego wyrazenia. mi naprzyklad bylo wygodniej robic tak ze dopisuje nawias zamykajacy na koniec rozwazanego podciagu bo potem jest mi takie cos latwiej wypisywac podczas rekonstrukcji wynikowego ciagu
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Roxel
pijak



Dołączył: 06 Kwi 2006
Posty: 249
Przeczytał: 0 tematów

Skąd: Pszczyna

PostWysłany: Nie 12:51, 15 Paź 2006    Temat postu:

Nie zapomnijcie sobie o zerze na koncu wypisywanego wyrazenia 8)
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Ethlinn
Szatanica



Dołączył: 13 Lis 2005
Posty: 424
Przeczytał: 0 tematów

Skąd: Katowice

PostWysłany: Pon 18:13, 16 Paź 2006    Temat postu:

grrrr... bombka przez wypisywanie nierekurencyjne... nie ma to jak skomplikowac sobie zycie w najprostszych przypadkach :/... ale grunt, że przeszło... i to jeszcze przed imprezą urodzinkową Czarnej :D czyli jednak się nie spóźnię :D. Wheeeeee ^__^
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Stasiu
zielony żul



Dołączył: 16 Lis 2005
Posty: 920
Przeczytał: 0 tematów

Skąd: krk

PostWysłany: Czw 0:25, 19 Paź 2006    Temat postu:

właśnie wziąłem się za czytanie tego zadania i czegoś nie czaję...

czy dla przykładowych danych:
Kod:
1 2 -1 1 -2 -1 0

poprawna jest odpowiedź:
Kod:
1 2 1 -1 1 -1 -2 -1 0
?
chyba jest poprawnym wyrażeniem nawiasowym... czy źle zrozumiałem treść zadania? :p

EDIT: ok, już widzę ;) czemu ja nie pomyślę 5 min dłużej, zanim zadam głupie pytanie :p
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
neino
pijak



Dołączył: 16 Wrz 2006
Posty: 49
Przeczytał: 0 tematów


PostWysłany: Sob 18:34, 21 Paź 2006    Temat postu:

Hej,

ktos ma pomysl...idee...dlaczego moze pojawiac sie ANS w 'idealnie dzialajacym programie' ? ;]
siedze nad kodem i nie wiem co jest nie tak... tablice sa na poczatku zerowane...wyniki wygladaja na poprawnie nawiasowane.

Pustoelementowe i jednoelementowe ciagi dzialaja mi poprawnie...no ale moze macie jakies swoje patologiczne przyklady ? (nawet na testerce mateo wszystko gra...)

dzieks
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Azhag
pijak



Dołączył: 16 Paź 2006
Posty: 33
Przeczytał: 0 tematów


PostWysłany: Pon 18:02, 23 Paź 2006    Temat postu:

Cos mi nie idzie to zadanie. czy ktos moglby troche opisac rozwiazywanie.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Sobek
pijak



Dołączył: 06 Lut 2006
Posty: 323
Przeczytał: 0 tematów

Skąd: Lubaczów / ds16

PostWysłany: Śro 2:34, 25 Paź 2006    Temat postu:

neino napisał:
Hej,

ktos ma pomysl...idee...dlaczego moze pojawiac sie ANS w 'idealnie dzialajacym programie' ? ;]
siedze nad kodem i nie wiem co jest nie tak... tablice sa na poczatku zerowane...wyniki wygladaja na poprawnie nawiasowane.

Pustoelementowe i jednoelementowe ciagi dzialaja mi poprawnie...no ale moze macie jakies swoje patologiczne przyklady ? (nawet na testerce mateo wszystko gra...)

dzieks


EDIT: Problem już przynajmniej w moim przypadku rozwiązany. Wysypałem się na operacjach wejścia/wyjścia...

Przy zmiennej typu short int gdy wczytywałem dane scanf(%d, zmienna) na testerce mateo wszystko pięknie śmigało, a wysypywało się tylko na athinie. Po zmianie z %d na %hd przeszło...
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
exeman
Mistrz grilla



Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów

Skąd: znienacka

PostWysłany: Czw 3:19, 26 Paź 2006    Temat postu:

Bylbym bardzo wdzieczny gdyby ktos podrzucil wypelniona macierz pierwsza i druga dla przykladowego testu.

Z gory dzieki wielkie.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Yoter
zielony żul



Dołączył: 19 Lis 2005
Posty: 1033
Przeczytał: 0 tematów

Skąd: Gościeradów

PostWysłany: Czw 3:49, 26 Paź 2006    Temat postu:

0 0 0 0 0 0 0
0 1 2 1 2 3 2
0 0 1 2 3 2 3
0 0 0 1 2 3 2
0 0 0 0 1 2 1
0 0 0 0 0 1 2
0 0 0 0 0 0 1

0 0 0 0 0 0 0
0 -1 -1 3 3 -1 3
0 0 -1 -1 -1 5 -1
0 0 0 0 0 0 0
0 0 0 0 -1 -1 6
0 0 0 0 0 0 0
0 0 0 0 0 0 0

pierwsza tablica: ilość nawiasów które trzeba dostawić żeby było ok
druga: -1 gdy nawias otwierający i trzeba dostawić
0 gdy nawias zamykający i trzeba dostawić
cokolwiek innego - indeks na którym znajduje się nawias zamykający do początkowego

jesli chcesz macierze z kolejnych iteracji pętli to pisz.

jak coś to pytać...
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
exeman
Mistrz grilla



Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów

Skąd: znienacka

PostWysłany: Czw 6:57, 26 Paź 2006    Temat postu:

Chcialem publicznie podziekowac dzisiejszej ekipie supportowej, ktora przez pol dnia wspiewala mnie podczas mojej desperacji.

Podziekowania dla:
Lukasza Medrali (za znalezienie chlernych bledow)
Chlebka (za pozyczenie notatek oraz wytlumaczenie cholernego algorytmu oraz znalezienie cholernych bledow)
Piotra Mierzejewskiego (za wytlumaczenie cholernego zadania)
Yotera (za macierze)
Robsona (za wytlumaczenie cholernego zadania)
Wojciecha Kordeusza (za wytlumaczenie cholernego zadania)
Jagma (za wytlumaczenie cholernego algorytmu)
oraz wszystkim ktorzy w wiekszy lub mniejszy sposob przyczynili sie do przepchania przeze mnie tego cholernego zadania.

Mam nadzieje, ze Athina szybko wybuchnie.


Ostatnio zmieniony przez exeman dnia Pią 7:03, 27 Paź 2006, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
cheater_
Orajt:)



Dołączył: 28 Lut 2006
Posty: 1022
Przeczytał: 0 tematów


PostWysłany: Czw 10:25, 26 Paź 2006    Temat postu:

Niektórzy mówią że to zadanie jest takie samo jak C, ale prawda jesta taka, że nienawidzę go bardziej niż "magic 7". po prostu.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
liffe
pijak



Dołączył: 16 Paź 2006
Posty: 78
Przeczytał: 0 tematów

Skąd: z daleka

PostWysłany: Czw 11:07, 26 Paź 2006    Temat postu:

---
Niektórzy to mają szczęście do nieszczęścia. Kiedy myślałem, że program dobrze chodzi, okazało się co innego. Mam problem z wypisywaniem (albo z tworzeniem tablicy albo z jej odczytaniem przy wypisywaniu). Moglby mi ktos pomoc to ulozyc? :cry:
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
exeman
Mistrz grilla



Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów

Skąd: znienacka

PostWysłany: Sob 20:02, 28 Paź 2006    Temat postu:

Co prawda juz spora wiekszosc zadanie zakodzila, ale moze nie wszyscy do konca rozumieja jak to zadanie dokladnie dziala, zatem wklejam lekkiego tutoriala, ktory powstal z tlumaczenia tego zadania na gg.

y = wiersz, x = kolmna
nawiasy[y] to rozpatrywany nawias,
tab[y, x] to dlugosc najkr. poprawnego ciagu nawiasow od y do x
Indeksujemy od zera.

wypelnilismy macierz dla ciagow jendoelementowych. (0, 0), (1, 1), (2, 2) , itd... na wartosc 2 - dlaczego? Poniwaz, w kazdym przypadku uzyskamy jakis jeden nawias, ktory trzeba domknac - zatem najkrotszy poprawny nadciag bedzie skladal sie z tego nawiasu oraz jego dopelnienia - razem 2 nawiasy. Przekatna drugiej macierzy ustawiamy na -1. -1 Bedzie oznaczac, ze dopisujemy nawias.

teraz bedziemy jechali pierwsza przekatna, czyli:
(0, 1), (1, 2), (2, 3), ..., (h, h + 1)
to sa takie ciagi podwojne
czyli to co poprzednio tylko dlugie na dwa
no i co z nimi robimy
rozpatrujemy nawiasy[wiersz], tak jak opisywalem wyzej, zatem dla pary (0, 1) patrzymy na pierwszy nawias z tej dwojki
z dwojki 0..1
sprawdzamy czy jest zamykajacy. jezeli jest zamykajacy, to wiemy, ze najkrotsza dlugosc uzupelnionego do poprawnego ciagu 0..1 bedzie:
to co dla elementu (1, 1), czyli dlugosc co wyliczalismy na poczatku na tej przekatnej, czyli dlugosc popranwgo ciagu powstalego z jednego elementu nawiasy[1] plus jeszcze 2. 2 sie bierze stad:
wiemy, ze pierwszy jest zamykajacy, czyli np. ")". O drugim nic nie wiemy, zatem mamy takie mozliwosci: ")(", "))", ")[", ")]" itp. Ale wiemy, ze one same sie nie domkna. Zawsze bedziemy musieli najpierw otworzyc tego pierwszego, a drugiego bedziemy musieli zamknac, poniewaz pierwszy jest zamykajacy, ale jest wczesniej.
Omawialismy zamykajacy
Mamy np. Pare "(]". Na poczatku przyjmujemy wariant pesymistyczny, czyli, ze nawiasy nie beda do siebie pasowac, czyli, ze trzeba bedzie tak jak poprzednio - dwa uzupelnic. Czyli do takiego: "()[]", w tym przypadku jest to optymalne i poprawne, ale wezmy sobie np. atki przyapdek:
Para "()". Robimy algorytmem. Ustawiamy najpierw najbardziej pesymistyczny wariant, czyli, ze trzeba bedzie dopelnic i jeden i drugi, czyli do takiego "()()", no ale widac, ze to bedzie zle, bo ciag juz od razu jest poprawny. Do tego wlasnie sluzy ta petla z minimami, zeby wykryc lepsze rozwiazanie, i dziala ona tak:
Jak mamy ciag "()", czyli np. pare (2, 3), czyli idac dalej nawiasy[2] = "(", nawiasy[3] = ")". No i teraz bedziemy szukac poczawszy od 2+1 do 3 w nawiasach, czy nie znajdziemy lepszego rozwiazania. 2 + 1, poniewaz pierwszy to wiemy, ze jest otwierajacy, a my wlasnie poszukujemy do niego zamkniecia. Jak dziala to wybieranie opisze teraz:
Szukamy pokolei, dla (x, y) od x+1..y w nawiasach takiego nawiasu, zeby nawias[k] (k to od x+1 do y) byl domknieciem pierwszego, czyli nawiasy[k] = -nawiasy[x] (nawiasy[x] to ten rozpatrywany otwierajacy) no i dodatkowym zalozeniem jest to, zeby wybrac takie rozwiazanie, aby bylo najlepsze i tutaj zaczynaja sie schody, bo trzeba policzyc taka sume:
Jak mamy z petli element w tablicy (x, y), (ten rozpatrywany otwierajacy to napisy[x]), to jedziemy k = x+1 .. y, wezmy zatem bardziej ogolny przyklad. x = 1, y = 4. Zatem mamy czteroelementowy ciag nawiasow od 1..4, oraz wiemy, ze pierwszy jest otwierajacy. Przyklad na ktorym bedziemy rozumowac to: "([))"
Wariant pesymistyczny, to jak juz pisalem jest 2 + tab[y + 1, x], czyli domkniecie pierwszego nawiasu - stad to 2, bo uzyskamy ciag () - plus to jaki dlugi jest ten ciag "[))", stad to tab[y + 1, x]
No to jak obliczylismy pesymistyczny wariant, to czas na sprawdzenie, czy nie ma lepszego. Aby lepiej liczyc rozpiszmy szybko ten przykladowy "([))" ile on by wynosil:
tab(0, 0) = "(" = 2
tab(1, 1) = "[" = 2
tab(2, 2) = ")" = 2
tab(3, 3) = ")" = 2

tab(0, 1) = "([" = 2 + tab(0 + 1, 1) = 4. Nie znajdziemy tutaj domykajacego, wiec mozemy pozostac na pesymiustycznym, ale za chwile go dokladnie omowimy.
tab(1, 2) = "[)" = 2 + tab(1 + 1, 2) = 4. Tak samo jak wyzej
tab(2, 3) = "))" = 2 + tab(2 + 1, 3) = 4.

tab(0, 2) = "([)" = ... Tutaj zaczynamy omawianie, bo pesymistyczny bedzie gorszy niz optymistyczny:

nawiasy[0] jest otwierajacy. Wyliczamy najpierw wariant pesymistyczny, czyli, ze tab(0, 2) = 2 + (0 + 1) + 2, czyli, ze jak mamy "([)", to wyjdzie nam "()" + dlugosc poprawnego zamkniecia "[)", a to wynosi 4, bo jest to tab(1, 2), ktore prowadzi do "[]()". Zatem pesymistycznie wyjdzie nam 6, a ciag postaci "()[]()", czyli beznadzieja, bo optymistycznie widac, ze z "([)" powinno byc np. "([])", Do tego wlasnie uzyjemy teraz wyszukiwanai wariantu optymistycznego, czyli jedziemy k, od y+1..x, czyli jak rozpatrujemy (0, 2) to analizujemy od (1..2) w poszukiwaniu naszego domykacza, dalej:

No i sprawdzamy nawiasy[1] = "[" wiec, nie pasuje, bo nie domyka "(", jedziemy dalej. nawiasy[2] = ")" domyka, czyli jest super. Sprawdzmy, czy oby napewno sie oplaca wybrac ten nawias, zeby to stwierdzic musimy sprawdzic, jakiej dlugosci bylby najkrotszy poprawny ciag, jesli skozystalibysmy z tego nawiasu. No wiec bedzie to tak: jak sparujemy te nawiasy ( oraz ) z konca, to dlugosc poprawnego bedzie dlugosc tych zewnetrznych (czyli 2) plus to pozostale, a pozostalo nam "[", ze srodka. Zatem bierzemy do sumy jego uzupelnienie, on sie uzupelni do "[]", wiemy to z wyliczania tab(1, 1) co podalem wczesniej. Czyli caly ciag wyjdzie nam dlugosci 6, bedzie on postaci "([])", jak przewidywalismy.

Ale wyprowadzmy wzor na ta dlugosc

Wezmy ogolny przypadek "(...)..." Czyli pierwszy sparowalismy z jakims w srodku naszego rozpatrywanego ciagu nawiasow od m..n - para (m, n). Zatem kosz to bedzie 2 (dlugosc tych nawiasow wyszcegolnionych w kropkach) oraz dlugosc pierwszych "..." - tych przed ")" oraz tych drugich "..." po ")".

Czyli wzor to bedzie: 2 + tab(m + 1, k - 1) + tab(k + 1, n).

... i tak wyliczamy te sumy i wybieramy takie k, ze bedzie ono dawalo najmniejsza sume (a ktora przed chwila wyprowadzilem). Pamietac trzeba, ze trzeba uwazac, aby suma byla tez mniejsza niz pesymistyczny wariant. Bo mozliwe, ze moze sie trafic, ze znajdziemy domykajacy nawias, ktory jednak da nam wieksza sume niz nasz wariant pesymistyczny, wtedy nie kozystamy z niego i pesymistycznie go domykamy mimo istnienia domykacza gdzies dalej. No ale jesli ten dobry domykajacy na k pozycji, to wtedy do drugiej macierzy wstawiamy wartosc "k". W kazdym innym przypadku wstawiamy -1. I to jest koniec zadania. Jeszcze tylko wypisywanie...

edit:

...Wypisywanie to prosta rekurencja. Jej prototyp to funkcja(int x, int y). Gdzie x to poczatek, a y to koniec ciagu. Startujemy zatem z calym ciagiem funkcja(0, dlugosc - 1).

Funkcja rekurencyjna dziala tak, ze jesli druga tablica zawiera pod wspolrzednymi (x, y) to wtedy wiemy, ze musimy dopisac nawias do a. Tlumaczylem przedtem, ze jesli domykamy ten pierwszy rozpatrywany, czyli nawiasy[wiersz] == nawiasy[x] w naszym przypadku (tu troche kolizja oznaczen, te x i y to nie lacza sie z tymi z poprzedniego tlumaczenia) i chcemy dopisac drugi nawias ktory by go domykal to wstaiwamy -1

Tak samo w wersji pesymisgtycznej przy otwierajacym nawiasie tez wstawialismy -1, bo nie znajdywalismy domykajacego gdzies tam dalej, wiec chcielismyy go wstawic.

Stad wniosek, ze jesli mamy -1 to wstpawiamy dodatkowo cos o przecienym znaku

w zaleznosci od znaku w nawiasie[k] to bedzie to albo przed tym albo po ze znakiem przeciwnym

Jesli tabela2[x, y] = -1 to dopisujemy. Pytanie - co? Zamykajacy czy otwierajacy. No jesli nawiasy[x] > 0 no to znaczy, ze musimy dopisac do niego (ktory jest otwierajacy) jego domkniecie. Wiec wypisujemy najpierw otwarcie, a potem domkniecie: printf("%d %d", mem[x], -mem[x]).

A jesli mem[x] < 0, to najpierw wypisujemy -mem[x], a potem mem[x]

No ale wtedy dopiero mamy zalatwiony pierwszy rozpatrywany, czyli nawiasy[x], a mamy jeszcze od x+1..y, z ktorymi nic nie zrobilismy, ale do tego odpalamy poprostu dalej rekurencje, czyli wykonujemy potem funkcja(x + 1, y);

No a jesli ta tablica2[x] jest rozna od -1, to wiemy, ze:
1. Nawias nawiasy[x] jest otwierajacy
2. Gdzies pomiedzy x, a y jest jego domkniecie
3. Domkniecie jest na pozycji tablica2[x], ktora wlasnie zbadalismy, ze jest rozna od -1
Zatem co musimy zrobic. Wypisujemy to otwarcie, czyli to napisy[x], potem odpalamy rekurencje do tych trzech kropek, pozniej wypisujemy domkniecie z pozycji napisy[k], a potem jedziemy rekurencje dla drugich trzech kropek -> (...)...

Bedzie to zatem dzialac tak:
1. wypisz napisy[x]
2. (x+1, tablica2[x][y] - 1), poniewaz nie chcemy aby nasz domykajacy nawias wpadal w kolejna rekurencje, tylko same kropki
3. wypisz -napisy[x] (lub napisy[tablica[x][y]], zeby bylo bardziej intuicyjnie, ale to na to samo wychodzi)
4. funkcja(tablica[x][y] + 1, y)

Na koniec nalezy pamitac, aby na poczatek funkcji rekurencyjnej dac warunek na jej przerwanie:
if (x > y) return 0;
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 i 3 semestr - Algorytmy i Struktury Danych Wszystkie czasy w strefie EET (Europa)
Idź do strony 1, 2  Następny
Strona 1 z 2

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
Regulamin