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])
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]]
def __init__(self): #unfortunatelly min and max have different interfaces self.max = HeapMax() self.min = []
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
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())]
def build_heap(source: List[int]): heap = HeapMax(source) for i in range(heap.size() // 2, -1, -1): heap.sift_down(i) return heap