łączenie dwóch pętli

0

Czy zastąpienie dwóch pętli mających te same warunki iterowania faktycznie przyspiesza działanie programu?
Dlaczego tak jest? Czy liczba wykonywanych operacji nie będzie taka sama?

Na przykład

for (int i=0; i<N; i++)
    cin >> a[i];

for (int i=0; i<N; i++)
    cout << a[i];

N+N operacji

for (int i=0; i<N; i++)
    cin >> a[i];
    cout << a[i];

N*2 operacji?

0

A jaka jest różnica pomiędzy n+n i n*2 ?

0

Po pierwsze, w drugi przypadku ilość operacji N+1 bo cout << a[i]; jest poza pętlą.
Po drugie, jak już będzie w pętle to oszczędzasz właśnie na: for (int i=0; i<N; i++) {} co może okazać się nieistotnym.

0

Po trzecie - sprawdź. Zmierz czas kilkuset milionów iteracji (konkretnie tylu iteracji, żeby trwało to przynajmniej kilkaset milisekund).

0

W drugiej pętli zapomniałem klamerek.
Nie wiem jak zmierzyć czas, dlatego pytam o to doświadczone osoby. Czy faktycznie można zaoszczędzić czas robiąc to w jednej pętli?

0

Dla ciekawych:

int main()
{
  int a=10000;
  int tab[10];
  int b=a;
  while(b--)
    {
      for(int q=0;q!=a;q++) tab[0]++;
      for(int q=0;q!=a;q++) tab[1]++;
      for(int q=0;q!=a;q++) tab[2]++;
      for(int q=0;q!=a;q++) tab[3]++;
      for(int q=0;q!=a;q++) tab[4]++;
      for(int q=0;q!=a;q++) tab[5]++;
      for(int q=0;q!=a;q++) tab[6]++;
      for(int q=0;q!=a;q++) tab[7]++;
      for(int q=0;q!=a;q++) tab[8]++;
      for(int q=0;q!=a;q++) tab[9]++;
      for(short int q=0;q!=10;q++) tab[q]=0;
    }
  return 0;
}

Czas wykonania: 4,501s

int main()
{
  int a=10000;
  int tab[10];
  int b=a;
  while(b--)
    {
      for(int q=0;q!=a;q++)
        for(short int oue=0;oue!=10;oue++)
          tab[oue]++;
      for(short int q=0;q!=10;q++) tab[q]=0;
    }
  return 0;
}

Czas wykonania: 5,101s

int main()
{
  int a=10000;
  int tab[10];
  int b=a;
  while(b--)
    {
      for(int q=0;q!=a;q++)
        {
          tab[0]++;
          tab[1]++;
          tab[2]++;
          tab[3]++;
          tab[4]++;
          tab[5]++;
          tab[6]++;
          tab[7]++;
          tab[8]++;
          tab[9]++;
        }
      for(short int q=0;q!=10;q++) tab[q]=0;
    }
  return 0;
}

Czas wykonania: 1,801s

1 użytkowników online, w tym zalogowanych: 0, gości: 1