<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Algorithms on wborgeaud</title>
    <link>https://solvable.group/tags/algorithms/</link>
    <description>Recent content in Algorithms on wborgeaud</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Sat, 16 Oct 2021 00:57:25 -0700</lastBuildDate>
    <atom:link href="https://solvable.group/tags/algorithms/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>ECFFT on the BN254 base field in Rust</title>
      <link>https://solvable.group/posts/ecfft-bn254/</link>
      <pubDate>Sat, 16 Oct 2021 00:57:25 -0700</pubDate>
      <guid>https://solvable.group/posts/ecfft-bn254/</guid>
      <description>&lt;p&gt;$$&#xA;\def\F{\mathbb{F}}&#xA;$$&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;tl;dr:&lt;/strong&gt; A Rust implementation of the ECFFT here: &lt;a href=&#34;https://github.com/wborgeaud/ecfft-bn254&#34;&gt;https://github.com/wborgeaud/ecfft-bn254&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://solvable.group/posts/ecfft/&#34;&gt;last post&lt;/a&gt; was about the ECFFT algorithm by Eli Ben-Sasson, Dan Carmon, Swastik Kopparty and David Levit. At the end of the post, I mentioned that it would be fairly straightforward to implement the ECFFT algorithms in low-level languages like Rust by doing all the mathematical precomputations in Sage.&lt;/p&gt;&#xA;&lt;p&gt;Well I have done exactly that and implemented the EXTEND and ENTER operations in Rust for the base field of the BN254 curve. This field has order&lt;/p&gt;</description>
    </item>
    <item>
      <title>The ECFFT algorithm</title>
      <link>https://solvable.group/posts/ecfft/</link>
      <pubDate>Sat, 07 Aug 2021 00:57:25 -0700</pubDate>
      <guid>https://solvable.group/posts/ecfft/</guid>
      <description>&lt;p&gt;$$&#xA;\def\F{\mathbb{F}}&#xA;$$&lt;/p&gt;&#xA;&lt;p&gt;This post is about &lt;a href=&#34;https://arxiv.org/abs/2107.08473&#34;&gt;a recent paper&lt;/a&gt; by Eli Ben-Sasson, Dan Carmon, Swastik Kopparty and David Levit. In this paper the authors present an amazing new generalization of the classic FFT algorithm that works in all finite fields. This post will give an overview of the algorithm and a simple implementation in Sage. I highly recommend reading the paper for more details and background.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-classic-fft-algorithm&#34;&gt;The classic FFT algorithm&lt;/h2&gt;&#xA;&lt;p&gt;Let $p$ be a prime number, $n=2^k$ with $n \mid p-1$, $\langle w \rangle = H &amp;lt; \F_p^*$ a subgroup of size $n$. The classic FFT algorithm can be used to evaluate a polynomial $P(X)=\sum_{i=0}^n a_i X^i$ of degree $&amp;lt;n$ on $H$ in $O(n\log n)$. Note that the naive algorithm of evaluating $P$ at every point of $H$ takes $O(n^2)$ operations.&lt;br&gt;&#xA;The FFT works by writing $P$ as&#xA;$$P(X) = P_0(X^2) + XP_1(X^2)$$&#xA;where $P_0, P_1$ are the polynomials of degree $&amp;lt; n/2$ of even and odd coefficients of $P$. &lt;br&gt;&#xA;Thus, given the evaluation of $P_0$ and $P_1$ on $H^2$, we can recover the evaluation of $P$ on $H$ with $O(n)$ operations.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
