In the nondeterministic setting, there is no null FOV event. As
mentioned in Observation 2, exit and enter FOV
events can be handled by converting them into component events. To
convert an enter FOV event of shadow
into component events, we
simply create an appear component event of a single target and and
then merge the newly created shadow into
. Similarly, an exit FOV
event can be converted into a split component event followed by a
disappear component event. The rest of the algorithm stays the
same. The problem is, however, if there is a large number of FOV
events compared to the number of component events, this approach will
slow down later steps of the algorithm since it will create two
component events per FOV event. Fortunately, there is no reason to
handle each FOV event individually; since each FOV event is associated
with some shadow, we can group them based on this association. The
only caveat is that we cannot just group all FOV events for one shadow
into a single batch FOV event as this can introduce information
loss. For example, if
happens to shadow
,
this is not equivalent to nothing has happened: we know that
must have at least two targets in it originally (a ``surplus''). On
the other hand, the just mentioned surplus and net target flow are the
only two pieces of information that FOV events of a shadow give us;
hence up to two batch FOV events can summarize all information
contained in all FOV events for a given shadow. Let
be the sequence of FOV events for a shadow
in which
is either
or
, we build a counter to track the
surplus of
as
, with
defined as
Let