중화사전망 - 서예자전 - 파이썬 헤드 모듈 분석

파이썬 헤드 모듈 분석

참조:

Heapq 문서

파이썬 heapq 모듈 힙 데이터 구조 분석

힙의 데이터 구조는 파이썬에서도 모듈화되어 있습니다. Heapq 모듈을 호출하여 이러한 데이터 구조를 구축할 수 있으며, heapq 모듈은 힙을 조작할 수 있는 적절한 방법을 제공합니다.

Heap = [] # 빈 힙을 만들었습니다.

Item = heap [0] # 힙에서 최소값을 확인하고 꺼내지 않습니다.

Heap push(heap, item)# 힙에 새 값을 삽입합니다.

Item = heap pop(heap)# 힙에서 최소값을 꺼내고 힙이 비어 있으면 IndexError 예외를 보고합니다.

Heappushpop()# 1. 힙 2 에 값을 삽입합니다. 팝업 힙의 최소값입니다.

P.S. 1 는 가장 작은 요소가 팝업되도록 보장합니다. 2. heappush 이후 heappop 보다 효율이 더 빠릅니다.

Heap ify(x)# 선형 시간 동안 목록을 힙으로 변환합니다.

Item = heapreplace(heap, item)# 최소값을 팝업하고 반환한 다음 heapreplace 메소드의 item 값을 힙에 삽입하면 힙의 전체 구조가 변경되지 않습니다. 힙이 비어 있으면 IndexError 예외가 보고됩니다. 동일한 힙 크기를 확인해야 하는 경우에 적합합니다.

P.S. 1 팝업 요소가 추가된 항목보다 클 수 있습니다. 2. heappop, heappush 보다 효율이 빠릅니다.

Merge(* iterates, key = none, reverse = false)# 여러 힙을 병합하고 출력합니다.

Nlargest(n, iterbale, key = None)# 힙에서 n 의 수를 찾습니다. Key 의 기능은 목록 요소의 속성과 기능을 키워드로 사용하는 sorted () 메서드의 기능과 유사합니다.

Nmallest(n, 반복 가능, key = none)# 힙에 있는 n 의 최소 수를 찾습니다.

이 단락은 heapq 문서에서 발췌한 것이다.

힙은 메모리 및 보조 캐시에서 중요한 역할을 하는 데이터 구조입니다. 힙은 우선 순위 대기열에서 자주 사용되므로 힙 데이터 구조에 많은 문제를 야기합니다. 예를 들어, 몇 개의 예약된 작업이 메모리에 저장될 때 시퀀스 목록 (우선 순위, 작업) 을 정의하여 힙 구조에 저장할 수 있습니다. 하지만 많은 문제가 있습니다.

1. 정렬의 안정성: 작업이 힙에 추가될 때 두 작업의 우선 순위가 같고 목록에서 차이가 없을 경우 반환 값을 어떻게 얻을 수 있습니까?

2. 파이썬 3 이후 버전에서는 튜플 (태스크) 의 우선순위가 같고 태스크에 기본 비교 참조 값이 없는 경우 실제로 비교할 수 없습니다.

3. 한 작업의 우선 순위가 변경되면 해당 힙의 작업 우선 순위 변경을 어떻게 처리합니까? 힙에서의 위치는 확실히 바뀔 것입니다.

4. 다른 작업을 기다려야 하기 때문에 작업이 일시 중지된 경우 (예: 상위 프로세스를 기다리는 경우) 힙에서 해당 작업을 찾아 수행 (우선 순위 감소 또는 작업 삭제) 하려면 어떻게 해야 합니까?

우리는 삼원 배열의 방법으로 처음 두 가지 문제를 해결할 수 있다. 우선순위, 입력 값 및 태스크 값을 설정합니다. 두 작업의 우선 순위가 같더라도 항목 값이 다르므로 CPU 가 로드하는 순서를 결정하는 데 도움이 됩니다.

해결해야 할 나머지 문제는 일시 중지 및 연기된 작업을 찾은 다음 우선 순위를 수정하거나 작업을 영구적으로 삭제하는 방법입니다. 사전을 사용하여 힙에 있는 작업의 항목 값을 가리킬 수 있습니다.

마지막으로 삭제 작업은 힙의 구조를 변경합니다. 힙 구조의 특성을 보장하기 위해 삭제할 기존 작업의 항목 값을 표시한 다음 작업에 태그를 다시 지정하여 힙에 추가할 수 있습니다.