Условие:
Есть модель, необходимо нарисовать все возможные схемы в цвете, чтобы понять, как работает алгоритм: Временная дискретная модель среды
Слово дискретная обозначает, что время в модели идет не непрерывно, а согласно очереди событий. Исходя из этого, необходимо заранее определить последовательность событий.
Пусть данная последовательность имеет название TimeQueue (далее TQ)
TQ=[t0,t1,…]
Где t0=0 – время начала симуляции.
Также договоримся, что существует набор узлов Vs^(t0 ), имеющих сообщение на момент времени t0. (Vs^(t0 ),Vs^(t1 ),…) - последовательность множеств, имеющих начальное сообщение. Задача состоит в нахождения inf〖(tn:Vs^(tn )∩Vg≠∅)〗, где Vg – множество целевых узлов.
Пусть v∈V – произвольный узел. По протоколу узел v будет слать сообщение в момент времени tj только в случае, если v∈Vs^(tj ). В противном случае узел v пропускает отправку сообщения в момент времени tj.
Назовем очередь на обработку событий ProcessQueue (далее PQ)
PQ будет содержать пары времени и списка вершин, обрабатываемые в данное время:
PQ=[(tj,[v1^(tj ),v2^(tj )…]),…]
Данная очередь отсортирована в порядке возрастания tj, tj≥tcurr, где tcurr – текущее время системы. tcurr равняется последнему tj полученному из PQ.
Также для проверки конфликтов необходимо хранить набор уже отправленных сообщений. Структуру хранений сообщений назовем Hystory.
Hystory=[[t0,0,t0,1,…],[t1,0,t1,1,…],…]
Пусть существует биекция index:v⟶iNode, где iNode – индекс узла. Тогда Hystory[index(v)]→[t(index(v),0),t(index(v),1),…] – история отправленных сообщений узлом v.
