CS 8

[네트워크] TCP/IP 흐름 제어 와 혼잡 제어

1. 흐름 제어 (Flow Control) 흐름 제어는 송신자와 수신자 간의 데이터 전송 속도를 조절하여 수신자가 처리할 수 있는 속도로 데이터를 보내는 기법    해결 방법1) Stop and Wait매번 전송한 패킷에 대해 확인 응답(ACK)을 받아야만 그 다음 패킷을 전송하는 방법장점 - 각 데이터 프레임에 대한 확인 응답을 받기 때문에, 데이터 손실이나 오류를 발견하고 재전송이 가능단점 - 패킷을 하나씩 보내기 때문에 비효율적      동작 방식 1. 송신자(sender)는 첫 번째 데이터 프레임을 수신자(receiver)에게 전송 2. 송신자는 해당 데이터 프레임에 대한 확인 응답(ACK)을 받을 때까지 대기 3. 수신자는 데이터 프레임을 받고, 확인 후 확인 응답(ACK)을 송신자에게 전송 4..

CS/네트워크 2024.09.13

[알고리즘] 깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS)

그래프를 탐색하는 방법에는 깊이 우선 탐색(DFS)과 너비 우선 탬색(BFS)가 있습니다.   1. 깊이 우선 탐색(DFS) Root Node 혹은 다른 임의의 Node에서 최대한 깊이 내려간 뒤, 더 이상 깊이 갈 곳이 없을 경우 옆 Branch로 이동하는 탐색 방법입니다.  즉, 해당 분기를 완벽하게 탐색하는 방법입니다.   특징모든 노드를 방문하고자 하는 경우(완전 탐색)미로 찾기, 퍼즐 문제검색 속도는 너비 우선 탐색(BFS)에 비해서 느림모든 경로를 한 번에 탐색하지 않기 때문에 너비 우선 탐색(BFS)보다 메모리 사용량이 적을 수 있음   Java 코드 (Stack을 사용해서 구현)class Graph { private int V; // Number of vertices privat..

CS/알고리즘 2024.08.04

[자료구조] Set (Java) & HashSet이 정렬이 되는 이유

Set (Java)   Set 이란? Set은 수학적 집합을 표현한 중복되지 않은 요소들의 집합이다.이를 통해 교집합, 합집합, 차집합 등을 구현할 수 있다.     Set 특징- 입력된 데이터의 순서를 보장하지 않는다.- 데이터의 중복을 허용하지 않는다.- 인덱스가 없기 때문에 Iterator를 사용해서 조회한다.    Set은 언제 사용하는지? 1) 중복된 데이터 제거 2) 특정 값이 존재 여부 확인    - HashTable로 구현되어있기 때문에, 특정 값이 존재하는지 여부를 빠르게 조회할 수 있습니다. 3) 집합 연산    - 합집합, 교집합, 차집합 등의 연산이 가능합니다.     Java - Set 인터페이스 구현 클래스 1) HashSet- 입력 순서를 보장하지 않으며, 데이터 중복을 허용하..

CS/자료구조 2024.07.27

[자료구조] 트라이(Trie)

트라이(Trie)     예를 들면 다음에서 검색어를 찾을 때 위 그림과 같이 연관된 단어를 찾아주거나, 자동 완성시켜줄 때 트라이(Trie) 자료구조를 사용한다. 즉, 트라이(Trie) 는 문자열을 저장하고 탐색하는데 유용한 트리 자료구조이다. 검색을 뜻하는 Retrieval의 중간 음절에서 따와 Trie라고 불린다. 또 다른 이름은 Redix Tree, Prefix Tree이다.        트라이(Trie)의 작동 원리  springboot, springcloud, spirngmvc, sports라는 문자열을 저장해보자. 그럼 아래와 같이 트리가 구성이 된다.   사전에서 단어를 찾을 때와 비슷하게 sports를 찾으면 s -> sp -> spo -> spor -> sport -> sports 이렇..

CS/자료구조 2024.07.19

[자료구조] B-Tree와 B+Tree의 질문

질문1) B-Tree와 B+Tree의 차이는 뭘까요? 1. 검색 방법데이터를 검색할 때 항상 리프 노드까지 이동하므로 검색 경로가 단순해진다.B-Tree: 모든 노드(internal node + leaf node)에 키와 값이 함께 저장합니다.B+Tree: internal 노드에는 키만 저장, 리프 노드에는 키와 값이 저장됩니다.그래서 B+Tree보다 B-Tree는 더 많은 메모리 공간을 차지합니다. 2. 포인터의 사용B-Tree: internal 노드의 포인터를 통해서만 리프 노드로 이동 가능B+Tree: 리프 노드끼리 서로 Linked List로 연결되어 있다. 그래서 노드를 통하지 않고 형제 노드로 이동이 가능하기 때문에 범위 검색에 유리합니다.    질문 2) 왜 DB에세는 B-Tree를 사용할까..

CS/자료구조 2024.07.14

[자료구조] B-Tree란?

B-Tree(Balanced-Tree)란?이진트리(Bineary Tree)를 확장해 하나의 노드가 가질 수 있는 자식 노드의 수가 최대 2보다 큰 M개를 가질 수 있는 트리를 의미합니다.트리내에서 삽입과 삭제가 일어나더라도 최대한 균형있는 트리 형태를 유지하여 이진 탐색의 장점을 살린 트리이다.한 노드에는 2개 이상의 데이터(key)가 들어갈 수 있으며, 항상 정렬된 상태로 저장된다.  노드 내에 데이터는 ceil(M/2)-1개부터 최대 M-1개까지 포함될 수 있다.3차 B Tree는 노드 내에 1~2개의 데이터를 가질 수 있다.   내부 노드는 ceil(M/2) ~ M개의 자식을 가질 수 있다. 최대 M개의 자식을 가질 수 있는 B Tree를 M차 B Tree라고 한다.   특정 노드의 데이터(key)..

CS/자료구조 2024.07.13

[자료구조] 메모리관리 - 스택(Stack) 힙(Heap)

StackHeap특징1. 정적 메모리2. 함수, 지역변수, 매개변수가 저장3. LIFO 방식으로 관리1. 동적 메모리2. 전역 변수 저장3. 사용자가 직접 관리  1. Stack함수의 호출과 관련있는 변수들이 저장이 된다. (지역변수, 매개변수, 기본형(int, long..)) 그래서 함수 호출시 Stack영역에 할당되고, 함수 Scope가 종료가 되면 Stack영역에서 소멸된다.별도로 변수를 할당 해제를 할 필요가 없다. (Scope 벗어나면 알아서 소멸되기 때문)컴파일 타임에 Stack영역의 크기가 결정된다.push로 데이터를 저장하고, pop으로 데이터를 꺼낸다.빠르게 접근과 할당이 가능하고, 메모리 낭비되는 공간이 없이 사용가능하다. 하지만 용량이 적어서 많이 쌓기엔 버겁다.   2. Heap직접..

CS/자료구조 2023.04.01

[자료구조] Array / ArrayList / LinkedList 특징

1. Array / ArrauyList / LinkedList 특징 요약   ArrayArrayListLinkedList공통점1. 원소의 중복을 허용하고 순서를 유지한다.2. 인덱스를 이용해 원소들을 관리한다.차이점1. Array의 length와 data type을 함께 선언한다. (고정적)2. length를 미리 설정했기 때문에 해당 인덱스에 값을 넣지 않을 경우 타입별로 선언된 default 값으로 return 한다. (아래 결과값 참고)1. 데이터 조회(get())-> Index로 조회를 해서 속도가 빠르다.2. 데이터 삽입(add())과 삭제(remove())-> 원하는 index에 add()와 remove()를 할 수 있지만, index를 지정을 하면 나머지 원소들이 움직여야한다. (데이터 양이..

CS/자료구조 2023.03.31