Computer Science/Data structure 5

[자료구조] 트라이(Trie) - javascript

✅ 트라이(Trie)란? 문자열의 집합을 표현하는 트리 자료구조로, 문자열을 검색하는데 최적화된 구조. 루트부터 문자를 하나씩 따라 내려가면서 일치 여부를 확인하면 됨. 📌 구현 아래 코드는 leetcode 208. Implement Trie (Prefix Tree)의 풀이와 같음 // 트라이의 각 노드의 형태 class TrieNode { constructor() { this.children = {}; // 다음 글자들이 TrieNode로 들어가서 이어짐 this.endWord = false; // 여기까지가 단어의 끝인지 여부 } } // 트라이 생성 // ex) ap, ab => {children: { a: {children: {p: {children: {}, endWord: true}, b: {c..

[자료구조] 그래프(Graph) - javascript

들어가기 전에... 해당 글은 유데미 JavaScript 알고리즘 & 자료구조 마스터클래스 강의를 바탕으로 더 효율적이고 간결하게 수정된 코드이다. ✅ 그래프란? 유한하고 변할 수 있는 꼭지점이나 노드나 점들의 집합으로 구성된 데이터 구조 💡 구성 요소 정점(vertax): 각 노드 간선(edge): 정점을 잇는 선 💡 그래프의 종류 트리: 두 개의 정점이 하나의 경로로 이어져 있는 그래프 유방향/무방향 그래프: 간선의 방향 유무로 구별되는 그래프 가중/비가중 그래프: 간선에 값 부여 여부로 구별되는 그래프 밀집 그래프: 노드 ↓, 간선 ↑ / 희소 그래프: 노드 ↑, 간선 ↓ ex) 구글 맵을 만든다면 => 가중 & 유방향 그래프 (가중 - 위치 사이에 거리가 값으로 부여 / 유방향 - 일방통행, 쌍방..

[자료구조] 이진 힙 (Binary Heaps) - javascript

들어가기 전에... 해당 글은 유데미 JavaScript 알고리즘 & 자료구조 마스터클래스 강의를 바탕으로 작성되었으며, 좀 더 효율적이고 간결하게 수정된 부분이 있다. ✅ 이진 힙이란? 이진 트리를 이용해서 만든 자료구조로 완전 이진 트리이고, 가능한 적은 용량을 차지하기 때문에 효율적임 각 노드는 최대 두 개의 자식을 가짐 최대 이진 힙 : 부모의 값이 자식보다 큼 최소 이진 힙: 자식의 값이 부모보다 큼 형제 사이에는 크기 규칙이 없음 왼쪽부터 오른쪽으로 값을 채워야 함 📌 배열을 이용한 구현 인덱스 규칙 왼쪽 자식 = 부모x2 + 1 오른쪽 자식 = 부모x2 + 2 부모 = Math.floor(자식index-1 / 2) 📝 최대 힙 class MaxBinaryHeap { constructor() ..

[자료구조] 이진 탐색 트리(Binary Search Tree) - javascript

들어가기 전에... 해당 글은 유데미 JavaScript 알고리즘 & 자료구조 마스터클래스 강의를 바탕으로 작성되었다. 수도 코드를 보고 혼자 구현해보고, 이후 강의에서 주어진 코드를 참고하여 수정했다! 강의에 나온 코드를 최대한 효율적이고 수정했기에 강의 속 코드보다 좋은 코드일 것이라 생각한다. ✅ 이진 탐색 트리 노드의 왼쪽에는 노드의 값보다 작은 숫자가 있어야 한다 노드의 오른쪽에는 노드의 값보다 큰 숫자가 있어야 한다 노드의 왼쪽과 오른쪽에 위치한 트리도 이진 탐색 트리여야 한다 => 왼쪽 트리의 모든 값은 노드보다 작아야하고, 오른쪽은 커야 함 📌 구현 - 연결리스트 class Node{ constructor(value) { this.value = value; this.left = null; ..

[자료구조] 단일 & 이중 연결 리스트 - javascript

들어가기 전에... 해당 글은 유데미 JavaScript 알고리즘 & 자료구조 마스터클래스 강의를 바탕으로 작성되었다. 수도 코드를 보고 혼자 구현해보고, 이후 강의에서 주어진 코드를 참고하여 수정했다! 강의에 나온 코드를 최대한 효율적이고 수정했기에 강의 속 코드보다 좋은 코드일 것이라 생각한다. 📌 단일 연결 리스트 // 노드 형식 class Node { constructor(val) { this.val = val; this.next = null; } } class SingleLinkedList { constructor() { this.head = null; this.tail = null; this.length = 0; } // 맨 뒤에 노드 추가 push(val) { let newNode = new..