Computer Science 108

[자료구조] Linked Lists- Search

연결리스트에서 탐색은 다음과 같은 과정으로 이루어진다. 1. 헤드에서 시작 : 검색을 시작하기 위해 연결리스트의 헤드부터 탐색을 시작한다. 2. 노드 순회: 각 노드를 순차적으로 방문하면서 원하는 값을 찾을 때까지 계속 진행한다. 3. 비교 연산: 각 노드에서 찾고자 하는 값을 현재 노드의 데이터와 비교한다. 값을 찾을 경우 검색을 종료하고 노드의 위치를 반환하지만, 찾지 못할 경우에는 검색이 실패했다고 출력하게 된다. 다음은 자료구조 상에서 search 연산 예제이다. #include #include // 연결 리스트의 노드 구조체 정의 struct Node { int data; struct Node* next; }; // 연결 리스트에서 값 검색하는 함수 struct Node* search(struc..

Computer Science 2024.01.29

[자료구조] Linked List - 삽입, 삭제 개념

리스트는 자료를 구조화하는 가장 기본적인 방법으로서, 값들을 나열한다. 리스트에서는 새로운 항목을 리스트의 처음, 중간,끝에 삽입하여 저장할 수 있다. 그리고 리스트의 특정 부분을 추출하거나 특정 값을 삽입 혹은 삭제할 수 있다. 리스트는 구현이 간단하지만 삽입 삭제시 오버헤드가 발생할 가능성이 있는 Linear List와, 삽입 삭제가 효율적이지만 구현이 복잡한 Linked List로 나뉜다. Linked List에서 한 원소가 삽입되면, 그 이후의 원소들은 한 자리씩 자리를 뒤로 이동하여 물리적 순서를 논리적 순서와 일치시켜야만 한다. 삽입을 위해서는 먼저 원소를 삽입할 빈 자리를 만들어서, 빈 자리에 원소를 삽입한다. (빈 자리를 만들기 위해 기존의 원소들은 한칸씩 뒤로 이동시킨다) 즉 n+1개의 ..

Computer Science 2024.01.28

[자료구조] 재귀함수 - 하노이탑에서의 반복 패턴과 문제 해결법

하노이탑의 제약조건은 다음과 같다. - 한 번에 하나의 원판만 이동 가능 - 맨 위에 있는 원판만 이동 가능 - 크기가 작은 원판 위에 큰 원판을 쌓을 수 없음 원반 N개를 A에서 C로 이동시키려면, 우선 작은 원반 1개를 A에서 B로 이동시키는 과정이 선행되어야 한다(그래야 마지막 원반을 C에 놓고 다음 프로세스 진행 가능) 그 다음 큰 원반을 A에서 C로 이동시키고, 작은 원반 n-1개를 B에서 C로 이동시킨다. c로 구현시 핵심 코드는 다음과 같다 if (n == 1) printf("Disk1: %c > %c\n, from, to) else{ hanoi(n-1,from,to,tmp); print("Disk%d: %c > %c \n, from, to); hanoi(n-1,tmp,from,to); }

Computer Science 2024.01.27

[자료구조] 이진탐색 알고리즘

[알고리즘 소개] 1) 이진탐색 알고리즘에서는 배열 인덱스의 시작과 끝을 각각 0과 마지막 값으로 둔다. 그리고 0과 마지막 값을 더한 값을 2로 나눈 결과값을 인덱스값으로 하여, 인덱스 값이 target값보다 큰지 작은지를 판단한다. 2) 1의 결과를 토대로 target값보다 크다면 오른쪽을, target값보다 작다면 왼쪽 절반을 취한다. 이를 반복한다. 3) 순차 탐색하는 것 보다 좋은 성능임을 확인한다.(순차 탐색보다 탐색량이 줄음) [구현] int Bsearch(int arr[],int len, int target) { int first = 0; int last = len - 1; int mid; while(first

Computer Science 2024.01.25

[운영체제] 우선순위 스케줄링

우선순위 스케줄링이란 : 프로세스에 우선순위를 부여하는 스케줄링으로서, 프로세스는 대개 우선순위가 높을 수록 작은 우선순위 번호를 가진다. 그러면 CPU는 가장 높은 우선순위를 가진 프로세스에 CPU를 할당하는 구조이다. 우선순위의 정의는 내/외부적 요인이 작용한다. 내부적 요인으로는 시간 제한, 메모리 요구, open file 수, I/O와 CPU의 비율 등이 작용할 것이고, 외부족 요소로는 프로세스의 중요성, 비용의 유형과 액수, 그리고 정치적 요인이 작용할 것이다.

Computer Science 2024.01.24

[운영체제] 가상 메모리 개념, 가상메모리와 메모리 공유

운영체제 상에서 가상메모리는 물리적 메모리에 backing store가 합쳐진 공간을 의미한다. 가상 메모리에서는 프로그램의 논리 메모리와 물리적 메모리를 분리하는데, 프로세스가 완전히 메모리에 적재되지 않아도 프로세스 실행을 허용한다. 가상 메모리에서는 물리적 메모리보다 크기가 큰 가상 메모리를 제공할 수 있는데, 프로그램의 크기가 물리적 메모리보다 클 수 있다. 또한 가상 메모리는 페이지 단위의 swap in/out을 진행하는데, 이를 통해 입출력 크기를 감소시킬 수 있다. 가상 메모리의 구현에는 요구 페이징과 요구 세그먼테이션을 이용한다. 가상메모리는 프로세스들이 메모리와 파일 공유를 가능하게 하는데, 이 과정은 공유 라이브러리와 공유 메모리를 통해 이루어진다.

Computer Science 2024.01.23

[운영체제] Allocation 방법 - 연속할당, 연결할당, 인덱스 할당 개념

파일에 대한 디스크 공간 할당 방법의 고려 사항으로는, 디스크 공간의 효율적인 이용 및 파일의 빠른 접근을 위해야 한다는 것이다. 이를 위해 3가지 주요 할당 방법을 사용한다 1) 연속 할당(contiguous allocation) 각 파일은 디스크의 연속된 블록들의 집합을 점유하는 방법이다. 최소 탐색시간과 간단하다는 점, 파일 접근이 쉽다는 점은 장점으로 작용하지만, 외부 단편화로 인한 저장공간이 낭비된다는 점, 그리고 파일 크기를 증가시킬 수 없다는 점은 분명한 단점이다. 2) 연결 할당(linked allocation) 각 파일은 디스크 블록들의 linked list로 구성되어, 블록 들이 디스크의 임의의 위치에 분산 가능하도록 하는 방법이다. 공간 낭비가 없다는 점은 장점이지만, 랜덤 접근이 불..

Computer Science 2024.01.22

[운영체제] 동적 메모리 할당 문제, 메모리 단편화와 단편화 방식이 가지는 문제점

메모리 할당으로는 고정 분할 방식(메모리를 몇 개의 고정 크기 영역으로 분할하는 방법)과 가변분할방식(가변 길이 및 개수를 가지는 분할)이 있다. 가변 메모리 할당 (Dynamic Memory Allocation): 이는 프로그램 실행 중에 필요한 메모리 양을 동적으로 할당하고 해제하는 방식이다. C/C++에서 malloc, free, new, delete와 같은 함수 또는 연산자를 사용하여 동적으로 메모리를 할당하고 해제할 수 있다. int *dynamicArray = (int *)malloc(5 * sizeof(int)); // 동적으로 배열 할당 // ... free(dynamicArray); // 할당된 메모리 해제 정적 메모리 할당 (Static Memory Allocation): 이는 컴파일 ..

Computer Science 2024.01.19
반응형