Rashmistrz Temat założony przez niniejszego użytkownika |
» 2014-12-11 20:27:42 goto jest dobrym rozwiązaniem | Nie będzie jakiś problemów z powodu jego użycia?to jest złożoność a nie wzór na ilość wykonań. |
Mój błąd... Mówiąc prościej: kiedy nie są sobie równe i tak wykona dużo. |
Wiem tylko że istnieje lepsze rozwiązanie. Na razie spróbuję się jakoś z tym problemem bardziej zapoznać. // ,ale i tak oczekuję na wskazówki do dobrego rozwiązania. |
|
NopeDotAvi |
» 2014-12-11 20:37:23 goto jest dobrym rozwiązaniem Oczywiście, że nie jest. Pętlą sterujemy przez continue , break , return oraz dobrze skonstruowany warunek pętli.
|
w takiej sytuacji musisz w 2 miejscach walnąć break, a gdy masz warunek w pętli to nawet więcej. @@ jak się cytuje? |
|
Rashmistrz Temat założony przez niniejszego użytkownika |
» 2014-12-11 20:42:45 w takiej sytuacji musisz w 2 miejscach walnąć break, a gdy masz warunek w pętli to nawet więcej. |
To strasznie dużo porównań dodatkowych porównań będzie. ;_; Zostawiam to tak jak jest z tą funkcją. :C [cytat] ... [/cytat] Kurs STC |
|
akwes |
» 2014-12-11 20:46:00 @NopeDotAvi, Kurs STC w takiej sytuacji musisz w 2 miejscach walnąć break, a gdy masz warunek w pętli to nawet więcej.
|
W takiej wersji możesz wydzielić jedną pętlę do osobnej funkcji zwiększając poziom kohezji, zmniejszając ilość zależności i zwiększając abstrakcję poza tym nie musisz szukać żadnych etykiet goto w kodzie, aby sprawdzić przepływ sterowania. goto jest użyteczne wtedy kiedy nie da się nadać naturalnego i spokojnego przebiegu w pętlach lub gdzie jest to bardzo trudne, i tylko wtedy gdy potrafi się uargumentować jego użycie. Tutaj nie ma takiej potrzeby. Zwłaszcza, że temat wychodzenia z zagnieżdżonych pętli jest tutaj offtopem, bo nie to jest problemem w algorytmie autora tematu. |
|
Rashmistrz Temat założony przez niniejszego użytkownika |
» 2014-12-11 20:52:39 temat wychodzenia z zagnieżdżonych pętli jest tutaj offtopem, bo nie to jest problemem w algorytmie autora tematu. |
Ja zadałem pytanie na temat tego... Moje pytanie jest takie: Jak przy zagnieżdżonych pętlach wyjść z nich wszystkich na raz? |
A pytaniem przewodnim jest: Jak ten program algorytm można zoptymalizować lub zmienić? |
więc to nie jest offtop. : |
|
akwes |
» 2014-12-12 08:43:02 @Rashmistrz, Ja zadałem pytanie na temat tego... |
Zdałeś, jednocześnie wychodząc z obu pętli przez return . Moje pytanie jest takie: Jak przy zagnieżdżonych pętlach wyjść z nich wszystkich na raz?
|
I jest to offtop. Bo w temacie zajmujemy się jednym zagadnieniem, a nie wszystkimi problemami jakie autor ma. Problem per temat a nie worek problemów autora w temacie ;) Jak ten program algorytm można zoptymalizować lub zmienić?
|
Dostałeś odpowiedź i wciąż popełniasz podstawowy błąd. Nic nie da Ci optymalizowanie algorytmu O(N^2) bo złożoność dalej pozostanie taka sama. Jedynym wyjściem jest zmiana algorytmu na inny. Nawet jeżeli kod przejdzie test, to i tak będzie niepoprawny. Nie ma najmniejszego powodu optymalizować pojedynczych wywołań, jeżeli ma się zły algorytm. |
|
docentpp |
» 2014-12-12 10:20:34 Moje pytanie jest takie: Jak przy zagnieżdżonych pętlach wyjść z nich wszystkich na raz?
|
Należy CAŁKOWICIE zmienić strukturę programu. ( aby wyeliminować wielokrotnie zagłębione pętle). |
|
darko202 |
» 2014-12-12 11:01:05 Patrzę i na kod program i jakoś nie mogę wyjść ze zdziwienia, że daje dobre wyniki. W zadaniu polecenie brzmi "znaleźć w tym ciągu dwie najdalej od siebie położone różne liczby". przykład Dla danych wejściowych: 8 2 5 4 7 3 4 5 2 poprawnym wynikiem jest: 6 Najdalszymi różnymi liczbami w sekwencji są m.in. pierwsza (czyli 2) i siódma (czyli 5).
dla mnie 2 jest na 1 i 8 pozycji czyli zawsze obok 5 i wynikiem dla tej pary (1,5) powinna być odległość 1 a najdalszymi liczbami są pary (2,7) (3,2) i odległość wynosi 3 co do pytania o inny algorytm to ja zabrałbym się za to jakoś tak dane są w jakimś kontenerze K (liczone od 1 do N)
odleglosc = 0 liczba1 = K[1] // pierwszy element szukanej pary pozycja1 = 1 //pozycja liczby 1 liczba2 = k[1] // drugi elemet szukanej pary i = pozycja1+1 // iteracja
niekończ = true
while ( niekończ) { if ( liczba1 == k[i]) { // to znaczy są równe tzn najdalszą parą z liczba1 jest liczba położona w połowie odległości tzn liczba2 = K[pozycja1 + odleglosc/2]
zapamiętujemy najbardziej odległą parę i ich odległość jeśli jest dłuższa od poprzedniej pary zmieniamy liczbe2 zmieniamy pozycja1++,liczba1 = K[pozycja1] i = pozycja1
jeśli przekroczymy jakąś pozycją w K to nie znajdziemy bardziej odległej pary -- może sprawdzenie ( N - pozycja1 < odległość ) niekoncz = false;
} i++; if ( i > N) niekoncz = false; }
taki zarys |
|
1 « 2 » 3 |