φ20.001 DS&A演算子と配列


導入


私は、Go、アルゴリズムとDSを始めるために予定を置きました、また、仕事準備(そして、多分競争力がありませんでしたが)、クリーンなコーディングシリーズ、Linux(最初に私はUnixデザイン本から始めます)で進歩しました.
そして、私がすでに出発するDevops旅行は、あらゆる2日新しいチュートリアルです.
ケースでは、バナーでは、この男は、アルゴリズムの概念のKhwarizmiの人である疑問に思います.
今後はもっと高度なシリーズをスタートさせてください.

Cの演算子



例えば、x = 7 + 3 * 2 ;ここで、Xは演算子*が+より高い優先順位を持っているので、13ではなく、13に割り当てられます.したがって、最初に3 * 2で乗算された後、7に加算されます.
ここで、最も高い優先順位を持つ演算子がテーブルの先頭に表示されます.式のうち、上位の演算子は最初に評価されます.source

アレイ


一次元配列


配列では、配列A [ i ]で配列をランダムにアクセスできます

2つの情報1が我々のタイプのサイズと配列のベースアドレスであるということを知っている必要がある[ i ]のadressを計算するために、それらはコンパイラ仕事でありません、しかし、彼らは知っていてよいです.
私の例のベースアドレスには、i [ i ] = i * sizeof(要素)+ベースアドレス/アドレスが100です
i [ i ] = ( i - 1 )* sizeof ( element )+ baseRound address/i - 1のアドレスを1から0から始めた場合
sizeof ( element )は整数の場合、4バイト( 4 * 8 = 32ビット)である

二次元アレイ


2次元配列をどのように記憶することができるかを理解できれば、より良いプログラムを書くことができます
3行と4列の2 D配列のこの例を取り上げましょう
  A[3][4] === A: 3x4
        0  1  2  3
     0 [00,01,02,03]
     1 [10,11,12,13]
     2 [20,21,22,23]
コンパイラが列で行をリンクするためにリンクリストを使用する必要があるなら、複雑になるでしょう
したがって、コンパイラは1次元配列に変換します.
1行目
変換後、配列は次のようになります
{ 00 , 01 , 02 , 03 , 10 , 11 , 12 , 13 , 20 , 21 , 22 , 23 }
私が要素に達する必要があるならば
address of A[i][j] = (((i-start)*N)+(j-start))*size+B 

/*
this in case of M rows and N columns
N    : number of columns
i    : row
j    : column
start: where array start (usually 0)
size : sizeof(element)
B    : Base address
*/
2:列大
{00,10,20,01,11,21,02,12,22,03,13,23}
address of A[i][j] = (((j-start)*M)+(i-start))*size+B 
/*
this in case of M rows and N columns
M    : number of rows
i    : row
j    : column
start: where array start (usually 0)
size : sizeof(element)
B    : Base address
*/
また、2次元配列のバイナリアドレッシングを行うこともできます.
0から始まり、ローメジャーオーダー
{ 00 , 01 , 02 , 03 , 10 , 11 , 12 , 13 , 20 , 21 , 22 , 23 }
  address of A[i][j] = (i*2^K+2^L)*2^X+B // Base we also convert it to binary
  N = 2^K   ,   0 <= i <= 2^L - 1 // L is number of binary occupied by N
  M = 2^L   ,   0 <= j <= 2^K - 1 // K is number of binary occupied by M
  i*2^K -> i will be shifted by K bits
メモリL + K + Xビットで占有されます

Note : 2^X * 2^Y + 2^Z = 2^(x+Y)+2^Z

Note : if the organization is row we implement row , if it's column we implement column. Because it will give us performance.