전공정리/알고리즘 13

[알고리즘] Hash Tables & Dynamic Programming

Direct Addressing Table |U| 개의 slot으로 이루어진 Table T U : 전체 집합 가정 : 서로 다른 원소는 동일한 key를 갖지 않는다 수행 시간 : O(1) 메모리 공간 소비 상당 U의 크기가 매우 크기 때문에, |U|개의 원소를 담을 수 있는 Table T를 이용하는 것은 실용적이지 못함 컴퓨터 메모리의 함계 실제로 이용하고 있는 key들의 집합을 K라고 했을때, |K|는 |U|에 비해 매우 작음 Table T에 할당된 메모리 공간의 낭비가 매우 심함 Hash Table #### Hash Function - 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수 - 해시 함수에 의해 얻어지는 값 : 해시 값, 해시 코드 , 해시 체크섬, 해시 - 해시 테이블에 사용 ..

[알고리즘] 기계학습_2

Gradient "함수 값(스칼라 장)의 증가율이 최대인 방향"을 의미 = 기울기 다변수 함수의 편미분 모임 즉, 편미분 값이 이루는 벡터를 Gradient라고 부름 예제(ppt) Gradient에 대해 조사하여 Gradient의 의미에 대해 정리하고, 아래 주어진 함수의 f'(x)및 f'(0.5, -1) 구하기 Gradient Descent 목적 함수를 최소화 하는 방향으로 반복적 변수 업데이트 1) 초기값(x0), 학습률(y), 종료 조건 설정 2) xk에서의 기울기 계산 3) 종료 조건 만족시, 종료 // 그 외의 경우, k = k + 1 , 2단계 반복 서로 독립인 표준 정균 분포를 따르는 xk, zk 생성 < Box-Mul..

[알고리즘] 기계학습

인공지능 사람이 해야할 일을 기계가 대신할 수 있는 모든 자동화에 해당 머신러닝 명시적으로 규칙을 프로그래밍하지 않고 데이터로부터 의사결정을 위한 패턴을 기계가 스스로 학습 딥러닝 입공신경망 기반의 모델로, 비정형 데이터로부터 특징 추출 및 판단까지 기계가 한 번에 수행 기계학습 지도 학습 문제와 정답을 모두 알려주고 학습 비지도 학습 답을 가르쳐주지 않고 학습 강화 학습 보상을 통해 상은 최대화, 벌은 최소화하는 방향으로 학습 기계학습 알고리즘 예시 회귀 분석 : 예측 입력 데이터들의 특징을 기준으로 연속된 값 예측 어떤 패턴, 경향성 예측 특이 값 분석, 관리 중요 선형 회귀, 비선형 회귀 로지스틱 회귀 : 0,1 분류 분류 입력 데이터를 두개 이상의 "정해진 결과"로 예측 데이터의 특성에 따른 범주..

[알고리즘] 인공지능 개론 및 응용

인공지능 관련 용어 인공지능 학습과 문제 해결과 같은 인간의인지기능을 모방하는 기계 인공물에 있어서의 지능적 행위(복잡한 환경에서의 지각, 추론, 학습, 의사전달, 행동) 기계학습 컴퓨터에게 명시적으로 프로그램을 하지 않고도 컴퓨터가 학습할 수 있는 능력을 제공하는 연구 분야 자동으로 대량의 데이터로부터 패턴/지식을 찾아 학습하고, 예측을 수행하는 방식 인공지능을 구현하기 위한 여러 수단 중 하나 딥러닝 심층 인공신경망 기반 방법들의 총칭 기계학습을 구현하기 위한 여러 수단 중 하나 기계학습의 분류 지도학습 Label이 있는 데이터를 이용해 학습 분류, 회귀 비지도학습 Label이 없는 데이터를 이용해 학습 데이터에 내재된 패턴, 특성, 구조를 학습 차원 축소, 군집화 강화학습 에이전트가 주어진 환경내에..

[알고리즘] 최소 신장 트리

비교 그래프 G의 신장트리 그래프 내의 모든 정점을 포함하는 트리 G의 정점들과 간선들로만 구성된 트리 그래프 G의 최소(비용) 신장트리(MST) G의 신장트리들 중 간선의 합이 최소인 신장트리 최소 신장 트리 Minimum Spanning Trees(MST) 간선들의 가중치 합이 최소인 신장트리 무방향 가중치 그래프 G = (V,E) 각 Edge의 가중치 w(u,v) Quiz 아래의 조건을 만족하는 Edge들의 부분집합 T 찾기 T에 속한 Edge들에 의해 그래프의 모든 노드들이 서로 연결될 수 있다. 가중치의 합이 최소가 된다. 크루스칼 알고리즘 // 작은 가중치 먼저(무방향 그래프) 사이클을 만들지 않는 범위에서 최소 비용 간선을하나씩 더해가면서 최소 신장 트리를 만든다. 현재 선택할 수 있는 가장..

[알고리즘] 그래프

그래프 버스 정류장과 여러 노선이 함께 포함된 형태 또는, 링크드인(Linked in)과 같은 사회 관계망 서비스의 연결 등의 형태 현상이나 사물을 정점과 간선으로 표현하는 것 G = (V, E) V : 정점의 집합 정점 Vertex 노드 Node 독립형 객체/Circle로 표현 E : 간선의 집합 간선 Edge 링크 Link 두개의 정점을 결하는 객체 화살표 또는 실선으로 표현 두 정점이 간선으로 연결되어 있으면 인접하다(Adjacent)고 한다 방향 그래프 방향성에 따른 분류 방향 있는 간선(Directed Edges)을 지닌 그래프 각 간선은 하나의 정점을 떠나서, 하나의 정점으로 들어감 Self-loop(Self-edge) 가능 두 정점 사이에 최대 2개의 간선 존재 가능 무방향 그래프 방향 없는..

[알고리즘] 트리 알고리즘

트리 계층적 구조를 표현하는 자료 구조 이진 트리 각 노드가 최 두 개의 자식을 갖는 트리 완전 이진 트리 마지막 레벨을 제외하고 모든 레벨이 완전히 채워져 있는 트리 마지막 레벨은, 노드가 왼쪽에서 오른쪽으로 채워져야 함 오른쪽으로부터 비어 있을 수 있음 배열을 이용하여 표현 가능 이진 트리 표현 배열 표현 - 모든 노드의 상위, 왼쪽 하위 및 오른쪽 하위의 위치를 쉽게 결정 가능 - 모든 노드 i 에 대해 완전한 이진 트리에서 1) parent(i) = [i/2] 2) leftchild(i) = 2i 3) rightchild(i) = 2i + 1 - skewed(비뚤어진) tree인 경우, 공간 낭비 연결 리스트 표현 - 순차적 표현의 일반적인 부적절성 - skewed tree위한 낭비 - 트리 중앙..

[알고리즘] 문제 풀이 해답

점수 계산(2822번) 상근이는 퀴즈쇼의 PD이다. 이 퀴즈쇼의 참가자는 총 8개 문제를 푼다. 참가자는 각 문제를 풀고, 그 문제를 풀었을 때 얻는 점수는 문제를 풀기 시작한 시간부터 경과한 시간과 난이도로 결정한다. 문제를 풀지 못한 경우에는 0점을 받는다. 참가자의 총 점수는 가장 높은 점수 5개의 합이다. 상근이는 잠시 여자친구와 전화 통화를 하느라 참가자의 점수를 계산하지 않고 있었다. 참가자의 8개 문제 점수가 주어졌을 때, 총 점수를 구하는 프로그램을 작성하시오. score = [int(input()) for _ in range(8)] sum = 0 idx = [] for i in range(5): sum += max(score) a = score.index(max(score)) idx.ap..

[알고리즘] 특수 정렬 알고리즘

기수 정렬 알고리즘 모두 k 자릿수 이하의 자연수인 특수한 경우 시간 복잡도 O(n) 계수 정렬 알고리즘 정렬하고자 하는 원소들의 값이 O(n)을 넘지 않는 경우 정렬할 데이터에 대한 사전 지식을 이용 시간 복잡도 O(n) arr = [1,2,5,4,7,8] count = [0] * (max(arr) + 1) for num in arr: count[num] += 1 for i in range(1, len(count)): count[i] += count[i-1] result = [0] * (len(arr)) for num in arr: idx = count[num] result[idx - 1] = num count[num] -= 1 print(result)

[알고리즘] 고급 정렬 알고리즘

병합 정렬 알고리즘 분할정복 알고리즘 분할 : 1개 남을 때 까지 정복 : 재귀적으로 병합 : 다시 n개가 될 때까지 모든 원소를 다 나눈 다음에 병합하는 방식으로 정렬을 수행 시간 복잡도 O(nlogn) // 효율적 알고리즘 임시리스트 사용 def merge_sort(arr): if len(arr) < 2: return arr mid = len(arr)//2 left_arr = merge_sort(arr[:mid]) right_arr = merge_sort(arr[mid:]) merged_arr = [] l = r = 0 while l < len(left_arr) and r < len(right_arr): #내림차순일 경우 부호 반대 if left_arr[l] < right_arr[r]: merged_..