\section*{Problem 6}

\subsection*{a)}
% Use Gaussian elimination, and then use backwards substitution to solve the equation
Renaming the sub-, main-, and supdiagonal of matrix $\boldsymbol{A}$ 
\begin{align*}
    \vec{a} &= [a_{2}, a_{3}, ..., a_{n-1}, a_{n}] \\
    \vec{b} &= [b_{1}, b_{2}, b_{3}, ..., b_{n-1}, b_{n}] \\
    \vec{c} &= [c_{1}, c_{2}, c_{3}, ..., c_{n-1}] \\
\end{align*}

Following Thomas algorithm for gaussian elimination, we first perform a forward sweep followed by a backward sweep to obtain $\vec{v}$
\begin{algorithm}[H]
    \caption{General algorithm}\label{algo:general}
    \begin{algorithmic}
        \Procedure{Forward sweep}{$\vec{a}$, $\vec{b}$, $\vec{c}$}
        \State $n \leftarrow$ length of $\vec{b}$
        \State $\vec{\hat{b}}$, $\vec{\hat{g}} \leftarrow$ vectors of length $n$.
        \State $\hat{b}_{1} \leftarrow b_{1}$ \Comment{Handle first element in main diagonal outside loop}
        \State $\hat{g}_{1} \leftarrow g_{1}$
        \For{$i = 2, 3, ..., n$}
        \State $d \leftarrow \frac{a_{i}}{\hat{b}_{i-1}}$ \Comment{Calculating common expression}
        \State $\hat{b}_{i} \leftarrow b_{i} - d \cdot c_{i-1}$
        \State $\hat{g}_{i} \leftarrow g_{i} - d \cdot \hat{g}_{i-1}$
        \EndFor
        \Return $\vec{\hat{b}}$, $\vec{\hat{g}}$
        \EndProcedure

        \Procedure{Backward sweep}{$\vec{\hat{b}}$, $\vec{\hat{g}}$}
        \State $n \leftarrow$ length of $\vec{\hat{b}}$
        \State $\vec{v} \leftarrow$ vector of length $n$.
        \State $v_{n} \leftarrow \frac{\hat{g}_{n}}{\hat{b}_{n}}$
        \For{$i = n-1, n-2, ..., 1$}
        \State $v_{i} \leftarrow \frac{\hat{g}_{i} - c_{i} \cdot v_{i+1}}{\hat{b}_{i}}$ 
        \EndFor
        \Return $\vec{v}$
        \EndProcedure
    \end{algorithmic}
\end{algorithm}


\subsection*{b)}
% Figure out FLOPs
Counting the number of FLOPs for the general algorithm by looking at one procedure at a time. 
For every iteration of i in forward sweep we have 1 division, 2 multiplications, and 2 subtractions, resulting in $5(n-1)$ FLOPs. 
For backward sweep we have 1 division, and for every iteration of i we have 1 subtraction, 1 multiplication, and 1 division, resulting in $3(n-1)+1$ FLOPs. 
Total FLOPs for the general algorithm is $8(n-1)+1$.