728x90
반응형

알고리즘 6

시간 복잡도와 공간 복잡도

1. 알고리즘 복잡도 표현방법알고리즘의 복잡도를 표현하는 방법에는 시간 복잡도와 공간 복잡도가 있으며, 이는 각각 알고리즘이 실행되는 데 필요한 시간과 메모리를 나타냅니다. 일반적으로 복잡도는 빅오 표기법(O-표기법)을 사용하여 입력 크기 nnn에 대한 성능을 간략히 표현합니다. 시간 복잡도는 알고리즘의 실행 시간이 입력 크기에 따라 어떻게 증가하는지를 나타내며, 예로 O(1)O(1)O(1)은 상수 시간, O(n)O(n)O(n)은 선형 시간, O(n2)O(n^2)O(n2)는 이차 시간 복잡도를 뜻합니다. 공간 복잡도는 알고리즘이 사용하는 메모리의 양을 나타내며, 입력 크기에 따라 필요로 하는 추가 공간의 크기를 분석합니다. 또한, 빅오 외에 빅세타(Θ)와 빅오메가(Ω)를 사용해 각각 평균 및 최적의 성능..

1. 힙힙(Heap)은 완전 이진 트리의 일종으로, 최대 힙과 최소 힙 두 가지 유형이 있습니다. 최대 힙에서는 부모 노드가 자식 노드보다 항상 크거나 같으며, 루트 노드가 가장 큰 값을 갖습니다. 반대로 최소 힙은 부모 노드가 자식 노드보다 작거나 같고, 루트 노드가 가장 작은 값을 가집니다. 힙은 이진 탐색 트리와는 달리, 정렬된 구조가 아닌 우선순위를 기준으로 노드가 배치됩니다. 따라서 힙은 주로 우선순위 큐를 구현하거나 최대/최소값을 빠르게 추출해야 하는 알고리즘에 사용됩니다. 힙에서 삽입과 삭제 연산은 트리의 마지막 노드를 기준으로 이루어지며, 각 연산의 시간 복잡도는 O(log n)입니다. 또한, 완전 이진 트리의 특성상 배열을 사용해 효율적으로 구현할 수 있어, 힙은 메모리 구조적으로도 이점..

더블 링크드리스트

1. 더블 링크드리스트더블 링크드 리스트는 각 노드가 데이터와 함께 이전 노드와 다음 노드에 대한 두 개의 참조(포인터)를 포함하는 자료구조로, 양방향으로 탐색이 가능해 삽입과 삭제 시 단일 링크드 리스트보다 효율적이지만, 각 노드가 추가적인 메모리를 필요로 하고 구현이 더 복잡합니다. class Node: def __init__(self, data, prev=None, next=None): self.prev = prev self.data = data self.next = next class NodeMgmt: def __init__(self, data): self.head = Node(data) self.tail = self.he..

링크드리스트

1. 링크드리스트링크드 리스트는 데이터를 저장하는 노드들이 각각 데이터와 다음 노드에 대한 참조(포인터)를 포함하여 연결된 형태로 구성된 선형 자료구조로, 배열과 달리 크기가 가변적이며 삽입과 삭제가 용이하지만, 인덱스를 통한 직접 접근이 어려워 순차 탐색이 필요합니다.# 링크드리스트 구현# 파이썬에서는 링크드리스트를 구현할 때 클래스를 주로 활용class Node: def __init__(self, data): self.data = data self.next = None# Node 객체와 Node 객체를 연결하기(포인터 활용)node1 = Node(1)node2 = Node(2)print(node1)print(node2)node1.next = node2head = node..

큐와 스택

1. 큐(Queue)큐는 데이터를 저장할 때 선입선출(FIFO, First In First Out) 방식으로 처리하는 자료구조로, 마치 사람들이 줄을 서서 기다릴 때 맨 앞에 선 사람이 먼저 서비스를 받는 것처럼, 먼저 들어온 데이터가 가장 먼저 나가는 구조이며, 주로 대기열이나 순차적인 작업 처리에 사용됩니다. import queuedata_queue = queue.Queue()data_queue.put('Hello') # Enqueuedata_queue.put('Python')data_queue.put('Hello')data_queue.put('World')print(data_queue)print(data_queue.qsize())print(data_queue.get()) # Dequeueprint(..

자료구조와 알고리즘

1. 자료구조자료구조는 데이터를 효율적으로 저장하고 관리하기 위한 체계나 형식을 의미하며, 다양한 종류의 데이터 요소를 체계적으로 배열해 컴퓨터가 보다 빠르고 효율적으로 처리할 수 있도록 돕습니다. 배열, 리스트, 스택, 큐, 트리, 그래프 등 여러 형태가 있으며, 각 자료구조는 특정 상황에서 데이터 접근 및 조작 속도를 최적화하기 위해 사용됩니다. 올바른 자료구조의 선택은 알고리즘의 성능과 프로그램의 효율성을 크게 향상시킵니다. 2. 알고리즘알고리즘은 특정 문제를 해결하거나 작업을 수행하기 위해 정해진 단계별 절차나 명령어의 집합입니다. 즉, 주어진 입력값을 원하는 출력값으로 변환하는 과정을 체계적으로 정의한 것입니다. 알고리즘은 일상 생활의 간단한 조리법부터 복잡한 컴퓨터 프로그래밍의 문제 해결까지 ..

728x90
반응형