2009-11-17 30 views
17

Cách chính thức của việc nhìn trộm trong một đống python như được tạo ra bởi các libs heapq là gì? Ngay bây giờ tôi cóNhìn trộm trong một đống trong python

def heappeak(heap): 
    smallest = heappop(heap) 
    heappush(heap, smallest) 
    return smallest 

được cho là không đẹp lắm. Tôi có thể luôn luôn giả định rằng heap[0] là đầu của heap và sử dụng? Hoặc điều đó có giả định quá nhiều việc triển khai cơ bản không?

+2

Bạn có nghĩa là "peek" không? – chazomaticus

Trả lời

27

Có, bạn có thể làm cho giả thiết này, bởi vì nó được ghi trong documentation:

Heaps là mảng mà heap[k] <= heap[2*k+1]heap[k] <= heap[2*k+2] cho tất cả k, đếm yếu tố từ zero. Vì lợi ích của so sánh, các thành phần không tồn tại là được coi là vô hạn. thuộc tính thú vị của một đống là heap[0] luôn là phần tử nhỏ nhất.

(Và có lẽ đó là lý do không có peek chức năng:. Không có nhu cầu cho nó)

+0

Lý do tôi không thể tìm thấy thông tin này có lẽ là do tôi đã viết sai chính tả. Tuyệt quá! – Thomas

+4

Mặc dù chính tả nó sẽ * có lẽ * đã giúp bạn, tôi quan sát tò mò rằng từ đó không xảy ra trong tài liệu. – Stephan202

5

Nếu bạn đang sử dụng Python 2.4 hoặc mới hơn, bạn cũng có thể sử dụng heapq.nsmallest() .

+1

Nhưng ít nhất là O (n) .... –

+1

Có phải "n" 1 trong trường hợp này không? – javadba

Các vấn đề liên quan