optymalizacja pamięciowa

0

Witam
Mam następujący programik i mam zaproponować optymalizację pamięciową
Nie jest to żadne zadanie do zaliczenia, jest to jedno z wielu przykładowych zadań z optymalizacji, które rozwiązuje żeby przygotować się do kolokwium. Będe wdzięczna za wszystkie sugestie.

#include <cstdlib>
#include <iostream>

using namespace std;

double foo(double* tab, int l, int r)
{
       double wynik;
       if (l >= r)
          return tab[r];
       wynik = foo(tab,0,((l+r)/2)) + foo(tab,((l+r)/2)+1, r);
       return wynik;
}

int main(int argc, char *argv[])
{
    const int N = 50;
    double tablica[N];
  
    double rezultat = foo(tablica,0,N-1);
    cout<<rezultat;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}

Pozdrawiam

0

A rozpisz sobie kilka kroków na kartce? Gdyby program był sensownie napisany to rzucałoby się w oczy co tak naprawdę ten kod robi, ale używa wartości osobliwych więc najwłaściwszą optymalizacją jest:

int main() {
    cout << "cholera wie ile..." << endl;
}
0

Spróbuj zapisać rekurencyjne wywołania za pomocą iteracji ( czyli pozbyć się funkcji rekurencyjnych gdyż nie są one zbyt optymalne )

0

Piękna funkcja z maksymalną głębokością lg(wielkość tablicy), więc bardzo małą... gdyby tak każde wywołanie funkcji wykonywało się na innym rdzeniu jeszcze... :)
No ale na studiach doktorzy to nudziarze i buraki :( i wolą zaoszczedzić lg(n)-1 ramek na stosie zamiast mieć ponętny kod
więc prawidłowym rozwiązaniem jest

#include <iostream>
#include <numeric>

int main() {
  const int N = 50;
  const double tablica[N]; //tutaj chyba miały być wpisane dane co?
  std::cout << std::accumulate(tablica, tablica+N, 0);
  system("PAUSE");
}
0
programista87 napisał(a)

...
doktorzy to nudziarze i buraki
...
więc prawidłowym rozwiązaniem jest
...
Może i jest, ale jakiego problemu?

tu mamy jakieś dziwne sumowanie, bo ja wiem? jakaś ważona średnia?
CiekawymDla ustalonego N, mamy krotność komórki
N |

2 [1, 1]
3 [1, 1, 1]
4 [2, 2, 1, 1]
5 [3, 3, 2, 1, 1]
6 [4, 4, 3, 1, 1, 1]
7 [6, 6, 4, 2, 1, 1, 1]
8 [12, 12, 8, 4, 2, 2, 1, 1]
9 [21, 21, 14, 7, 4, 3, 2, 1, 1]
10 [36, 36, 24, 12, 7, 5, 3, 2, 1, 1]
11 [61, 61, 41, 20, 12, 9, 5, 3, 2, 1, 1]
12 [86, 86, 58, 28, 17, 13, 7, 4, 3, 1, 1, 1]
13 [128, 128, 86, 42, 25, 19, 11, 6, 4, 2, 1, 1, 1]
14 [195, 195, 131, 64, 38, 29, 17, 9, 6, 3, 2, 1, 1, 1]
15 [293, 293, 197, 96, 57, 44, 25, 14, 9, 4, 3, 2, 1, 1, 1]
16 [586, 586, 394, 192, 114, 88, 50, 28, 18, 8, 6, 4, 2, 2, 1, 1]
17 [1028, 1028, 691, 337, 200, 154, 88, 49, 32, 14, 10, 7, 4, 3, 2, 1, 1]

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