목록코딩 (374)
미새문지
그래프(Graph) 그래프는 데이터 구조 의 한 형태로, 여러 개의 정점(node)과 이 정점들을 연결하는 간선(edge)으로 구성된다. 그래프는 데이터 간의 관계를 모델링하는데 사용될 수 있으며, 컴퓨터 과학, 네트워크 시스템, 사회학 등 다양한 분야에서 응용된다. 그래프의 유형 무방향 그래프(Undirected Graph) 무방향 그래프는 정점들이 방향없 없는 간선으로 연결된 그래프이다. 즉, 두 정점은 서로 연결되어 있고, 어느 쪽에서 출발해도 다른 쪽에 도달할 수 있다. 양방향이기 때문에 A와 B를 연결하는 간선이 있다면, A->B, B->A 둘 다 가능하다. 특징 대칭성 : 무방향 그래프의 간선은 대칭적이라 어느쪽에서든 이동할 수 있다. 루프 : 무방향 그래프에서는 한 정점에서 출발해 다른 정점..
https://moonmisae-cdpt.tistory.com/182 깊이 우선 탐색(DFS, depth-first search), 너비 우선 탐색(BFS, Breadth-first search) 깊이 우선 탐색(DFS, depth-first search) 깊이 우선 탐색(DFS)은 그래프의 모든 노드를 탐색하는데 사용되는 알고리즘 중 하나이다. 루트 노드에서 시작해 한 방향으로(주로 왼쪽부터) 들어갈 수 있는한 moonmisae-cdpt.tistory.com 애(경)교(육)관에 출근한지 벌써 9일. 교육관에서 넘어와서 핀토스 프로젝트 1인 threads를 복습하고 이해가 잘 안갔던 부분인 nested & chaining과 조건 변수로 스레드를 관리하는 convar에 대해 이해하..
깊이 우선 탐색(DFS, depth-first search) 깊이 우선 탐색(DFS)은 그래프의 모든 노드를 탐색하는데 사용되는 알고리즘 중 하나이다. 루트 노드에서 시작해 한 방향으로(주로 왼쪽부터) 들어갈 수 있는한 끝까지 탐색하여 더 이상 들어갈 수 없는 경우, 가장 최근의 분기점으로 돌아가 다른 방향의 노드를 탐색하는 방식으로 진행된다. DFS의 구현 // 그래프를 인접 리스트 형태로 표현 const graph = { A: ['B', 'C'], B: ['A', 'D', 'E'], C: ['A', 'F'], D: ['B'], E: ['B', 'F'], F: ['C', 'E'] }; // DFS 함수 정의 function dfs(graph, startNode) { let visited = []; //..
https://moonmisae-cdpt.tistory.com/180 해시 테이블(Hash Table) 해시 테이블(Hash Table) 해시 테이블은 키(Key)와 값(Value)을 매핑하여 데이터를 저장하는 데이터 구조 중 하나이며, 이 방식은 빠른 데이터 검색이 가능하다. 하지만, 해시 테이블은 해시 함수를 사 moonmisae-cdpt.tistory.com 기존에 작성하던 시스템콜 코드에서 두 가지를 수정했다. 매 함수마다 체크했던 파일 존재 여부 조건문을 함수로 만들어 코드를 줄였는데, 기존의 조건문의 조건이 4개 정도로 길기 때문에 함수로 묶은게 깔끔해서 괜찮은 것 같다. 하나는 시스템 콜 함수가 실행되면서 동시성 문제를 위해 lock_acquire과 lock_release..
해시 테이블(Hash Table) 해시 테이블은 키(Key)와 값(Value)을 매핑하여 데이터를 저장하는 데이터 구조 중 하나이며, 이 방식은 빠른 데이터 검색이 가능하다. 하지만, 해시 테이블은 해시 함수를 사용해 저장 위치를 결정하는데, 이 과정에서 충돌(Collision)이 발생할 수 있다. 충돌(Collision)은 두 개의 키가 동일한 해시 값을 가지게 되어, 같은 위치에 저장되려고 할 때 발생하는 상황을 의미하는데 이를 해결하기 위한 몇 가지 방법이 있다. 체이닝(Chaning) 충돌을 해결하는 가장 일반적인 방법 중 하나로, 각 해시 테이블의 항목을 연결 리스트로 구성하여 충돌이 발생했을 때, 리스트에 노드를 추가하는 방식이다. 이렇게 하면 동일한 해시 값에 대해 여러 키를 저장할 수 있게..
https://moonmisae-cdpt.tistory.com/176 pintOS - project2(Userprog) process.c process.c 더보기 // 명령줄 인자를 스택에 배치한다. void argument_stack (char **argv, int argc, struct intr_frame *if_){ int minus_addr; int address = if_->rsp; // 스택 포인터(rsp)의 현재 위치를 담는다. // moonmisae-cdpt.tistory.com VM을 제외한 process.c의 함수를 학습했다. https://moonmisae-cdpt.tist..
Deep Copy vs Shallow Copy Deep Copy(깊은 복사)와 Shallow Copy(얕은 복사)는 객체를 복사할 때 사용되는 두 가지 방식이며, 객체 내의 데이터를 어떻게 처리하는지에 따라 구분된다. Deep Copy(깊은 복사) 깊은 복사는 객체의 모든 레벨을 재귀적으로 복사한다. 객체 내부의 다른 객체나 배열 등도 새롭게 복사되어, 복사된 객체는 원본 객체와 완전히 독립적인 복제본이 된다. 이 방식을 사용하면 복사된 객체를 수정해도 원본 객체에는 영향을 주지 않고, 반대의 경우도 마찬가지이다. 깊은 복사는 복사 과정이 상대적으로 느리고, 메모리 사용량이 더 많다는 단점이 있지만, 복사된 객체가 원본 객체와 완전히 독립적이 되므로, 두 객체 간의 상호 작용을 걱정하지 않아도 된다. 예..
https://moonmisae-cdpt.tistory.com/176 pintOS - project2(Userprog) process.c process.c 더보기 // 명령줄 인자를 스택에 배치한다. void argument_stack (char **argv, int argc, struct intr_frame *if_){ int minus_addr; int address = if_->rsp; // 스택 포인터(rsp)의 현재 위치를 담는다. // moonmisae-cdpt.tistory.com 코드 분석에 어려움이 있어 아직 process.c는 진행중이다. syscall.c는 시스템 콜의 작동 코드를 작성하기 때문에 어느정도 이해가 되는데 pro..