Max-beräkning - vilken av byggnaderna är högst på denna x-koordinat? Måste göras upprepade gånger.
En max-heap kan användas för att hitta högsta byggnaden.
En min-heap kan användas för att hålla reda på vilka hus som är aktuella.
Datastrukturer: Det här knepiga problemet kan vi lösa med hjälp av två heapar.
Algoritm:
Programkod (ej krav på tentan - finns med här för att du lättare ska förstå algoritmen)
from maxheap import MaxHeap from minheap import MinHeap class House: left = None height = None right = None def __init__(self, left, height, right): self.left = left self.height = height self.right = right def readHousesTo(xheap): ins = raw_input("Vilka hus finns? ").split() for h in ins: h = h.strip("()") hs = h.split(",") house = House(int(hs[0]), int(hs[1]), int(hs[2])) print house xheap.put(house, house.left) xheap = MinHeap(20) yheap = MaxHeap(20) readHousesTo(xheap) # Läs in husen x = 0 y = 0 while not xheap.isempty(): house = xheap.get() if house.left > x: # Hus med vänstervägg utplockat x = house.left if house.height > y: y = house.height print "x=", x, "y=", y xheap.put(House(house.left, house.height, house.right), house.right) yheap.put(House(house.left, house.height, house.right), house.height) else: # Hus med högervägg utplockat if house.height == y: # Det var det just nu högsta huset # Sök efter det hus som blir högst nu x = house.right while not yheap.isempty() and yheap.top().right <= x: yheap.get() # Ta bort hus som ligger... # ...till vänster om x if yheap.isempty(): y = 0 else: y = yheap.top().height print "x=", x, "y=", y