CS 7

[알고리즘] 네트워크 플로우

Network Flow 특정한 지점에서 다른 지점으로 데이터가 얼마나 많이 흐르고 있는 지를 측정하는 알고리즘 - 네트워크 데이터 전송, 교통 체증, 물류 시스템 등에 활용 - 내 컴퓨터에 1초에 몇 MB의 자료를 전송 받을 수 있는가에 대한 측정 유량(Flow)/용량(Capacity) 용량(Capacity): c(u, v) u → v로 갈 때, 보낼 수 있는 최대 용량 유량(Flow): f(u, v) 실제 보내는 용량 - 최대 유량: 간선 중 가장 용량이 작은 간선에 의해 결정 유량 네트워크 https://soobarkbar.tistory.com/198 (a) s → a → c → t의 경로를 따라 자료를 전송할 때, c → t 간선 용량이 10으로 가장 작음 ▶ 최대 유량 = 10 (b) 여러 개의 ..

IT/CS 2021.07.08

[알고리즘] 백트래킹

백트래킹(Backtracking) 해를 찾는 도중 해가 아니면 되돌아가서 다시 해를 찾는 기법 - 모든 가능한 경우의 수 중 특정한 조건을 만족하는 경우만 살펴보는 것 ▶ 가지치기 - DFS로 모든 경우의 수를 탐색하는 과정 👉 스택 사용 / 스택에 넣기 전 유망성 검사 - 현재 노드가 유망하지 않으면 부모 노드로 되돌아간 후 다른 자손 노드를 검색하는 방법 ▶ 풀이시간 단축 참고: https://idea-sketch.tistory.com/29

IT/CS 2021.07.08

[알고리즘] 위상 정렬

위상 정렬(Topological Sort) 순서가 정해져있는 작업을 차례로 수행할 때, 순서를 결정하는 알고리즘 방향 그래프에 존재하는 각 정점들의 선행 순서를 위배하지 않고 모든 정점을 나열하는 것 특징 - 하나의 방향 그래프에서 여러 위상 정렬이 가능 ex 1) 대학생되기 → 4학년 되기 → 정보처리기사 합격하기 → 자격서류 제출하기 → 졸업시험 신청 → 졸업하기 2) 대학생되기 → 학과사이트 가입하기 → 졸업시험 신청하기 → 졸업하기 - DAG에만 적용이 가능 ▶ 사이클이 발생하는 경우 위상 정렬 수행 불가 DAG란? 2021.07.07 - [IT/CS] - [알고리즘] 방향 비순환 그래프 [알고리즘] 방향 비순환 그래프 Directed Acyclic Graph, DAG = 방향 비순환 그래프 = ..

IT/CS 2021.07.07

[알고리즘] 방향 비순환 그래프

Directed Acyclic Graph, DAG = 방향 비순환 그래프 = 유향 비순환 그래프 = ... 그래프 간선(Edge)에 이 있고, 처음 출발한 노드(정점) v에서 시작하여 다시 v로 돌아가는 방법이 없는 그래프 용어 선행자(predecessor)와 후행자(successor) DAG에서 어떤 정점 i, j에 대해 i에서 j로의 경로가 존재할 때, i = j의 선행자 j = i의 후행자 즉각 선행자(immediate predecessor)와 즉각후행자(immediate successor) DAG에서 어떤 정점 i, j에 대해 i에서 j로의 간선이 존재할 때, i = j의 즉각 선행자 j = i의 즉각 후행자 예시 - 작업의 우선순위 표현 > 선행 작업 완수 후 작업이 진행되어야 하는 경우

IT/CS 2021.07.07

[자료구조] Hash

참고 pangtrue.tistory.com/291 해시(Hash) 임의의 길이를 갖는 임의의 데이터에 대해 고정된 길이의 데이터로 매핑하는 함수 해싱(Hashing) 매핑하는 과정 - 매핑 전 입력 데이터 값: Key - 매핑 후 출력 데이터 값: HashCode 해시 특징 - 동일한 입력값에는 항상 동일한 출력 값 보장 - 출력 데이터 값으로 원본 입력 데이터 값을 알아낼 수 없음 - CPU, 메모리 자원 소비가 낮음 - 충돌: 입력 값의 범위보다 출력값의 범위가 좁음 -> 입력 데이터에 대해 동일한 출력값이 나올 수 있음 - 검색이 빠름: 해싱을 통해 만든 해시코드를 내부적으로 배열의 인덱스로 활용해시(Hash) 임의의 길이를 갖는 임의의 데이터에 대해 고정된 길이의 데이터로 매핑하는 함수 해싱(Ha..

IT/CS 2021.04.16

[Java] Java란?

Java 특징 1. 운영체제에 독립적 - JVM(자바 가상 머신): 자바 응용 프로그램 -> JVM -> 운영체제 > JVM이 명령어를 운영체제가 이해할 수 있도록 변환 - JVM은 운영체제에 종속적 "Write once, run anywhere" 2. 객체지향언어 - 상속, 캡슐화, 다형성 3. 비교적 배우기 쉬움 4. 자동 메모리 관리(Garbage Colleciton, GC) - 프로그래머가 메모리 관리 할 필요가 없음 - 다소 비효율적일 수 있으나, 프로그래머가 프로그래밍에 집중할 수 있도록 도와줌 5. 네트워크와 분산처리 지원 - Java API를 통해 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발 할 수 있도록 지원 6. 멀티쓰레드 지원 - 시스템과 관계없이 구현 가능 - 관련된 라이브러리 ..

IT/CS 2021.04.12