Внедрение кратчайшего первого задания в Python - PullRequest
0 голосов
/ 04 октября 2018

Когда я искал эффективную реализацию SJF, я нашел эту статью.

Реализация алгоритма непередающего планирования ЦП с кратчайшим заданием (SJF) с использованием C ++

Я сделал Python-версию этого кода следующим образом:

class Schedule(object):
    def __init__(self, name, at, bt):
        self.name = name
        self.at = at
        self.bt = bt
        self.ct = 0


 def solution2(processes):
     pro = []
     for p in processes:
        pro.append(Schedule(p[0], p[1], p[2]))
     pro.sort(key=lambda x: x.at)
     pro[0].ct = pro[0].bt + pro[0].at

     for j in range(1, len(processes)):
         ab = pro[j-1].ct

         # partial sorting  <-------------- right here !!!!
         waitings = list(filter(lambda x: x.at <= ab, pro[j:]))
         pro[j:j+len(waitings)] = sorted(waitings, key=lambda x: x.bt)
         # partial sorting end

         if pro[j-1].ct < pro[j].at:
             pro[j].ct = pro[j-1].ct + pro[j].bt + pro[j].at - pro[j-1].ct
         else:
             pro[j].ct = pro[j-1].ct + pro[j].bt

В приведенном выше коде мне интересно, есть ли более питонный способ реализации «частичной сортировки», который я назвал.

Похоже, что сортировка в C ++ более понятна.

bool compare2(schedule a,schedule b)
{
    return a.bt < b.bt && a.at <= ab;
}
/* call from main function */
sort(pro+i,pro+n,compare2);

Обновления: я получил подсказку по поводу вопроса ниже.поэтому я удаляю его.
Дополнительный вопрос: На самом деле, я искал пример кода SJF, использующего 'heapq' в python.Было бы полезно, если бы вы показали мне, как применять «heapq» в этом случае. Время прибытия процессов должно быть переменным, как в приведенном выше случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...