# Interface ConvolutionStrategy

All Known Implementing Classes:
  `DoubleKaratsubaConvolutionStrategy, DoubleMediumConvolutionStrategy, DoubleShortConvolutionStrategy, FloatKaratsubaConvolutionStrategy, FloatMediumConvolutionStrategy, FloatShortConvolutionStrategy, IntKaratsubaConvolutionStrategy, IntMediumConvolutionStrategy, IntShortConvolutionStrategy, LongKaratsubaConvolutionStrategy, LongMediumConvolutionStrategy, LongShortConvolutionStrategy, ParallelThreeNTTConvolutionStrategy, ThreeNTTConvolutionStrategy`

public interface ConvolutionStrategy
Generic convolution strategy. To perform the convolution, an implementing class could use e.g.

- A simple long multiplication convolution with O(n2) complexity
- An O(nlog2(3)) Karatsuba type algorithm, e.g. as desribed in Knuth's Seminumerical Algorithms
- Floating-point Fast Fourier Transform (FFT) based convolution
- Number-Theoretic Transform (NTT) based convolution, with the Chinese Remainder Theorem used

Version:
  1.0
Author:
  Mikko Tommila

- ## Method Summary

  Modifier and Type
  Method
  Description
  `DataStorage`
  `convolute(DataStorage x, DataStorage y, long resultSize)`
  Convolutes the two sets of data.

- ## Method Details

  - ### convolute

    DataStorage convolute(DataStorage x, DataStorage y, long resultSize) throws ApfloatRuntimeException
    Convolutes the two sets of data.
    Parameters:
      `x` - First data set.
      `y` - Second data set.
      `resultSize` - Number of elements needed in the result data.
    Returns:
      The convolved data.
    Throws:
      `ApfloatRuntimeException`