#001 DS&A - 연산자 및 배열
7512 단어 datastructurealgorithms
소개
나는 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.
Reference
이 문제에 관하여(#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
이 문제에 관하여(#001 DS&A - 연산자 및 배열), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/elkhatibomar/001-ds-a-operator-and-arrays-il3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)