logo

Табела збирних површина – сумирање подматрице

За матрицу величине М к Н постоји велики број упита за проналажење сума подматрице. Уноси у упите су леви горњи и десни доњи индекси подматрице чији збир треба да се сазна. 

Како претходно обрадити матрицу тако да упити за суму подматрице могу бити изведени за О(1) времена. 

Пример:



  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)

Наивни алгоритам:  

Можемо запетљати све упите и израчунати сваки упит у О (к*(Н*М)) најгорем случају који је превелик за велики опсег бројева.

// 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) 

Оптимизовано решење: 

Табела збирних површина може смањити ову врсту упита на време препроцесирања од О(М*Н) и сваки упит ће се извршити у О(1). Табела сумираних површина је структура података и алгоритам за брзо и ефикасно генерисање збира вредности у правоугаоном подскупу мреже. 

Вредност у било којој тачки (к и) у табели са сумираним површинама је само збир свих вредности изнад и лево од (к и) укључујући:

  ' title= 

Оптимизовано решење је имплементирано у наставку.

  Имплементација оптимизованог приступа  

Креирај квиз