logo

Tabela seštete površine – seštevek podmatrike

Glede na matriko velikosti M x N obstaja veliko število poizvedb za iskanje vsot podmatrik. Vhodi v poizvedbe so levi zgornji in desni spodnji indeksi podmatrike, katere vsoto je treba ugotoviti. 

Kako predhodno obdelati matriko, tako da se lahko poizvedbe za vsoto podmatrike izvedejo v O(1) času. 

primer:



  tli :   Row number of top left of query submatrix   tlj :   Column number of top left of query submatrix   rbi :   Row number of bottom right of query submatrix   rbj :   Column number of bottom right of query submatrix Input: mat[M][N] = {{1 2 3 4 6} {5 3 8 1 2} {4 6 7 5 5} {2 4 8 9 4} }; Query1: tli = 0 tlj = 0 rbi = 1 rbj = 1 Query2: tli = 2 tlj = 2 rbi = 3 rbj = 4 Query3: tli = 1 tlj = 2 rbi = 3 rbj = 3; Output: Query1: 11 // Sum between (0 0) and (1 1) Query2: 38 // Sum between (2 2) and (3 4) Query3: 38 // Sum between (1 2) and (3 3)

Naivni algoritem:  

Vse poizvedbe lahko zankamo in vsako poizvedbo izračunamo v O (q*(N*M)) najslabšem primeru, ki je prevelik za velik obseg števil.

// Pseudo code of Naive algorithm. Arr[][] = input_matrix For each query: Input tli tlj rbi rbj sum = 0 for i from tli to tbi (inclusive): for j from tlj to rbj(inclusive): sum += Arr[i][j] print(sum) 

Optimizirana rešitev: 

Tabela seštevnih površin lahko to vrsto poizvedbe zmanjša na čas predprocesiranja O(M*N) in vsaka poizvedba se bo izvedla v O(1). Tabela seštevanih površin je podatkovna struktura in algoritem za hitro in učinkovito generiranje vsote vrednosti v pravokotni podmnožici mreže. 

Vrednost na kateri koli točki (x y) v tabeli seštetega območja je samo vsota vseh vrednosti zgoraj in levo od vključno (x y):

  ' title= 

Optimizirana rešitev je implementirana v spodnji objavi.

  Implementacija optimiziranega pristopa  

Ustvari kviz