Python에서 힙과 우선순위 큐의 사용 시나리오는 무엇입니까?
Python에서 힙과 우선순위 큐의 사용 시나리오는 무엇입니까?
힙은 동적 컬렉션을 효율적으로 유지하는 데 자주 사용되는 특수 이진 트리 구조입니다. Python의 heapq 모듈은 힙 구현을 제공하고 힙 작업을 쉽게 수행할 수 있습니다.
우선순위 큐는 일반 큐와는 달리 각 요소에 연관된 우선순위를 갖는 특별한 데이터 구조입니다. 우선순위가 가장 높은 요소가 먼저 제거됩니다. Python의 heapq 모듈은 우선순위 대기열 기능을 구현할 수도 있습니다.
아래에서는 힙 및 우선순위 대기열을 사용하는 몇 가지 구체적인 시나리오를 소개하고 관련 코드 예제를 제공합니다.
- 상위 K 문제 찾기
시퀀스에서 처음 k개의 가장 큰 또는 가장 작은 요소를 찾는 것은 첫 번째 k개의 가장 큰 숫자 또는 첫 번째 k개의 가장 작은 숫자를 찾는 것과 같은 일반적인 문제입니다. 이 문제는 k 크기의 힙이나 우선순위 큐를 사용하여 쉽게 해결할 수 있습니다.
import heapq def top_k_smallest(nums, k): heap = [] for num in nums: heapq.heappush(heap, num) if len(heap) > k: heapq.heappop(heap) return heap nums = [5, 3, 8, 2, 7, 1, 9] k = 3 result = top_k_smallest(nums, k) print(result) # 输出 [3, 2, 1]
- 순서 있는 배열 병합
순서 있는 배열을 형성하기 위해 여러 개의 순서 있는 숫자를 병합하는 것은 일반적인 문제입니다. 우선순위 큐를 사용하여 구현할 수 있습니다. 매번 각 배열에서 가장 작은 요소를 꺼내어 우선순위 큐에 넣은 다음 큐에 있는 요소를 순서대로 꺼냅니다.
import heapq def merge_sorted_arrays(arrays): result = [] pq = [] for array in arrays: if array: heapq.heappush(pq, (array[0], array)) while pq: smallest, array = heapq.heappop(pq) result.append(smallest) if array[1:]: heapq.heappush(pq, (array[1], array[1:])) return result arrays = [[1, 3, 5], [2, 4, 6], [0, 7, 8]] result = merge_sorted_arrays(arrays) print(result) # 输出 [0, 1, 2, 3, 4, 5, 6, 7, 8]
- 중앙값 찾기
수열의 중앙값을 찾는 것은 고전적인 문제입니다. 이는 두 개의 힙, 즉 시퀀스의 전반부에 대한 최대 힙과 시퀀스의 후반부에 대한 최소 힙을 사용하여 달성할 수 있습니다. 두 힙의 크기를 1씩 동일하거나 다르게 유지하면서 중앙값을 힙의 맨 위에서 가져올 수 있습니다.
import heapq def median(nums): min_heap = [] max_heap = [] for num in nums: if len(max_heap) == 0 or num <= -max_heap[0]: heapq.heappush(max_heap, -num) else: heapq.heappush(min_heap, num) if len(max_heap) > len(min_heap) + 1: heapq.heappush(min_heap, -heapq.heappop(max_heap)) elif len(min_heap) > len(max_heap): heapq.heappush(max_heap, -heapq.heappop(min_heap)) if len(max_heap) > len(min_heap): return -max_heap[0] elif len(min_heap) > len(max_heap): return min_heap[0] else: return (-max_heap[0] + min_heap[0]) / 2 nums = [4, 2, 5, 7, 1, 8, 3, 6] result = median(nums) print(result) # 输出 4.5
위는 Python의 힙 및 우선순위 큐에 대한 몇 가지 일반적인 사용 시나리오와 샘플 코드입니다. 힙과 우선순위 큐는 일반적으로 사용되는 데이터 구조이며, 이들의 사용법을 익히는 것은 일부 복잡한 문제를 해결하는 데 매우 도움이 됩니다.
위 내용은 Python에서 힙과 우선순위 큐의 사용 시나리오는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Redis와 MongoDB는 모두 널리 사용되는 오픈 소스 NoSQL 데이터베이스이지만 설계 개념과 사용 시나리오가 다릅니다. 이 기사에서는 Redis와 MongoDB의 차이점과 사용 시나리오에 중점을 둘 것입니다. Redis 및 MongoDB 소개 Redis는 캐시 및 메시지 미들웨어로 자주 사용되는 고성능 데이터 저장 시스템입니다. Redis는 메모리를 기본 저장 매체로 사용하지만 데이터를 디스크에 유지하는 기능도 지원합니다. Redis는 다양한 데이터 구조(예:

Redis와 Elasticsearch의 차이점 및 사용 시나리오 인터넷 정보의 급속한 발전과 대규모 정량화로 인해 데이터의 효율적인 저장 및 검색이 점점 더 중요해지고 있습니다. 이로 인해 NoSQL(NotOnlySQL) 형태의 데이터베이스가 등장했고, 그 중 Redis와 Elasticsearch가 더 많이 사용되고 있습니다. 이 문서에서는 Redis와 Elasticsearch를 비교하고 사용 시나리오를 살펴봅니다. Redis와 Elasticsearch

차이점: 1. 힙 공간은 일반적으로 프로그래머에 의해 할당 및 해제되는 반면, 스택 공간은 운영 체제에 의해 자동으로 할당 및 해제됩니다. 2. 힙은 2차 캐시에 저장되며, 그 수명 주기는 가상 머신의 가비지 수집 알고리즘에 의해 결정되는 반면, 스택은 호출될 때 일반적으로 저장 공간에 있는 1차 캐시를 사용합니다. , 통화가 완료되면 즉시 해제됩니다. 3. 데이터 구조가 다릅니다. 힙은 트리로 간주할 수 있지만 스택은 선입 후출 데이터 구조입니다.

Python의 deque는 컴퓨팅에서 가장 일반적인 목록 기반 데이터 유형인 우아하고 효율적인 Python 대기열 및 스택을 구현하는 데 유용한 저수준의 고도로 최적화된 deque입니다. 이 기사에서 Yun Duo는 다음 사항을 함께 학습합니다: deque를 사용하여 요소를 효과적으로 팝업하고 추가합니다. deque를 사용하여 효율적인 대기열을 만듭니다. Python 목록 및 팝업 요소의 끝 작업은 일반적으로 매우 효율적입니다. 시간 복잡도를 Big O로 표현하면 O(1)이라고 말할 수 있습니다. 그리고 Python이 새 요소를 허용하기 위해 기본 목록을 늘리기 위해 메모리를 재할당해야 할 때,

Redis의 우선순위 큐 구현에 대한 자세한 설명 우선순위 큐는 특정 규칙에 따라 요소를 정렬하고 큐 작업 중에 이 순서를 유지할 수 있는 공통 데이터 구조이므로 큐에서 꺼낸 요소는 항상 사전 설정된 우선순위 수행을 따릅니다. 인메모리 데이터베이스인 Redis는 빠르고 효율적인 데이터 액세스 기능으로 인해 우선순위 대기열을 구현하는 데에도 이점이 있습니다. 이번 글에서는 우선순위 큐를 구현하기 위한 Redis의 방법과 적용 방법을 자세히 소개하겠습니다. 1. Redis 구현의 기본 원칙 Redis 우선 순위 큐 구현의 기본 원칙

힙과 스택의 차이점: 1. 메모리 할당 방법이 다릅니다. 힙은 프로그래머에 의해 수동으로 할당 및 해제되는 반면, 스택은 운영 체제에 의해 자동으로 할당 및 해제됩니다. 스택은 고정되어 있지만 스택은 운영 체제에 의해 자동으로 할당 및 해제됩니다. 3. 데이터 액세스 방법은 힙에서는 포인터를 통해 이루어지지만 스택에서는 데이터가 액세스됩니다. 4. 데이터 수명주기 힙에서는 데이터 수명주기가 매우 길 수 있지만 스택에서는 변수의 수명주기가 해당 변수가 위치한 범위에 따라 결정됩니다.

Java 힙과 스택의 차이점: 1. 메모리 할당 및 관리 2. 스토리지 콘텐츠 3. 스레드 실행 및 수명 주기 자세한 소개: 1. 메모리 할당 및 관리 Java 힙은 주로 객체 인스턴스를 저장하는 데 사용되는 메모리 영역입니다. Java에서는 객체가 생성되면 해당 메모리를 할당합니다. 힙의 크기는 런타임에 동적으로 조정되거나 JVM 매개변수 등을 통해 구성될 수 있습니다.

PHP의 힙 데이터 구조는 완전한 바이너리 트리와 힙 속성(부모 노드 값이 자식 노드 값보다 크거나 작음)을 만족하는 트리 구조이며, 배열을 사용하여 구현됩니다. 힙은 정렬(작은 요소에서 큰 요소로 가장 큰 요소 추출)과 우선순위 큐(우선순위에 따라 가장 큰 요소 추출)라는 두 가지 작업을 지원합니다. 힙의 속성은 각각 heapifyUp 및 heapifyDown 메서드를 통해 유지됩니다.
