#001 DS&A - 연산자 및 배열

소개



나는 GO 시작 일정을 세웠고, 알고리즘과 DS는 직업 준비(아직 경쟁력이 확실하지 않을 수도 있음), 클린 코딩 시리즈, Linux(먼저 Unix 디자인 책부터 시작하겠습니다)로 진행했습니다.
그리고 제가 이미 시작한 DevOps 여정은 2일마다 새로운 튜토리얼이 될 것입니다.
배너에 있는 이 사람이 누구인지 궁금하다면 알고리즘 개념의 발명가인 Khwarizmi입니다.
앞으로 더 발전된 시리즈를 시작할 예정이니 꼭 팔로우 해주세요.

C의 연산자





예를 들어, x = 7 + 3 * 2; 여기서 x는 20이 아닌 13으로 지정됩니다. 연산자 *가 +보다 우선 순위가 높기 때문에 먼저 3*2를 곱한 다음 7을 더합니다.

여기에서 우선순위가 가장 높은 연산자는 테이블 상단에 표시되고 가장 낮은 연산자는 하단에 표시됩니다. 식 내에서 우선 순위가 높은 연산자가 먼저 평가됩니다. -- source

어레이


1차원 배열



배열에서는 인덱스 A[i] 로 배열에 임의 액세스할 수 있지만 연결된 목록에서는 불가능합니다.



A[i]의 주소를 계산하기 위해 우리는 2가지 정보를 알아야 합니다. 1은 우리 유형의 크기와 배열의 기본 주소입니다. 그것들은 우리가 아닌 컴파일러 작업이지만 알아두면 좋습니다.

A[i]의 주소 ​​= i * sizeof(요소) + base_address//예제에서 기본 주소는 100입니다.

address of A[i] =(i-1)* sizeof(element) + base_address//0이 아닌 1부터 시작하는 경우 i-1

sizeof(element)는 정수의 경우 유형에 따라 4바이트(4*8 = 32비트)입니다.

2차원 배열



2차원 배열을 메모리에 저장하는 방법을 이해하면 더 빠르고 더 나은 프로그램을 작성할 수 있습니다.
3개의 행과 4개의 열이 있는 2D 배열의 예를 들어 보겠습니다.

  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
*/


우리는 또한 2D Array 의 Binary 주소 지정을 수행할 수 있습니다. 이는 매우 복잡합니다.
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.

좋은 웹페이지 즐겨찾기