전체 글 254

TCP 통신 – echo 서버 및 클라이언트 구현 [네트워크 프로그래밍 C#]

1. 유튜브 동영상 강의 이번 실습은 TCP 통신의 기본 절차를 확인하는 실습입니다. 실습 소재는 echo 서비스입니다. 클라이언트에서 전송한 메시지를 다시 반송하는 서비스를 제공합니다. 2.TCP 통신 절차 TCP 프로토콜을 이용한 통신은 서버와 클라이언트 사이에 연결을 형성한 후에 스트림 방식으로 패킷을 송수신합니다. 스트림 방식의 통신에서는 전송한 패킷의 순서대로 도착하며 패킷 전송 중에 전송이 실패하면 다시 전송하여 신뢰성을 보장하는 방식입니다. TCP 통신에서 서버의 절차는 다음과 같습니다. 소켓 생성(대기 소켓) Bind: 소켓 – 네트워크 인터페이스와 결합 Listen: 백 로그 큐 크기 설정 반복 – Accept:클라이언트 연결 요청 대기 및 수락(송수신 소켓 반환) 클라이언트와 데이터 송..

병합 정렬(합병 정렬, Merge Sort) 알고리즘

1. 유튜브 동영상 강의 병합 정렬 알고리즘 동영상 강의 2. 알고리즘 이번에는 병합 정렬 알고리즘을 살펴봅시다. 병합 정렬 알고리즘은 배열을 작은 단위의 배열로 분할한 후에 분할한 배열을 정렬하고 이들을 다시 정렬하면서 전체 배열을 정렬하는 알고리즘입니다. 병합 정렬(base:배열의 시작 주소, n: 원소 개수, compare:비교 논리) ah:= n/2 bh:= n – ah; 조건(n이 1보다 작거나 같으면) 종료 병합정렬(base,ah,compare) 병합접열(base+ah,bh,compare) tbase에 동적 메모리 할당(원소크기*원소개수) 메모리 복사(tbase,base) ai:=0 bi:=ah i:=0 반복(ai가 ah보다 작으면서 bi가 n보다 작다) 조건(tbase[ai]가 tbase[b..

퀵 정렬 (Quick Sort)

1. 유튜브 동영상 강의 퀵정렬 유튜브 동영상 강의 2. 퀵정렬 알고리즘 퀵 정렬 알고리즘은 피벗 값을 선택하여 피벗 값보다 작은 값들은 왼쪽으로 보내고 큰 값들은 오른쪽으로 보낸 후에 이들 사이에 피벗을 위치시키는 원리를 이용합니다. 이후 피벗보다 작은 값들을 재귀 호출로 정렬하고 피벗보다 큰 값들도 재귀 호출로 정렬하는 방식입니다. 그런데 퀵 정렬은 어떠한 요소를 피벗으로 선택하냐에 따라 성능에 차이가 납니다. 만약 전체 요소의 중간 순위의 요소를 선택하면 재귀 호출에서 반씩 나누어 정렬을 하게 되어 좋은 성능을 발휘합니다. 하지만 가장 작은 값이나 가장 큰 값을 피벗으로 선택하면 최악의 성능을 발휘합니다. 여기에서는 맨 앞과 맨 뒤, 그리고 중간 위치의 요소를 비교하에 세 값 중에 중간 값을 피벗으..

삽입 정렬 (Insertion Sort)

1. 유튜브 동영상 강의 1.1 삽입 정렬 알고리즘 삽입 정렬 알고리즘 1.2 삽입 정렬 알고리즘 구현 삽입 정렬 알고리즘 구현 2. 삽입 정렬 알고리즘 이번에는 반복 알고리즘 중에 삽입 정렬 알고리즘을 알아봅시다. 삽입 정렬 알고리즘은 점진적으로 정렬 범위를 넓혀 나가는 방식으로 정렬하는 알고리즘입니다. 이를 위해 새로운 범위에 포함하는 마지막 원소를 앞으로 이동하면서 자신보다 작은 요소를 찾을 때까지 이동하면서 자리를 교환합니다. 삽입 정렬(base:컬렉션, n:원소 개수, compare:비교 논리) 반복(i:=1; i0 ; j:=j-1) 조건(compare (base [j-1], base [j]) < 0) temp: = base [j-1] base[j-1] = base [j] base[j] = te..

선택 정렬 (Selection Sort) 알고리즘

1. 유튜브 동영상 강의 1.1 선택 정렬 알고리즘 선택 정렬 알고리즘 동영상 강의 1.2 선택 정렬 알고리즘 구현 선택 정렬 알고리즘 구현 동영상 강의 2. 알고리즘 이번에는 반복 알고리즘일 이용하는 선택 정렬 알고리즘을 알아봅시다. 선택 정렬 알고리즘은 제일 큰 값을 찾아 맨 뒤의 요소와 교체하는 방법을 반복하여 전체를 정렬하는 알고리즘입니다. 물론 제일 작은 값을 찾아 맨 앞의 요소와 교체하는 방법을 반복할 수도 있습니다. 선택 정렬 알고리즘을 의사코드(pseudo code: 논리적인 수행 흐름을 이해할 수 있게 작성한 코드)는 다음과 같습니다. 선택 정렬(base:컬렉션,n:원소 개수,compare:비교 논리) 반복(i:=n; i>1 ; i:= i-1) 반복(max=0,j:=1; j1; i--)/..