Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Zadanie "Taśma"

Ostatnio zmodyfikowano 2014-12-12 19:03
Autor Wiadomość
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.
P-122713
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?
P-122714
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


@@ jak się cytuje?
[cytat] ... [/cytat]
» KursyKurs STC kurs
P-122715
akwes
» 2014-12-11 20:46:00
@NopeDotAvi,

» KursyKurs STC kurs


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.
P-122716
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. :
P-122717
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.
P-122732
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).
P-122734
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 
 
P-122736
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona