Un algoritmo o una expresión algebraica puede representarse visualmente a través de un Grafo de Flujo de Señales (SFG, por sus siglas en inglés). En este capítulo, vamos a:
- Ilustrar cómo se ve un grafo de flujo de señales.
- Definir en detalle un grafo de flujo de señales y sus componentes.
- Construir un grafo de flujo de señales para la serie de Fibonacci.
¿Cómo se ve un grafo de flujo de señales?
Consideremos un algoritmo que toma dos variables, digamos y , como entradas y produce su suma, denotada por , como salida:
Aquí, es la variable que representa la suma de y .
Ejemplo:
La operación puede representarse visualmente de la siguiente manera:

o, si la operación no queda clara por el contexto, podemos ilustrarla explícitamente, como en:

Esta representación se llama Grafo de Flujo de Señales (SFG). Un grafo de flujo de señales es una representación visual de un algoritmo que toma varias entradas (aquí, y ) y produce las salidas correspondientes (aquí, ). Ahora examinaremos los componentes de un SFG.
Componentes de un SFG
Un grafo de flujo de señales se compone principalmente de nodos y aristas, donde los nodos representan variables y se representan como puntos, y las aristas son segmentos de línea que conectan dos nodos cualesquiera. En el siguiente SFG, hay tres nodos, , y . También hay dos aristas: una que conecta el nodo con el nodo , y otra que conecta el nodo con el nodo .

El nodo y el nodo se denominan nodos de entrada, y se denomina nodo de salida.
Un nodo de entrada solo tiene aristas salientes. Un nodo de salida solo tiene aristas entrantes. Un nodo mixto puede tener tanto aristas entrantes como salientes. En breve veremos ejemplos que incluyen nodos mixtos.
Una arista representa una operación específica. Por ejemplo, en el grafo anterior, si las aristas representan una suma, entonces la variable de salida está dada por
Si la operación es una comparación, entonces está dada por
o
dependiendo de la operación de comparación que se utilice.
La flecha en una arista indica su dirección, lo que determina si es una arista entrante o saliente con respecto a un nodo. Si no se especifica ninguna dirección, asumimos una dirección de izquierda a derecha; es decir, la arista sale del nodo de la izquierda y entra al nodo de la derecha.
Un SFG describe cómo interactúan las variables entre sí a través de nodos y aristas.
Un nodo mixto es un nodo que tiene tanto aristas entrantes como salientes, como los nodos y en la siguiente ilustración.
Un nodo mixto o un nodo de salida siempre representa el resultado de sus aristas entrantes, dependiendo de las operaciones asociadas a dichas aristas. Consideremos el siguiente SFG:

Aquí, si la operación asociada a las aristas es la suma, entonces
El nodo es la suma de los valores que llegan de los nodos y . El nodo es la suma de los valores que llegan de los nodos y . Finalmente, el nodo es la suma de los valores que llegan de los nodos y .
Aristas Ponderadas
Se le puede asignar un peso a una arista. El peso es un factor que multiplica el valor de un nodo antes de que se aplique la operación asociada a la arista. Veamos el siguiente ejemplo para entender esto.

En el grafo anterior, el peso multiplica a , y el peso multiplica a . Se asume que la operación es una suma.
Entonces, la operación de suma produce la salida
Si a una arista no se le asigna ningún peso, entonces se asume que el peso es , lo que significa que el valor del nodo se multiplica por un factor de . Por ejemplo, en el siguiente SFG con la operación definida como suma:

El valor de está dado por
La resta se puede lograr utilizando pesos negativos en una arista. Por ejemplo, en el siguiente SFG:

El valor de es
Los grafos de flujo de señales pueden usarse para representar e interpretar una amplia variedad de algoritmos y problemas. Veamos un ejemplo a continuación.
La serie de Fibonacci como un SFG
Consideremos la famosa serie de Fibonacci:
Cada elemento de la serie es la suma de los dos elementos anteriores, siendo el primer y segundo elemento y respectivamente.
La secuencia de Fibonacci puede representarse como un SFG en el cual las aristas realizan la operación de suma. Construyamos el SFG de Fibonacci para los elementos hasta el . Sean
Estas dos variables, y , son los nodos de entrada de nuestro SFG. El siguiente elemento,
puede representarse como:

Para el siguiente elemento,
agregamos dos aristas y un nodo para obtener:

De manera similar, el nodo se representa como:

Continuamos construyendo el SFG hasta llegar al nodo de salida

El SFG anterior puede extenderse aún más para alcanzar cualquier elemento de Fibonacci. Por lo tanto, el algoritmo para calcular el elemento de Fibonacci también puede representarse como un Grafo de Flujo de Señales, donde tomamos los dos primeros elementos como nodos de entrada y el elemento aparece como el nodo de salida. Los demás nodos son mixtos.
Para los lectores que ya estén familiarizados con el SFG de Fibonacci, por simplicidad, el grafo puede representarse sin direcciones, de la siguiente manera:

En general, cuando conocemos el contexto del algoritmo que el SFG está representando, es común ilustrar las aristas sin usar flechas.
En el siguiente capítulo, veremos cómo usar Grafos de Flujo de Señales para escribir un algoritmo que realice la NTT.
Este artículo es parte de una serie sobre la Number Theoretic Transform en nuestro ZK Book