2014-05-19 2 views
1

우선 순위 큐를 손상시키지 않고 queue.PriorityQueue() 클래스의 값을 삭제하는 좋은 방법이 있습니까? 이론적으로는 내가 필요로하는 것에 도달 할 때까지 get 모든 값을 얻을 수있는 루프를 만들 수 있으며, 삭제 된 노드를 포함하지 않고 다른 것들을 모두 다시 삽입 할 수 있습니다. 그래도 잔인한 것처럼 보입니다. 더 좋은 방법이 있습니까?파이썬 우선 순위 큐의 값 찾기

편집 : 노드에 도착하는 데 필요한 비용으로 키의 우선 순위 대기열을 만들려고합니다. 노드에 도달하는 데 더 싼 방법을 찾으면 우선 순위 큐에서 비용을 줄이려고합니다.

+2

다른 값을 들여다보고 싶다면 PriorityQueue가 원하는 데이터 구조가 아닐 수도 있습니다. 유스 케이스에 대해 더 자세히 알려주십시오. n 위, n 위 또는 무엇을 찾고 싶습니까? 어쨌든 다른 데이터 구조가 정말로 필요한 것처럼 들립니다. – smci

+0

이것은 데이터 구조 나 알고리즘의 선택에 문제가 있음을 분명히 나타냅니다. – perreal

+0

몇 가지 설명을 추가했습니다 ... – David

답변

2

queue 모듈과 그 클래스는 순수한 데이터 구조가 아닌 주로 동기화 (멀티 스레딩/다중 처리)에 사용되는 도구입니다.

아마 this question에 대한 답변이 필요하거나, heapq을 직접 사용해보십시오.

0

아니요, 우선 순위 대기열의 임의의 값을 삭제하는 좋은 방법은 없습니다. 우선 순위 큐에서 상위 (최소/최대) 요소 만 추출 할 수 있습니다.

O (log n)에서 노드를 찾아 삭제할 수 있으므로 설정 데이터 구조 (균형 이진 검색 트리)가 더 좋습니다.

관련 문제