리눅스에서 wait와 waitpid는 프로세스의 종료 상태를 리턴해 주는 함수입니다. pid_t waitpid(pid_t pid,int *statloc,int options); 성공을 하면, 프로세스 ID를, 오류가 발생하면 -1을, 그 외의 경우에는 0을 리턴합니다. 그런데, 이 함수가 wait와 다른 점은, 특정한 자식 프로세스를 기다리게 할 수 있다는 것입니다. 일단 위의 두 옵션만 아셔도 무난할 듯 싶어요. 프로세스 그룹은, 추후에 다시 설명해 드리도록 하겠습니다. 3번째 인자의 옵션이 중요한데요. WNOHANG, WCONTINUED, WUNTRACED 등이 있어요. sleep sort를 설명했을 때, 옵션으로 준 것은 이 중 1번째 것이였는데요. 이 때에는 종료된 자식이 존재하지 않아도, 블로킹..
전체 글 검색 결과
삽입 정렬의 복잡도는 O(n^2)입니다. 물론 평균 복잡도 또한 O(n^2)입니다. 물론, memcpy 등으로 실행 시간을 빠르게 할 수 있는 여지는 있지만, 거기까지일 뿐입니다. 다만, insertion sort의 장점도 있는데요. 거의 정렬된 데이터에 대해서는 상당히 빠르게 동작한다는 장점이 있어요. 하지만, 한 번에 한 요소씩. 비교 1번 할 때 마다, 1요소씩만 move 하기 때문에 효율적이지 않은데요. 이를 보완하기 위해서 gap이라는 변수를 둡니다. 그러면 먼저 init 함수를 봅시다. 먼저, si 라는 벡터가 있습니다. 여기에 무슨 값들이 들어있는지 봅시다. 1, 4, 13, 40, 121, 361, 1093, 3280, ... 네. 이런 값들이 들어 있는데요. gap으로 쓸 겁니다. 예를 ..
원래 이 포스트는 곱셈까지 다루려고 했습니다. 그런데, 생각보다 내용이 길어질 듯 싶어서, 이 부분만 먼저 다루도록 하겠습니다. 전치 행렬은, 원본 행렬에서, 행과 열을 서로 맞바꾼 것을 말합니다. 예를 들어 [[1,2],[3,4]]의 전치 행렬은 [[1,3],[2,4]]가 됩니다. 희소 행렬 곱셈을 배우기 위해서, 먼저, transpose matrix에 대해서 배우는데요. 사실. 그렇게 해야 조금 더 쉽고 빠르게, 그리고 cache를 더 잘 써먹을 수 있기 때문에 그러지 않나 싶기도 하네요. 예를 들어 원본 행렬에서 2행 3열에 7이라는 값이 있었습니다. 그러면, 전치 행렬에서는 3열 2행에, 7이라는 값이 있어야 합니다. 이걸 어떻게 하면 좋을까요? 데이터가 m개 있다면, 열 번호를 1번째 기준으로,..
개인적인 생각이지만, C언어에서 포인터는 반드시 알고 가야 할 키워드 중 하나인 듯 싶습니다. ps에서 그렇게 많이 사용하지는 않았는데, 상당히 중요한 부분을 차지하고 있기도 하고, 심지어 어느 교재에서는 이것만을 중점적으로 다루는 책도 있을 정도이니 말을 다 한 셈입니다. 오늘 배울 것은 주솟값을 얻어오는 &와, 역참조를 하는 *만 배워볼 겁니다. 사실 이것만 제대로 익혀도 포인터의 50% 이상은 정복했다고 봐도 과언이 아니기 때문입니다. 예제 두 개만 봅시다. 뭔가 복잡해 보입니다? 하나 하나 천천히 봅시다. 먼저 int 형 변수 a를 선언했습니다. 그러면 메모리 상에는 다음과 같이 그려질 겁니다. 아래 그림을 보면, 0x80번지에 a가 할당되어 있음을 알 수 있는데요. 그러면, 0x80번지에 a를 ..
구현 3번째 시간입니다. 많이 들어보셨을 달팽이 배열 알고리즘을 작성해 보도록 하겠습니다. 나름 많이 알려진 것이지만, 구현을 할 때, 조금이나마 더 쉽게 할 수 있는 팁들이 많으니, 잘 보시고 얻어가실 거 있으면 얻어가셨으면 좋겠습니다. 먼저 달팽이 배열은, 어떠한 특정 지점에서 시작하여, 시계 방향으로 쭉 돌면서 중앙까지 가는 것을 말해요. 이것을 보통 어떻게 구현을 하느냐. 4방향으로 나누어서 들어갑니다. 오른쪽으로 가고, 아랫쪽으로 가고, 왼쪽으로 가고, 위로 갑니다. 그렇게 1사이클을 돌립니다. 그리고 안쪽 ㅁ에서 또 돌리고요. 이런 식으로 해서 ㅁ의 크기가 0보다 작거나 같아질 때 까지 돌리면 됩니다. 그런데 더 쉬운 방법이 없을까요? 우리는 우측, 아래, 왼쪽, 윗쪽 방향 순서대로 돌아가는 ..
최근댓글