본문 바로가기
반응형

전체 글1310

[구간합] Sum of sub-matrix가 무엇이고, 어떻게 하는 것일까? Sum of sub-matrix 란? N × N와 같은 2차원 배열상에서 특정 영역의 합을 의미한다. 위에서 표시한 4 × 2 크기의 사각형이 가지고 있는 영역의 합은 어떻게 구할까? Brute Force 방식으로 구한다면 아래와 같이 구할 수 있다. #include const int N = 7; int main() { int map[N][N] = { {0, 0, 0, 0, 0, 0, 0}, {0, 1, 2, 3, 4, 5, 6}, {0, 2, 2, 2, 2, 2, 2}, {0, 3, 3, 3, 3, 3, 3}, {0, 4, 4, 4, 4, 4, 4}, {0, 5, 5, 5, 5 ,5 ,5}, {0, 6, 6, 6, 6, 6, 6}, }; int sx, sy, ex, ey; sx = 2, sy = 4; .. 2021. 5. 3.
[큐] Queue (Memory Pool 방식 구현) Queue (Memory Pool 방식 구현) Memory Pool 방식이란? 연결리스트를 정적할당한 형태로, 순차 리스트 + (동적) 연결리스트의 장점을 합친 형태 - 필요한 만큼 미리 확보해서 사용 (재활용 하지 않으므로 공간 해제 불필요) - 동적할당이 실제 메모리 공간에서 할당을 했다면 Memory Pool 방식은 초기에 일정 공간을 정적할당하고, 해당 공간을 필요할 때마다 포인터로 동적으로 연결해주는 방식 ▶ [List] 순차 리스트(정적 배열) & 연결 리스트(동적할당) 비교 [List] 순차 리스트(정적 배열) & 연결 리스트(동적할당) 비교 순차 리스트(정적 배열) & 연결 리스트(동적할당) 비교 List를 구현하는 방법에는 순차 리스트(배열), 연결 리스트 존재한다. ※ 관련 연산: 삽입.. 2021. 5. 2.
[큐] Queue (동적할당, 연결리스트 구현) Queue (동적할당, 연결리스트 구현) 동적할당 방식 [큐] Queue란? 에서 배열(정적할당 방식)로 Queue를 구현하였다. 동적할당 방식은 초기에 메모리 공간을 정해두지 않고, 필요할 때마다 할당하는 방식이다. - 데이터 삽입, 삭제하는 경우 O(1)에 가능하다. - (최대 메모리 공간 내에서) 리스트 크기 제한이 없다. - 인덱스를 통한 임의 접근(random access)이 어렵다 따라서 특정한 원소를 탐색하는 경우 최대 O(N) 의 시간이 필요할 수 있다 - 일반적으로 자기 참조 구조체를 이용하여 구현한다. ▶ [List] 순차 리스트(정적 배열) & 연결 리스트(동적할당) 비교 [List] 순차 리스트(정적 배열) & 연결 리스트(동적할당) 비교 순차 리스트(정적 배열) & 연결 리스트(동.. 2021. 5. 2.
[스택] Stack (Memory Pool 방식 구현) Stack (Memory Pool 방식 구현) Memory Pool 방식이란? 연결리스트를 정적할당한 형태로, 순차 리스트 + (동적) 연결리스트의 장점을 합친 형태 - 필요한 만큼 미리 확보해서 사용 (재활용 하지 않으므로 공간 해제 불필요) - 동적할당이 실제 메모리 공간에서 할당을 했다면 Memory Pool 방식은 초기에 일정 공간을 정적할당하고, 해당 공간을 필요할 때마다 포인터로 동적으로 연결해주는 방식 ▶ [List] 순차 리스트(정적 배열) & 연결 리스트(동적할당) 비교 [List] 순차 리스트(정적 배열) & 연결 리스트(동적할당) 비교 순차 리스트(정적 배열) & 연결 리스트(동적할당) 비교 List를 구현하는 방법에는 순차 리스트(배열), 연결 리스트 존재한다. ※ 관련 연산: 삽입.. 2021. 5. 2.
[List] 순차 리스트(정적 배열) & 연결 리스트(동적할당) 비교 순차 리스트(정적 배열) & 연결 리스트(동적할당) 비교 List를 구현하는 방법에는 순차 리스트(배열), 연결 리스트 존재한다. ※ 관련 연산: 삽입(insert), 접근(access) 및 탐색(search), 삭제(delete) 각각의 구현방식마다 장/단점이 존재하며, 주어진 상황에 따라 적합한 방식을 선택해야 한다. ex) PS와 같이 제한조건이 명시되어 있다면 정적할당 방식이 유리 순차 리스트 (정적 배열) - 배열로 구현되어 있기 때문에 순차 및 임의 접근 (random access)이 가능하다. - 크기가 고정 : 공간이 낭비되거나 재할당(reallocation)이 필요할 수 있다 - 배열의 중간에 데이터를 삽입 및 삭제하는 경우 다수의 원소를 이동하므로 이로 인한 오버헤드가 크다 → 시간 복.. 2021. 5. 2.
[스택] Stack (동적할당, 연결리스트 구현) Stack (동적할당, 연결리스트 구현) [스택] Stack 이란? 에서 배열(정적할당 방식)로 Stack을 구현하였다. 동적할당 방식은 초기에 메모리 공간을 정해두지 않고, 필요할 때마다 할당하는 방식이다. - 데이터 삽입, 삭제하는 경우 O(1)에 가능하다. - (최대 메모리 공간 내에서) 리스트 크기 제한이 없다. - 인덱스를 통한 임의 접근(random access)이 어렵다 따라서 특정한 원소를 탐색하는 경우 최대 O(N) 의 시간이 필요할 수 있다 - 일반적으로 자기 참조 구조체를 이용하여 구현한다. ▶ 자세한 내용 [List] 순차 리스트(정적 배열) & 연결 리스트(동적할당) 비교 참고 [List] 순차 리스트(정적 배열) & 연결 리스트(동적할당) 비교 순차 리스트(정적 배열) & 연결 .. 2021. 5. 2.
[해시] Hash Open Address 기법 구현 [해시] Hash란?에 작성한 Hash를 구현하는 방식 중 하나인 체이닝(Chaining) 기법을 구현하였습니다. Hash 개념이 필요하신 분은 먼저 [해시] Hash란?을 참고해주세요 Open Address 기법 Hash Function이나 주어지는 Input Data에 따라 key간 Hash Index 충돌이 일어날 수 있다. 아래 그림과 같이 ▶ Hash Function = key mod 11 일 때, data = {8, 19, 30}은 동일한 Hash Index = "8" 을 가진다. - 동일한 Hash Index를 가질 때, Hash Table의 비어있는 곳을 찾아서 해결할 수 있다. - Chaining 기법과 달리 추가 메모리 할당이 없다. (Input Data 개수는 초기 Hash Table.. 2021. 5. 1.
[해시] Hash Chaining 기법 구현 [해시] Hash란?에 작성한 Hash를 구현하는 방식 중 하나인 체이닝(Chaining) 기법을 구현하였습니다. Hash 개념이 필요하신 분은 먼저 [해시] Hash란?을 참고해주세요 Chaining 기법 Hash Function이나 주어지는 Input Data에 따라 key간 Hash Index 충돌이 일어날 수 있다. 아래 그림과 같이 ▶ Hash Function = key mod 11 일 때, data = {8, 19, 30}은 동일한 Hash Index = "8" 을 가진다. - 동일한 Hash Index를 가질 때, 연결리스트(Linked List)를 구현해서 처리할 수 있다. - Hash Index마다 연결리스트를 지닌 형태 Hash Index가 연결리스트에서 Header 역할을 한다고 보면.. 2021. 5. 1.
[해시] Hash란? Hash란? 원소가 저장되는 위치가 원소 값에 의해 결정되는 자료구조 - 평균 상수 시간에 삽입, 검색, 삭제가 가능하다. - 매우 빠른 응답을 요구하는 상황에 유용 (Hash는 최소(최대) 원소를 찾는 것과 같은 작업은 지원하지 않는다.) ※ Java의 HashMap / C++의 map / Python의 dictionary로 보다 쉽게 이용할 수 있다. 해싱(Hashing) 과정 - 해싱(Hashing) 매핑하는 전체 과정 - 키(key) 매핑 전 원래 데이터의 값 - 해시함수(hash function) 데이터의 효율적 관리를 목적으로 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑 - 해시 값(hash value) 매핑 후 데이터의 값 (Hash Code라고도 부름) Hash 성능과 필요성 - H.. 2021. 4. 30.
[큐] 원형 큐 (Circular Queue) 원형 큐 (Circular Queue) 기본적인 Queue 구조는 push와 pop을 반복하다보면 Index (Rear)는 오른쪽으로 이동하게 된다. ▶ [큐] Queue란? [큐] Queue란? Queue란? 선입선출(First In First Out, FIFO)의 자료 구조 ▶ 큐(Queue)는 한쪽에서 삽입(Push, Enqueue) 하며, 다른 한쪽에서 빠져나오는(Pop, Dequeue) 구조 두 지점을 와 로 표현한다. (Front, Rear) ▶ C++.. zoosso.tistory.com 그러다보면 Queue 배열 크기에 제한될 수 밖에 없다. 이를 위해 Queue Index가 순환하는 구조인 원형 큐가 존재한다. → 앞에 비어있는 공간을 재활용하는 구조로 들어오는 Input Data가 적절.. 2021. 4. 24.
반응형