Optymalizacja czasowa

0

Witam.

Mam mały problem ze zoptymalizowaniem takiej oto funkcji :

int sumup(int **tab, int max)
{
	int sum = 0;
	int i=0, j=0;               // inicjalizacja zmiennych


	for(i = 0; i < max; i++)
	{
        for(j = 0; j < max; j++)
        {
            if(i + j > max)
                sum = sum + tab[i][j];
        }
    }

    return sum;
}

Jakiegoś sensownego powodu optymalizacji nie ma, ale muszę ją wykonać.

Trochę nad tym siedzę i nie mogę sobie poradzić.

Dla przykładu, dla max = 3 przejścia pętli wyglądają tak :

// pętla zewnętrzna 0
tab[0][0]
tab[0][1]
tab[0][2]
tab[0][3]

// pętla zewnętrzna 1
tab[1][0]
tab[1][1]
tab[1][2]
tab[1][3]

// pętla zewnętrzna 2
tab[2][0]
tab[2][1]
tab[2][2]
tab[2][3]

Z tego co mi się wydaje, funkcja szuka skrajnych elementów tablicy dla jakiejś wartości max i sumuje je.
Elementów spełniających warunek if(i + j > max) jest zawsze więcej.

Czy aby zoptymalizować tą funkcję należy przeszukiwać tablicę "od tyłu" ?

Bardzo proszę o jakieś wskazówki.

0

Nie, wystarczy indeksy uzależnić od max.

for (i = 2; i < max; i++)
  for (j = max-i+1; j < max; j++)
    sum += tab[i][j];

edytka:

i startuje od 2, ponieważ jeśli i i j są zawsze mniejsze od max to dla dowolnego równego 0 (sorki 0 lub 1) warunek i+j>max nigdy nie będzie spełniony.
No i i i j nie musisz inicjować na początku funkcji

0

Faktycznie :-)

Dziękuję za pomoc.

Pozdrawiam.

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