본문 바로가기
728x90

자료구조5

[알고리즘] 그래프: 이해와 활용하는 자료구조 그래프는 현대의 정보 시대에서 다양한 분야에서 활발히 사용되는 중요한 자료구조입니다. 이 글에서는 그래프의 기본 개념과 그래프를 활용하는 방법에 대해 알아보겠습니다. 또한, 이를 통해 다양한 분야에서 그래프가 어떻게 활용되는지에 대해 살펴보겠습니다.그래프의 기본 개념그래프는 노드(정점)와 간선(엣지)으로 이루어진 자료구조입니다. 이 노드들은 서로 연결되어 있으며, 이 연결 관계가 그래프의 핵심입니다. 무방향 그래프는 간선에 방향이 없는 경우이며, 양쪽으로 이동할 수 있습니다. 반면에 유향 그래프는 간선에 방향이 있는 경우로, 한 방향으로만 이동할 수 있습니다.Adjacency정점을 연결하는 모서리가 있는 경우 정점이 다른정점과 인접하다고 함Path(경로)정점 A에서 정점 B로 이동할 수 있는 일련의 가장.. 2024. 5. 7.
[알고리즘] 레드-블랙 트리: 이진 탐색 트리에 균형을 더한 자료구조 JS로 레드 블랙트리 구현하기 레드-블랙 트리는 이진 탐색 트리에 균형을 더한 자료구조입니다. 이 트리는 각 노드가 블랙 또는 레드의 색을 가지며, 몇 가지 규칙에 따라 구성됩니다. 이 규칙들은 트리가 균형을 유지하도록 하며, 검색, 삽입, 삭제 등의 연산에서 최악의 경우 시간 복잡도를 O(log n)에 유지할 수 있도록 합니다. 레드-블랙 트리의 규칙1. 노드 색깔각 노드는 블랙 또는 레드의 색깔을 가집니다.2. 루트 노드루트 노드는 무조건 블랙입니다.3. 새로운 추가 노드새로운 추가 노드는 레드로 추가됩니다.4. 연속된 레드 노드연속된 레드 노드가 올 수 없습니다. 즉, 부모-자식 간에 레드-레드 연결이 발생할 수 없습니다.5. 자식 노드레드 노드의 자식은 모두 블랙입니다.6. 블랙 노드 수루트에서 리프(leaf) 노드까지의 경로.. 2024. 5. 6.
[알고리즘] 트라이(Trie) 자료구조: 문자열 검색의 효율적인 해결책 문자열 검색은 컴퓨터 과학에서 중요한 문제 중 하나입니다. 특히, 대용량의 텍스트 데이터베이스나 자연어 처리 시스템에서 문자열을 효율적으로 찾아야 할 때 매우 중요한 역할을 합니다. 이를 위해 다양한 자료구조가 고안되었는데, 그 중에서도 트라이(Trie)는 문자열 검색을 위한 효율적인 해결책으로 널리 사용되고 있습니다. 이번 글에서는 트라이의 원리와 구현, 그리고 실제 응용 사례에 대해 알아보겠습니다.트라이(Trie)란?트라이는 검색 트리의 일종으로, 일련의 문자열을 저장하고 탐색하는 데 사용됩니다. 트라이는 각 문자열을 공통된 접두사(prefix)를 기준으로 묶어서 트리 구조로 나타냅니다. 이를 통해 문자열의 검색이 매우 빠르게 이루어지며, 시간 복잡도는 입력 문자열의 길이에 선형적으로 비례합니다. 즉.. 2024. 5. 5.
[알고리즘] 우선순위 큐를 이진힙(Heap)으로 구현하기 우선순위 큐(Priority Queue)는 각 요소가 우선순위 값과 연관되어 있는 특별한 유형의 대기열입니다. 이것은 FIFO(First-In-First-Out) 대기열과는 다르게, 요소들이 우선순위에 따라 처리됩니다. 즉, 높은 우선순위를 갖는 요소가 낮은 우선순위를 갖는 요소보다 먼저 처리됩니다. 이것은 일상생활에서 VIP가 다른 사람들보다 먼저 서비스를 받는 것과 유사합니다. 우선순위 큐를 구현할 때, 이진힙(Heap) 자료구조를 사용하는 것이 일반적입니다. 이진힙은 완전이진트리(Complete Binary Tree)로서, 부모 노드의 값이 자식 노드의 값보다 항상 크거나 작은 성질을 가집니다. 이를 통해 우선순위 큐의 삽입(insert)과 삭제(delete) 연산을 O(logn)의 시간 복잡도로 .. 2024. 5. 3.
파이썬에서의 집합(Set) 이해하기 안녕하세요, 파이썬의 집합(Set)에 대해 알아보는 시간을 가졌습니다. 집합은 파이썬의 자료형 중 하나로, 중복된 값이 없고 순서가 없는 항목들의 모임을 나타냅니다. 이는 수학 시간에 배운 집합과 유사한 특성을 가지고 있습니다. 이제 함께 집합의 중요성과 활용 방법에 대해 좀 더 자세히 알아보겠습니다. 우선, 왜 집합을 사용할까요? 집합은 데이터의 중복을 제거하거나, 두 데이터 집합 간의 관계를 파악할 때 유용합니다. 예를 들어, 두 목록 간의 공통 항목을 찾거나, 한 목록에서 다른 목록의 항목을 제거하는 등의 작업을 효율적으로 수행할 수 있습니다. # 두 개의 집합 생성 set_A = {1, 2, 3} set_B = {1, 2, 3, 4, 5} # set_A가 set_B의 부분집합인지 확인 result.. 2023. 12. 20.
728x90