본문 바로가기
반응형

Computer Science77

[알고리즘 algorithm] 이진 검색 Binary Search 정의와 사용 예제 이진 검색: 정렬된 배열에서 타겟을 찾는 검색 알고리즘. 시간복잡도가 O(logN)로 1억개의 데이터에서도 단 27번 안에 원하는 데이터를 찾아낼 수 있는 정말 마법같은 검색 알고리즘이다. 이진탐색트리와 이진검색은 유사한 점이 많은데 이진탐색트리(BST)가 정렬된 구조를 저장하고 탐색하는 자료구조라면, 이진검색은 정렬된 배열에서 값을 찾아내는 알고리즘 자체를 지칭한다. 이진 검색 기본 문제: leetcode.com/problems/binary-search/ Binary Search - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepare.. 2021. 4. 15.
[알고리즘 algorithm] 정렬 sort 종류와 예제 코드(버블 정렬, 선택 정렬, 삽입 정렬, 병합 정렬, 퀵 정렬, 안정 정렬, 불안정 정렬, 계수 정렬) 1. 가장 비효율적인 정렬, 버블 정렬(Bubble Sort) 시간복잡도: O(n2) def bubble(a): n = len(a) for _ in range(n-1): for i in range(n-1): if a[i] > a[i+1]: a[i], a[i+1] = a[i+1], a[i] 2. 제자리 정렬, 선택 정렬(Selection Sort) 시간복잡도 : O(n2) def selection(a): n = len(a) for i in range(n-1): min_idx = i for j in range(i+1, n): if a[min_idx] > a[j]: min_idx = j a[i], a[min_idx] = a[min_idx], a[i] 3. 제자리 정렬, 삽입 정렬(Insert Sort) 시간복.. 2021. 4. 14.
[자료구조] 힙 Heap 정의와 연산 힙 : 힙의 특성을 만족하는 거의 완전한 트리인 특수한 트리 기반의 자료구조 힙의 예시로 최소 힙이 있다. 부모가 항상 자식보다 작기 때문에 루트가 결국 가장 작은 값을 갖게 된다. 주의할 점은 힙은 정렬된 구조가 아니다. 최소 힙의 경우 부모 노드가 항상 작다는 조건만 만족할 뿐 좌우에 대한 관계는 정의하지 않는다. - 삽입 삽입에는 업힙(up heap)연산이 필요하고 과정은 다음과 같다. 삽입의 시간복잡도는 O(logN)이다. 1. 요소를 가장 하위레벨의 최대한 왼쪽으로 삽입 2. 부모 값과 비교해 값이 더 작은 경우 위치를 변경 3. 계속해서 부모 값과 비교해 위치를 변경(가장 작은 값일 경우 루트까지 올라감) - 추출 루트를 추출하면 되는 간단한 작업이지만 추출 이후 힙의 특성을 유지하는 작업이 .. 2021. 4. 14.
[자료구조] 이진탐색트리 Binary Search Tree / 주요 알고리즘 예제(전위 순회, 중위 순회, 후위 순회) 이진 '탐색' 트리 : 정렬된 트리 - 노드의 왼쪽 서브트리: 노드의 값보다 작은 값들을 지닌 노드들 - 노드의 오른쪽 서브트리: 노드의 값과 같거나 큰 값들을 지닌 노드들 이진탐색트리의 장점 -> 탐색의 시간 복잡도가 O(logN)이다. - 자가 균형 이진 탐색 트리 : 삽입, 삭제 시 자동으로 높이를 작게 유지하는 노드 기반의 이진탐색 트리 왼쪽 노드에 비해 오른쪽 노드가 높이를 가능한 작게 유지한 트리다. 즉 오른쪽 트리가 자가 균형 이진 탐색 트리다. 균형트리와 불균형트리의 성능차이는 매우 크다. 노드 갯수가 증가할수록 성능 차이는 커진다. 자가 균형 이진 탐색 트리의 대표적 예로 AVL 트리, 레드-블랙 트리가 있다. - 정렬된 배열로 자가 균형(또는 높이 균형) 이진탐색 트리 만들기 ☆☆☆ 문.. 2021. 4. 12.
[자료구조] 이진트리 주요 알고리즘 응용 문제를 잘 풀기 위해 기본을 탄탄하게 만들어야 한다. 이진트리 문제 중 기본에 해당하는 문제들을 익히면서 나만의 접근법을 완성시키자! 1. 이진트리 최대 깊이 탐색(dfs 사용하였다.) leetcode.com/problems/maximum-depth-of-binary-tree # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: max_dep =0 def maxDepth(self, root: TreeNode) -> int: def df.. 2021. 4. 10.
[자료구조] 트리 정의와 종류(그래프와의 차이점, 이진트리 유형) 트리 : 계층형 트리구조를 시뮬레이션하는 추상자료형으로, 루트값과 부모-자식 관계의 서브 트리로 구성되며, 서로 연결된 노드의 집합이다. 가장 큰 차이점은 트리는 순환 구조를 갖지 않는다는 것! 그래프는 단방향, 양방향을 모두 가리킬 수 있는 반면 트리는 단방향(부모->자식)뿐. 또한 트리는 하나의 부모만을 가지고 루트 또한 하나다. 위의 세 경우는 모두 트리가 아닌 경우의 예시다. 첫번째 - C의 부모가 둘이라 트리가 될 수 없음 두번째 - (A-B)와 (D-C-E)가 연결되어 있지 않고 루트가 둘이라 트리가 될 수 없음 세번째 - 순환구조라서 트리가 될 수 없음 이진 트리(Binary Tree) 트리 중 특히 모든 노드의 차수가 2 이하일 때를 이진 트리(Binary Tree)라고 부른다. 유형 3가.. 2021. 4. 9.
반응형