Add O(nlogn) poly division #1010
Open
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.
Description
This PR adds a O(nlogn) division method for univariate polynomials, following "Modern Computer Algebra", section 9.1. It can decrease division time by more than 98% in some cases, e.g. dividing a poly of size 2^18 by a poly of size 2^14. While most ZK protocols now rely on precomputation rather than polynomial division, this still might be useful for protocols that do not use precomputation but still would like a O(nlogn) time, typically membership-based protocols that operate on very large sets.
I did not create an issue since the CONTRIBUTING.md mentions this is optional for performance improvement.
Breaking changes
Div
implementation is now only available for polynomials defined overFftField
. Given that theMul
impl is also only defined overFftField
, I assume this is not a big issue. Moreover, I added the methodnaive_div
in any case.Possible improvements
1 << 8
as the switch from naive to fast division, but this can be discussed.parallel
feature is activated, since then FFT for multiplication can be parallelised. Since cargo does not allow features in patched dependencies, I could not test this. But adding a switch based on the presence of that feature is probably a smart move.hensel_div
toDensePolynomials
could give users complete freedom over the choice of the division algorithm.Before we can merge this PR, please make sure that all the following items have been
checked off. If any of the checklist items are not applicable, please leave them but
write a little note why.
Pending
section inCHANGELOG.md
Files changed
in the GitHub PR explorer