コード例 #1
0
ファイル: running_median.py プロジェクト: eldojk/Workspace
 def __init__(self):
     self.ar = []
     self.med = None
     self.max_pq = PriorityQueue(100, MAX_PQ)
     self.max_pq_len = 0
     self.min_pq = PriorityQueue(100, MIN_PQ)
     self.min_pq_len = 0
     self.processed_first_two = False
コード例 #2
0
def compute_range(array, N):
    k = len(array)

    minpq = PriorityQueue(k, MIN_PQ)

    _min = maxint
    _max = -maxint
    for i in range(k):
        el = Element(array[i][0], 0, i)
        minpq.insert(el)

        if el.data < _min:
            _min = el.data

        if el.data > _max:
            _max = el.data

    start = _min
    end = _max
    rang = _max - _min

    while True:
        min_el = minpq.delete_top()
        _min = min_el.data

        new_range = _max - _min

        if new_range < rang:
            rang = new_range
            start = _min
            end = _max

        nxt_array = min_el.array
        nxt_idx = min_el.index + 1

        if nxt_idx < N:
            nxt_el = Element(array[nxt_array][nxt_idx], nxt_idx, nxt_array)

            if nxt_el.data > _max:
                _max = nxt_el.data

        else:
            break

        minpq.insert(nxt_el)

    return start, end
コード例 #3
0
def get_char_counts(string):
    hm = {}

    for c in string:
        if c in hm:
            hm[c] += 1

        else:
            hm[c] = 1

    keys = hm.keys()
    pq = PriorityQueue(len(keys), MAX_PQ)

    for k in keys:
        pq.insert(Node(k, hm[k]))

    return pq
コード例 #4
0
def re_arrange(string):
    li = list(string)
    n = len(li)
    cc = [0 for i in range(26)]

    for i in xrange(len(string)):
        c = string[i]
        idx = ord(c) - ord('a')
        cc[idx] += 1

        if cc[idx] > ceil(n / 2.0):
            print cc[idx]
            return 'Nope'

    pq_size = 0
    for i in range(len(cc)):
        if cc[i] != 0:
            pq_size += 1

    pq = PriorityQueue(pq_size, MAX_PQ)

    for i in xrange(26):
        if cc[i] != 0:
            pq.insert(CharFreq(chr(i + ord('a')), cc[i]))

    res = []
    while not pq.is_empty():
        first = pq.delete_top()
        res.append(first.char)
        first.freq -= 1

        second = None
        if not pq.is_empty():
            second = pq.delete_top()
            res.append(second.char)
            second.freq -= 1

        if first.freq > 0:
            pq.insert(first)

        if second is not None and second.freq > 0:
            pq.insert(second)

    return ''.join(res)
コード例 #5
0
def print_sorted(array):
    k = len(array)
    min_pq = PriorityQueue(k, MIN_PQ)

    for i in range(k):
        min_pq.insert(Element(array[i][0], 0, i))

    while True:
        if min_pq.is_empty():
            break

        element = min_pq.delete_top()

        print element,

        nxt_array = element.array
        nxt_index = element.index + 1

        if nxt_index == len(array[nxt_array]):
            continue

        nxt_el = array[nxt_array][nxt_index]

        min_pq.insert(Element(nxt_el, nxt_index, nxt_array))
コード例 #6
0
 def __init__(self, k):
     self.k = k
     self.min_pq = PriorityQueue(k, MIN_PQ)
コード例 #7
0
 def __init__(self, words, k):
     self.words = words
     self.trie = TrieDS()
     self.min_heap = PriorityQueue(k, MIN_PQ)
     self.k = k
     self.pre_process()
コード例 #8
0
 def setUp(self):
     self.max_pq = PriorityQueue(10, MAX_PQ)
     self.min_pq = PriorityQueue(10, MIN_PQ)