Esempio n. 1
0
 def sorted(self, iterable, cmp=cmp, key=None, reverse=False):
     from yaupon.data_structures.pairing_heaps import PairingHeap
     if reverse:
         mycmp = lambda x,y : -1 * cmp(x, y)
     else:
         mycmp = cmp
     heap = PairingHeap(backend=self, cmp=mycmp)
     for item in iterable:
         item_key = heap.getkey(item)
         if item_key is not None:
             heap.modifykey(item, (item_key[0], item_key[1] + 1))
         else:
             item_key = item
             if key is not None:
                 item_key = key(item)
             heap.insert(item, (item_key, 1))
     while heap:
         min_key = heap.findminkey()
         min_item = heap.deletemin()
         for i in xrange(min_key[1]):
             yield min_item
Esempio n. 2
0
def test_construction(backend):
    h = PairingHeap(backend=backend)
    assert h.findmin() is None
    with py.test.raises(StandardError):
        h.deletemin()

    h = PairingHeap(backend=backend, items=xrange(5))
    assert h.findmin() == 0
    for x in xrange(5):
        assert h.getkey(x) == x
    for x in xrange(5):
        assert h.deletemin() == x

    alphabet = 'abcdefghij'
    h = PairingHeap(backend=backend, 
                    keys=dict(zip(alphabet, xrange(len(alphabet)))))
    assert h.findmin() == 'a'
    for x in alphabet:
        assert h.getkey(x) == ord(x) - ord('a')
    for x in alphabet:
        assert h.deletemin() == x
Esempio n. 3
0
def test_interleaved_insertions(backend):
    h = PairingHeap(backend=backend)
    def assertmin(x):
        assert h.findmin() == x
        assert h.deletemin() == x

    h.insert('a', 20)
    assertmin('a')
    h.insert('a', 10)
    assertmin('a')
    h.insert('a', 10)
    h.insert('b', 5)
    assertmin('b')
    assertmin('a')
    h.insert('a', 10)
    h.insert('b', 5)
    h.insert('c', 7)
    h.insert('d', 12)
    h.insert('e', 1)
    h.insert('f', 11)
    h.insert('g', 2)
    assertmin('e')
    assertmin('g')
    assertmin('b')
    assertmin('c')
    assertmin('a')
    assertmin('f')
    assertmin('d')