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