ďťż

Ładny brzuch

mam pytanie co do działania niektórych operacji. Do tej pory w szkole pacjent od informatyki mówił że przy szacowaniu szybkości to liczy się ile porównań wykona algorytm w najgorszym wypadku, że działania przypisania i arytmetyczne pomija się bo są one krótkie w porównaniu z porównywaniem:). A ostatnio dowiedziałem się że dodawanie, odejmowanie itp. jest jednak porównywalne z "if(...)"? mam takie pytania:
-co z else? czy instrukcja if+else wykonuje się tak samo jak tylko if czy tak naprawdę są to dwa porównania.np: czy
if(a<B)
{...}
else
{...}
to tak naprawdę jest:
if(a<B)
{...}
if(a>B)
{...}
2), jak liczyć dodawanie, odejmowanie itd. ?
Jak ktoś wie to niech napisze lub poda link gdzie poczytac można. Dzięki z góry.




-co z else? czy instrukcja if+else wykonuje się tak samo jak tylko if czy tak naprawdę są to dwa porównania.np: czy
if(a<B)
{...}
else
{...}
to tak naprawdę jest:
if(a<B)
{...}
if(a>B)
{...}

Zacznijmy od tego że w praktyce nie ma czegoś takiego jak sam if, else występuje zawsze tylko że czasem jest po prostu pusty dlatego jest pomijany i kompilator doskonale to rozumie. W pierwszym kodzie który napisałeś porównanie jest tylko jedno, jest nim warunek przy if, to co znajduje się po elsie zachodzi gdy warunek przy if nie jest spełniony. Drugi kod wydaje się niepoprawny pod względem składni, zamiast drugiego ifa powinien być else if i przydatne jest to tylko w sytuacji gdy konieczne jest zastosowanie 3 oddzielnych akcji dla 3 przypadków. Kod wyglądałby następująco:
if (a<B){...}
else if(a>B){...}
else {...} // gdy a=b

2), jak liczyć dodawanie, odejmowanie itd. ?
Jak ktoś wie to niech napisze lub poda link gdzie poczytac można. Dzięki z góry.

czyli rozumiem że instrukcja if(...){...} wykona się tak samo szybko jak bym napisał coś takiego: if(...){...}else{...}, to że po if() istnieje else() nie opóźnia nic?

Ale zauwaz, ze podczas szacowania zlozonosci NIE OBCHODZI cie, czy dany if wykona sie zalozmy w 2 jednostki czasu czy w 3. Obchodzi cie ilosc "operacji" w zaleznosci od wielkosci danych wejsciowych. Przypuscmy, ze masz takie cos:

for (i=0; i<N; ++i) {      for (j=0; j<N; ++j)      {           a += b;      } }
Zlozonosc to O(n^2). A teraz:
for (i=0; i<N; ++i) {      for (j=0; j<N; ++j)      {           a += b;           c += d;           a *= c;           d /= a + b+ c;      } }
Zlozonosc jest taka sama (oczywiscie o ile dzialania wykonywane na tamtych liczbach zajmuja czas niezalezny od N), tylko stala jest troche wieksza, ale nadal jest to O(n^2).




czyli rozumiem że instrukcja if(...){...} wykona się tak samo szybko jak bym napisał coś takiego: if(...){...}else{...}, to że po if() istnieje else() nie opóźnia nic?

to wiem że liczyły się operacje między warunkami. ale właśnie chodziło mi o to czy if{} i else sa nierozłączne ze sobą, teraz już wiem że tak. dzięki.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •