Qual è il modo più pratico per memorizzare le differenze nei valori delle matrici adiacenti?

2

Sto implementando un determinato algoritmo che funziona in questo modo:

  1. Crea un contorno chiuso (elenco) di elementi in una matrice, dove chiuso significa che l'ultimo elemento è adiacente (per riga, colonna) al primo.
  2. Peso (moltiplica) ciascuno degli elementi indirizzati dal contorno da uno scalare associato alla posizione dell'elemento nella matrice (cioè, cercare in una matrice (sparsa) di dimensione uguale), tranne
    1. Se l'elemento successivo nel contorno ha un peso diverso, reimposta entrambi gli elementi con una (media) riduzione del peso dei due elementi.
  3. Somma gli elementi ponderati.

Se voglio mantenere questo generale, vedo due modi per farlo:

  1. Mentre creo il contorno, controlla se l'elemento successivo nel contorno ha un peso associato diverso e contrassegnalo in un altro elenco / dettato per l'elaborazione in 2.1 o
  2. Calcola la prima differenza in tutte e quattro le direzioni (caso matrice 2D) per l'intera matrice, e cerca la differenza in base alla direzione del contorno (in termini di elementi) in quel punto.

Alcuni problemi con l'approccio (1) sono; che ogni passo nella costruzione del contorno deve guardare uno dei valori usati nel passaggio successivo, e mescola anche le responsabilità (è possibile ovviare con passaggi multipli di iterazione nel codice). Calcola solo i dati necessari per il lavoro.

D'altra parte, l'approccio (2) crea quattro copie della matrice, che potrebbe essere enorme. Però è molto più facile da programmare.

Sono propenso all'approccio (1), ma vorrei sapere se (2) potrebbe effettivamente essere più efficiente, o se c'è un altro approccio che non ho considerato.

    
posta bright-star 15.11.2016 - 21:27
fonte

0 risposte

Leggi altre domande sui tag