φ20.001 DS&A演算子と配列
7224 ワード
導入
私は、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.
Reference
この問題について(φ20.001 DS&A演算子と配列), 我々は、より多くの情報をここで見つけました
https://dev.to/elkhatibomar/001-ds-a-operator-and-arrays-il3
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
A[3][4] === A: 3x4
0 1 2 3
0 [00,01,02,03]
1 [10,11,12,13]
2 [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
*/
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
*/
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
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.
Reference
この問題について(φ20.001 DS&A演算子と配列), 我々は、より多くの情報をここで見つけました https://dev.to/elkhatibomar/001-ds-a-operator-and-arrays-il3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol