std.algorithm.setops.n_way_union - multiple declarations
- Function nWayUnion
- Struct NWayUnion
Function nWayUnion
Computes the union of multiple sets. The input sets are passed as a
range of ranges and each is assumed to be sorted by less. Computation is done lazily, one union element at a time. The
complexity of one popFront operation is Ο(log(ror.length)). However, the length of decreases as ranges
in it are exhausted, so the complexity of a full pass through ror is dependent on the distribution of the lengths of ranges
contained within NWayUnion. If all ranges have the same length rorn
(worst case scenario), the complexity of a full pass through is Ο(NWayUnionn * ror.length * log(ror.length)), i.e., log(ror.length) times worse than just spanning all ranges in
turn. The output comes sorted (unstably) by less.
Prototype
NWayUnion!(less,RangeOfRanges) nWayUnion(alias less, RangeOfRanges)( RangeOfRanges ror );
Parameters
| Name | Description |
|---|---|
| less | Predicate the given ranges are sorted by. |
| ror | A range of ranges sorted by less to compute the union for. |
Returns
A range of the union of the ranges in .
ror
Warning
Because does not allocate extra memory, it
will leave NWayUnion modified. Namely, ror assumes ownership
of NWayUnion and discretionarily swaps and advances elements of it. If
you want ror to preserve its contents after the call, you may
want to pass a duplicate to ror (and perhaps cache the
duplicate in between calls).
NWayUnion
Example
import std.algorithm.comparison : equal; double[][] a = [ [ 1, 4, 7, 8 ], [ 1, 7 ], [ 1, 7, 8], [ 4 ], [ 7 ], ]; auto witness = [ 1, 1, 1, 4, 4, 7, 7, 7, 7, 8, 8 ]; assert(equal(nWayUnion(a), witness));
Struct NWayUnion
Computes the union of multiple sets. The input sets are passed as a
range of ranges and each is assumed to be sorted by less. Computation is done lazily, one union element at a time. The
complexity of one popFront operation is Ο(log(ror.length)). However, the length of ror decreases as ranges
in it are exhausted, so the complexity of a full pass through is dependent on the distribution of the lengths of ranges
contained within NWayUnionror. If all ranges have the same length n
(worst case scenario), the complexity of a full pass through is Ο(NWayUnionn * ror.length * log(ror.length)), i.e., log(ror.length) times worse than just spanning all ranges in
turn. The output comes sorted (unstably) by less.
Parameters
| Name | Description |
|---|---|
| less | Predicate the given ranges are sorted by. |
| ror | A range of ranges sorted by less to compute the union for. |
Returns
A range of the union of the ranges in ror.
Warning
Because does not allocate extra memory, it
will leave NWayUnionror modified. Namely, assumes ownership
of NWayUnionror and discretionarily swaps and advances elements of it. If
you want ror to preserve its contents after the call, you may
want to pass a duplicate to (and perhaps cache the
duplicate in between calls).
NWayUnion
Example
import std.algorithm.comparison : equal; double[][] a = [ [ 1, 4, 7, 8 ], [ 1, 7 ], [ 1, 7, 8], [ 4 ], [ 7 ], ]; auto witness = [ 1, 1, 1, 4, 4, 7, 7, 7, 7, 8, 8 ]; assert(equal(nWayUnion(a), witness));