Come determinare matematicamente la riga, la colonna e la sotto-quadrata della cella nell'array NXN in cui n è un quadrato perfetto?

cs.stackexchange https://cs.stackexchange.com/questions/126050

  •  29-09-2020
  •  | 
  •  

Domanda

Data una serie di una dimensione di dimensioni NXN, dove n è un quadrato perfetto

 PIC 1

Come può determinare matematicamente la riga, la colonna e / o la sottoschena in cui si risiede la cella?Inoltre, c'è un modo matematico per attraversare la sottoosquare?

 Inserire l'immagine Descrizione qui

È stato utile?

Soluzione

Lasciare che le celle one-dimensionali siano $ c_1, c_2, \ cdots, c_ {n ^ 2} $ .

Assumere la cella in alto a sinistra è a $ (1,1) $ , I.e., la prima riga e la prima colonna. Supponiamo che la cella in alto a destra sia a $ (1, n) $ , cioè la prima riga e la $ N $ < / Span> -th colonna. Quindi la $ i $ -th cell, $ c_i $ è a $ (I / N + 1, I \% N +1) $ . Qui $ I / N $ è la divisione integer e $ i \% n $ è l'operazione del modulo in qualsiasi linguaggio di programmazione popolare. Ad esempio, let $ n= 9 $ . Quindi $ 42 $ -th cell, $ c_ {42} $ è a $ (42/9 + 1, 42 \% 9 + 1)= (5, 7) $ .

Supponiamo che i sottotitoli siano allineati nello stesso ordine delle cellule, in modo che abbiamo sottosquadare $ s1, s2, \ cdots, sn $ . Considera ogni sottoosquadare come una sorta di "cella grande". In modo che avremmo le seguenti coordinate per subsquare.

Inserire l'immagine Descrizione qui

Nota che $ c_i $ appartiene alla $ (I / N + 1) $ -h Subsquare, IE Subsquare $ s (I / N + 1) $ . Ad esempio, $ c_ {37} $ appartiene alla $ 5 $ -th sottoosquadra, cioè, subsquare < Span Class="Math-Container"> $ S5 $ . Siamo nella stessa situazione di prima, ma con la $ (I / N + 1) $ -th "grande cella" e una classe $ \ sqrt n \ volte \ sqrt n $ di" grandi celle ". Allo stesso modo, vediamo che la $ (I / N + 1) $ -th subsquare è a $ ((I / N +1) / \ SQRT N + 1, (I / N + 1) \% \ SQRT N + 1) $ , utilizzando le coordinate per subquares.

Supponiamo che vogliamo attraversare la sottoosquadare a $ (j, k) $ (dove $ (j, k) $ è nelle coordinate per subquares).

    .
  • La prima cella (la cella in alto a sinistra) di quella sottoschetta è $ c _ {(j-1) \ sqrt n \ cdot n + (k-1) \ sqrt n +1} $
  • La prima cella della seconda riga di quella sottoschetta è $ c _ {(j-1) \ sqrt n \ cdot n + (k-1) \ sqrt n +1 + n} $
  • $ \ cdots $
  • La prima cella dell'ultima riga di quella sottoschetta è $ c _ {(j-1) \ sqrt n \ cdot n + (k-1) \ sqrt n + 1 + (\ SQRT N -1) N} $

Così possiamo attraversare tutte le celle in quella sottosolezzatore dalla seguente pseudocodice.

$ \ quad $ per $ riga $ in $ 1, 2, \ CDOT, \ SQRT N $
$ \ quad \ quad $ per $ colonna $ in $ 1 , 2, \ cdots, \ sqrt n $

$ \ quad \ quad \ quads $ Visita la cella a $ riga $ -h riga e $ colonna $ -hin colonna della sottoosquare a $ (j, k) $ , che è $ c _ {(j-1) \ sqrt n \ clot n + (k-1) \ sqrt n + (riga -1) n + colonna} $

Nota " $ riga $ -th riga e $ colonna $ -th colonna" si riferiscono a cellule in quella subsquare.

Ad esempio, attraverseremo le cellule in subsquare (2,3) nel seguente ordine.

    .
  • celle nella sua prima riga, $ c_ {34} $ , $ c_ {35} $ , $ c_ {36} $ ,
  • celle nella sua seconda riga, $ c_ {43} $ , $ c_ {44} $ , $ c_ {45} $ ,
  • celle nella sua terza fila, $ c_ {52} $ , $ c_ {53} $ , $ c_ {54} $ .
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top