AI 부트캠프
-
[n532] GraphAI 부트캠프 2022. 2. 7. 14:13
그래프 기본 개념 노드들이 서로 연결되어 루프 구조를 띌 수 있다. 그래프와 트리의 쓰임은 다소 다르다. 예를 들어, 그래프는 object간의 관계성을 표현할 때 쓰인다. 트리는 계층을 표현할 때 유용하다. 하지만, 그래프는 계층 개념이 존재하지 않는다. Directed Graph 그래프가 한 쪽 방향으로 흐르는 그래프를 의미한다. 방향에 따라 흐르기 때문에 순서가 있고, 마지막 노르 (Leaf Node)가 존재한다. 아래 그림은 Directed graph이고, 이 화살표가 양방향일 경우는 Bidirectional Graph(양방향 그래프)이다. Undirected Graph 무방향성이지만 인접한 노드끼리 서로 상호 교환 관계이다. Cyclic and Acyclic Graphs Cyclic graph ..
-
[n531] 해쉬 테이블AI 부트캠프 2022. 2. 4. 10:43
해시 테이블이란 무엇인가 해시 테이블 : 키를 이용하여 데이터 값에 접근이 가능한 구조를 의미한다. 해시 함수 : 키에 따라 특정 해시값이 나올 수 있도록 매칭하는 함수이다. 해시 : 이 해시 함수에 키를 넣었을 때 나오는 값이다. 해싱 : 검색을 하기 위해 어떤 자료 구조를 해시화 한다. 해싱을 하면 키를 통해 값을 검색하기 때문에 데이터 양이 많아도 성능이 빠르다. 예를 들어, 파이썬의 딕셔너리는 해시테이블 개념을 바탕으로 구현되어 있다. 해시 테이블은 시간 복잡도가 O(1)로, 하나의 키를 통해 하나의 값이 한번에 나오기 때문에 검색/삽입/삭제가 유용하다. 중간에 해시 함수를 통해 키와 값이 서로 매칭되는 것을 확인할 수 있다. 즉, 동일한 입력값에 동일한 출력값을 매번 출력해야 한다. for ke..
-
[n524] 알고리즘 (2)AI 부트캠프 2022. 1. 28. 10:21
Divide and Conquer(분할 정복) 방법 분할과 정보는 큰 문제를 작은 단위로 나눠서 푸는 알고리즘 방법이다. 재귀 호출과의 차이점은 재귀의 경우 같은 함수 코드를 재호출 하는 것이며, 분할 정복은 비슷한 작업을 재진행 하는 점이다. 즉, 분할 정복은 같은 함수 코드를 재호출 하는 것은 아닐 수 있다. 문제 분할을 스텝 1~5 방향으로 했다면, 문제 해결은 스텝 5~1 방향으로 되어야 한다. 즉 문제를 분할 하는 과정과 해결하는 과정이 있다. 퀵정렬과 병합정렬(Quick Sort and Merge Sort) 둘 다 분할과 정복 (divide and conquer) 개념으로 문제를 해결한다. 보통, 퀵 정렬이 병합 정렬 시간 복잡도는 둘 다 O(nlogn)이다. 퀵 정렬은 좌 우로 나눠서 재귀적..
-
[n523] 알고리즘AI 부트캠프 2022. 1. 27. 10:36
Sorting Algorithms (정렬 알고리즘) Selection Sort(선택정렬) 이름이 왜 선택 정렬인가? 가장 작은 노드를 '선택'해서 비교하므로. 가장 작은 노드 하나를 선택한 뒤, 맨 왼쪽 노드와 비교한다. 가장 작은 노드가 왼쪽 노드보다 작으면 교환. 최소노드 선택 -> 왼쪽부터 비교 -> 교환하는 과정을 반복한다. 아래 그림 예시에서, 첫 번째 인덱스는 기준점이 된다. 그 외의 노드들 중 가장 작은 값 13과 첫번째 인덱스 값을 비교한다. 13이 더 작으면 첫 번째 인덱스 값과 교환을 하고, 아니면 바로 pass 한다. 위의 과정을 계속해서 반복 한다. 시간 복잡도는 O(n^2)이다. # 선택정렬 소스코드 def selection_sort(li): for i in range(len(li..
-
[n522] Data Structure (2)AI 부트캠프 2022. 1. 26. 10:54
트리 (Tree) Node: 트리에서 데이터를 저장하는 기본 요소. Root Node: 트리 맨 위에 있는 노드 이다. Level: 최상위 노드를 Level 0이며, 하위 Branch로 연결된 노드의 깊이를 나타낸다. Parent Node: 어떤 노드의 다음 레벨에 연결된 노드 Child Node: 어떤 노드의 자식 노드 Leaf Node (Terminal Node): Child Node가 하나도 없는 노드 (가장 맨 끝의 노드) Sibling (Brother Node): 동일한 Parent Node를 가진 노드 Depth: 트리에서 Node가 가질 수 있는 최대 Level [자료구조] 트리 트리 (Tree) 1. 트리 구조 트리: Node, Branch로 이루어진 그래프로 사이클을 이루지 않도록 구성한..
-
[n521] Data StructureAI 부트캠프 2022. 1. 25. 09:44
자료구조 선형 자료구조 : 데이터들을 일렬로 나열된 형태로 저장할 때 사용 (정적)배열, 동적 배열, 연결 리스트 배열 : 반드시 선언할 때 크기를 결정 => 크기는 고정적, 절대 변경 불가. 메모리 상에서 배열의 원소들이 연속적으로 붙어 있다. 장점 : 인덱스를 통해서 빠르게 접근 가능 (Read가 쉽다) 단점 : 크기가 고정적이므로 그 크기보다 많은 데이터가 들어오면 혼란스럽다. 데이터 추가 : O(n) 동적 배열 : 배열의 크기를 유동적으로 조절할 수 있는 배열. 메모리 상에서 배열의 원소들이 연속적으로 붙어 있다. 장점 : 인덱스를 통해서 빠르게 접근 가능 (Read가 쉽다). 배열의 크기 유동적으로 조절 가능 연결 리스트 : 원소들이 메모리 상에서 연속적으로 붙어 있지 않다. => 인덱스로 빠른..
-
[n514] 필수적인 자료 구조AI 부트캠프 2022. 1. 21. 09:52
파이썬의 리스트 자료구조의 기본은 배열이라 할 수 있고, 파이썬에서는 리스트와 튜플로 구현할 수 있다. 리스트나 튜플의 핵심은 인덱스를 사용하는 것이다. # 리스트 인덱싱/슬라이싱 예시 example = [10, 20, 30, 40, 50] print('example[0:3] 결과:', example[0:3]) print('example[::2] 결과:', example[::2]) print('example[0:1:3] 결과:', example[0:1:3]) print('example[-3] 결과:', example[-3]) print('example[-3:-1] 결과:', example[-3:-1]) example[0:3] 결과: [10, 20, 30] example[::2] 결과: [10, 30, 5..