NXN配列の列、列、およびサブスクエアを数学的に決定する方法Nは完璧な正方形ですか?
-
29-09-2020 - |
解決
一次元セルを $ c_1、c_2、\ cdots、c_ {n ^ 2} $ 。
左上のセルが $(1,1)$ 、すなわち最初の行と最初の列にあると仮定する。右上のセルが $(1、n)$ 、つまり最初の行と $ n $ < /スパン>列。その後、 $ i $ -thセル、 $ c_i $ は $(I / N + 1、I \%N + 1)$ 。ここでspan class="math-container"> $ i / n $ は、 integer division と $ i \%n $ は、人気のあるプログラミング言語でのモジュロ操作です。たとえば、 $ n= 9 $ をletします。その後、 $ 42 $ -thセル、 $ c_ {42} $ は $(42/9 + 1,42 \%9 + 1)=(5,7)$ 。
副文字がセルと同じ順序で並んでいるとしますので、サブソア $ s1、s2、\ cdots、sn $ を持ちます。各サブキアを一種の「大セル」として検討してください。そのため、亜種の座標を順にするようにします。
$ c_i $ は、 $(i / n + 1)$ ~thです。サブカレ、すなわちSUBSQUARE $ s(I / N + 1)$ 。たとえば、 $ c_ {37} $ は $ 5 $ -th副quare、すなわちsubsquare <です。 SPAN CLASS="Math-Container"> $ S5 $ 。以前と同じ状況にありますが、 $(i / n + 1)$ -th "大セル"と $ \ sqrt n \ times \ sqrt n $ "大セル "。そのため、 $(i / n + 1)$ x $((i / n)にあることがわかります。 +1)/ \ sqrt n + 1、(I / N + 1)\%\ sqrt n + 1)$ 、サブソレの座標を使用します。
$(j、k)$ で副難を横断したいとします( $(j、k) $ はサブソアの座標にあります)。
- そのサブキアの最初のセル(左上のセル)は $ c _ {(j-1)\ sqrt n \ cdot n +(k-1)\ sqrt nです。 +1} $
- そのサブキアの2行目の最初のセルは $ c _ {(j-1)\ sqrt n \ cdot n +(k-1)\ sqrt n + 1 +です。 $
- $ \ cdots $
- その副難の最後の行の最初のセルは $ c _ {(j-1)\ sqrt n \ cdot n +(k-1)\ sqrt n + 1 +です。 (\ sqrt n -1)n} $
だから我々は以下の疑似コードによってその副難ですべてのセルを通過することができます。
$ \ quad $ for の場合$ 1,2、\ cdots、\ sqrt n $
$ \ quad \ quad $ for $列$ in $ 1 、2、\ Cdots、\ SQRT N $
$ \ quad \ quad \ quad $ $ row $ -th列と $列$ $(j、k)$ の副列。 $ c _ {(j-1)\ sqrt n \ cdot n +(k-1)\ sqrt n +(行-1)n +列} $
注意 " $ row $ 列と $ column $ 列"は参照していますその副文区のセル。
例えば、次の順序でサブカレ(2,3)の細胞を横断します。
- セルの最初の行で、 $ c_ {34} $ 、 $ c_ {35} $ 、 $ c_ {36} $ 、
- セルの2行目、 $ c_ {43} $ 、 $ c_ {44} $ 、 $ c_ {45} $ 、
- セルの3行目、 $ c_ {52} $ 、 $ c_ {53} $ 、 $ c_ {54} $ 。