Optimize permutations
by implementing it via multiset_permutations
#186
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Code changes
As noted in #151,
multiset_permutations
is much faster thanpermutations
, so we can exploit it to optimize the latter (this was suggested in a comment here).The code does the equivalent of
but we construct the iterator manually so that we can define
eltype
or it (otherwise, withIterators.map
, type inference would deduceAny
).This closes #151; it possibly closes #185 too.
Simple benchmark
Benchmark code
Before
After