Я пишу что-то похожее на планировщик задач. У меня есть два набора задач, некоторые из которых фиксированы (им даны дата и время начала и окончания), а некоторые из них не фиксированы (им даются дата и время начала и продолжительность).Самый быстрый способ сортировки списка дат при добавлении в список
Нефиксированные задачи зависят от фиксированных задач, так что если нефиксированная задача перекрывается фиксированной задачей, нефиксированная задача будет продлевать ее продолжительность на величину перекрытия.
я начала со списком кортежей, где первый элемент является дата начала и второй элемент является идентификатором для фиксированной задачи, как это:
[(2012-04-30, 1), (2012-05-01, 5), (2012-05-04, 2)]
Я тогда еще один список, который заказанную пользователем, нефиксированных задач. Идея состоит в том, что я пройду через этот список, и внутри этого цикла я пройду через первый список, чтобы найти задачи, которые могут пересекаться с этой задачей, и может выяснить, какой из них можно увеличить нефиксированную задачу ,
Здесь я прошу вас о помощи. Теперь, когда я знаю рассчитанные начальные и конечные времена этой нефиксированной задачи, мне нужно считать ее «фиксированной», чтобы она влияла на остальную часть нефиксированных задач.
Я могу добавить эту задачу в первый список фиксированных задач и отсортировать ее снова, но это означает, что я сортирую список каждый раз, когда добавляю к нему задачу.
Я могу прокрутить первый список и найти точку, в которую должна быть вставлена эта задача, а затем вставить ее туда. Но, если его место рано в списке, время тратится на перенос всех остальных предметов на одно место. И если его место задерживается в списке, мне нужно будет пройти через множество элементов, чтобы добраться до правильного места.
Итак, я не продаюсь, используя любой из этих вариантов. Реальный вопрос здесь: Каков наилучший способ сохранить список, отсортированный при добавлении к нему вещей? Или есть намного лучший способ сделать все это?
Имейте в виду, что хороший алгоритм сортировки (например, [Timsort] (http://en.wikipedia.org/wiki/Timsort) используется Python) не нужно будет сделать много дополнительной работы, если вы сортируете данные, которые в основном уже отсортированы. –
Как насчет модуля 'bisect' http://docs.python.org/library/bisect.html? – Fenikso
@MichaelMior Все будет сортироваться за исключением последнего элемента. – STH