Example #1
0
def test_simple():
    heap = HeapMax()
    items_priority = [15, 12, 9, 14, 8, 3, 7, 13, 11, 5]
    items_priority2 = [3, 3, 3, 5, 5, 5, 0, 9]
    random.shuffle(items_priority)
    for idx, priority in enumerate(items_priority):
        heap.insert(HeapItem(priority, f'item {idx + 1}'))
        print(heap)
def ejercicio_16():
    prio_empleado = 1
    prio_staff_TI = 2
    prio_gerente = 3
    
    heapmax_documentos = HeapMax()
    
    documentos_empleados = [
        ['documento 1 empleado', prio_empleado],
        ['documento 2 empleado', prio_empleado],
        ['documento 3 empleado', prio_empleado],
    ]
    
    documentos_empleados_2 = [
        ['documento 4 empleado', prio_empleado],
        ['documento 5 empleado', prio_empleado],
    ]
    
    documentos_staff_TI = [
        ['documento 6 staff TI', prio_staff_TI],
        ['documento 7 staff TI', prio_staff_TI],
    ]
    
    documentos_gerente = [
        ['documento 8 gerente', prio_gerente],
    ]
    
    documentos_gerente_2 = [
        ['documento 9 gerente', prio_gerente],
    ]
    
    #PUNTO A
    heapmax_documentos.arribo_muchos(documentos_empleados)
    
    #PUNTO B
    print(heapmax_documentos.atencion()[1])
    
    #PUNTO C
    heapmax_documentos.arribo_muchos(documentos_staff_TI)
    
    #PUNTO D
    heapmax_documentos.arribo_muchos(documentos_gerente)
    
    #PUNTO E
    print()
    for i in range(2):
        print(heapmax_documentos.atencion()[1])
    
    #PUTNO F
    heapmax_documentos.arribo_muchos(documentos_empleados_2)
    heapmax_documentos.arribo(documentos_gerente_2[0][0], documentos_gerente_2[0][1])
    
    #PUNTO G
    print()
    while(not heapmax_documentos.vacio()):
        print(heapmax_documentos.atencion()[1])
Example #3
0
def schargepmtn_nlogn(jobs_list):

    R = HeapMin()
    Q = HeapMax()
    i=0
    for job in jobs_list:
        R.add(Cell(value=job.head[0], job=i))
        i += 1

    # S = np.zeros(len(jobs_list))  # momenty rozpoczęcia wykonywania zadań
    # C = np.zeros(len(jobs_list))  # momenty zakończenia wykonywania zadań

    Nn = list(range(len(jobs_list)))
    Ng = []

    # order = []

    # Algorymt
    t = 0
    l = 0
    Cmax = 0
    while len(Nn) > 0 or len(Ng) > 0:
        while len(Nn) > 0 and R.min().value <= t:
            j = R.min(True).job
            Nn.remove(j)
            Ng.append(j)
            Q.add(Cell(value=jobs_list[j].tail[0], job=j))

            if jobs_list[j].tail[0] > jobs_list[l].tail[0]:
                jobs_list[l].body[0] = t - jobs_list[j].head[0]
                t = jobs_list[j].head[0]

                if jobs_list[l].body[0] > 0:
                    Ng.append(l)
                    Q.add(Cell(value=jobs_list[l].tail[0], job=l))

        if len(Ng) == 0:
            t = R.min().value
        else:
            j = Q.max(True).job
            Ng.remove(j)
            l = j
            t = t + jobs_list[j].body[0]
            Cmax = max(Cmax, t + jobs_list[j].tail[0])

    return Cmax
def colaPrioridad():
    cola = HeapMax()
    cola.arribo('Empleado 1', 1)
    cola.arribo('Empleado 2', 1)
    cola.arribo('Empleado 3', 1)

    print(cola.atencion())

    cola.arribo('Staff TI 1', 2)
    cola.arribo('Staff TI 2', 2)
    cola.arribo('Gerente 1', 3)

    print(cola.atencion())
    print(cola.atencion())

    cola.arribo('Empleado 4', 1)
    cola.arribo('Empleado 5', 1)
    cola.arribo('Gerente 2', 3)

    while not cola.vacio():
        print(cola.atencion())
#     cola_combinada.mover_final()

# 16. Utilice cola de prioridad, para atender la cola de impresión tomando en cuenta el siguiente criterio (1- empleados, 2- staff de tecnologías de la información “TI”, 3- gerente), y resuelva la siguiente situación:
# a. cargue tres documentos de empleados (cada documento se representa solamente con un nombre).
# b. imprima el primer documento de la cola (solamente mostrar el nombre de este por pantalla).
# c. cargue dos documentos del staff de TI.
# d. cargue un documento del gerente.
# e. imprima los dos primeros documentos de la cola.
# f. cargue dos documentos de empleados y uno de gerente.
# g. imprima todos los documentos de la cola de impresión.

empleado = 1
ti = 2
gerente = 3

cola_prioridad = HeapMax()

documentos = [['Investigacion', empleado], ['Informe', empleado],
              ['Resumen', empleado]]
# a. cargue tres documentos de empleados (cada documento se representa solamente con un nombre)
cola_prioridad.arribo_muchos(documentos)

# b. imprima el primer documento de la cola (solamente mostrar el nombre de este por pantalla).
# print(cola_prioridad.atencion()[1])

# c. cargue dos documentos del staff de TI.
documentos_2 = [['Revision', ti], ['Semi informe', ti]]
cola_prioridad.arribo_muchos(documentos_2)

# d. cargue un documento del gerente.
documentos_3 = [['Revision - gerencial', gerente]]
Example #6
0
 def __init__(self):
     #unfortunatelly min and max have different interfaces
     self.max = HeapMax()
     self.min = []
Example #7
0
def schrange_nlogn(jobs_list):
    '''
    Simulate RPQ problem
    :param jobs_list:
    :param order:
    :return:
    '''

    R = HeapMin()
    Q = HeapMax()
    i=0
    for job in jobs_list:
        R.add(Cell(value=job.head[0], job=i))
        i += 1

    S = np.zeros(len(jobs_list))  # momenty rozpoczęcia wykonywania zadań
    C = np.zeros(len(jobs_list))  # momenty zakończenia wykonywania zadań

    Nn = list(range(len(jobs_list)))
    Ng = []

    order = []

    # Algorymt
    t = R.min().value
    while len(Nn) > 0 or len(Ng) > 0:
        while len(Nn) > 0 and R.min().value <= t:
            j = R.min(True).job
            Nn.remove(j)
            Ng.append(j)
            Q.add(Cell(value=jobs_list[j].tail[0], job=j))
        if len(Ng) == 0:
            t = R.min().value
        else:
            j = Q.max(True).job
            Ng.remove(j)
            order.append(j)
            t += jobs_list[j].body[0]

    # S czas rozpoczecia zadania
    first = True
    for i in order:
        if first:
            S[i] = jobs_list[i].head[0]
            i_last = i
            first = False
        else:
            S[i] = max(jobs_list[i].head[0], S[i_last]+jobs_list[i_last].body[0])
            i_last = i

    # C czas zakonczenia zadania
    for i in order:
        C[i] = S[i] + jobs_list[i].body[0]

    # Obliczenie cmax
    cmax = []
    for i in order:
        cmax.append(C[i]+jobs_list[i].tail[0])
    # Najdłuższy czas jako ostatnie zakonczone zadania
    cmax = max(cmax)

    return order, cmax
Example #8
0
def heap_sort(source: List[int]) -> List[int]:
    heap = HeapMax()
    for i in source:
        heap.insert(HeapItem(i, None))
    return [heap.get_item_max().priority for _ in range(heap.size())]
Example #9
0
def build_heap(source: List[int]):
    heap = HeapMax(source)
    for i in range(heap.size() // 2, -1, -1):
        heap.sift_down(i)
    return heap