-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Convolution のインターフェースを追加 #48
Conversation
#11 の方針で修正します。 |
少々オーバーロード数が多くなりましたが、#11 の通り修正しました。 // 1-a. int[], uint[], long[], ulong[] を受け取り、mod 998244353で畳み込み(1-b. の mod 未指定版)
public static int[] Convolution(int[] a, int[] b) => Convolution<Mod998244353>(a, b);
// 1-b. int[], uint[], long[], ulong[] を受け取り、TMod で畳み込み
public static int[] Convolution<TMod>(int[] a, int[] b)
where TMod : struct, IStaticMod { }
// 2. ReadOnlySpan<StaticModInt<TMod>>を受け取り、TModで畳み込み
public static Span<StaticModInt<TMod>> Convolution<TMod>(ReadOnlySpan<StaticModInt<TMod>> a, ReadOnlySpan<StaticModInt<TMod>> b)
where TMod : struct, IStaticMod { }
// 3. ReadOnlySpan<long> を受け取り、mod を取らず畳み込み
public static long[] ConvolutionLong(ReadOnlySpan<long> a, ReadOnlySpan<long> b) { } 基本的には #11 の通りですが、加えて2.の返り値を よろしくお願いします。 |
ありがとうございます…! 変更点についてなのですが、Span を使うつもりがなく StaticModInt<TMod>[]
public static StaticModInt<TMod>[] Convolution<TMod>(StaticModInt<TMod>[] a, StaticModInt<TMod>[] b)
where TMod : struct, IStaticMod { }
public static Span<StaticModInt<TMod>> Convolution<TMod>(ReadOnlySpan<StaticModInt<TMod>> a, ReadOnlySpan<StaticModInt<TMod>> b)
where TMod : struct, IStaticMod { } と分けたいなと個人的には感じました。(文字列系もこの挙動に従っています) どう思いますか…? |
確かにそうですね……賛成です! |
確認しました🙇 |
v1.5.1: Add SuffixArray that takes Span parameter
#11 を踏まえ、Convolutionのインターフェースを追加しました。