O algoritmo implementado é uma adaptação do algoritmo de Sebo feita por de Mário Leston Rey [5].
Ele usa o conceito de potencial, uma função que associa valores inteiros aos vértices de um grafo e que satifaz certas propriedades.
Vamos introduzir alguns conceitos antes de definir este potencial. Estes conceitos foram retirados da referência [5].
Seja um grafo não orientado,
uma
função que associa comprimentos às arestas de
e uma função
, que associa valores inteiros
aos vértices de
.
Vamos denotar por o subconjunto
, isto é, o
conjunto das arestas de comprimentos negativos de
.
Para toda parte de
, uma alça de
relativa a
é uma
aresta
com as seguintes propriedades:
Denotaremos por o conjunto das alças de
.
Dado no conjunto dos valores de
, o nível
do
grafo é o conjunto
.
Uma fatia gorda de nível
é o conjunto de vértices de um componente
conexo de
.
Uma fatia magra de nível
é o conjunto de vértices de um componente
conexo de
.
Dado um subconjunto de vértices de
, um corte
é definido como
, isto é,
o conjunto das arestas com exatamente uma extremidade em
.
Definidos os conceitos de alças, fatias magras e gordas e cortes, podemos
definir um potencial.
Para um vértice arbitrário ,
é um
-potencial relativo a
se
Se não tem circuitos negativos, o valor associado a cada vértice
pelo potencial definido acima é o comprimento mínimo de um caminho
de
a
em
.
Em sua dissertação, Rey mostra que um grafo ou admite um potencial, ou possui circuitos negativos. Logo, o certificado da inexistência de circuitos negativos será um potencial.
O algoritmo usado para procurar circuitos negativos é guiado pela
definição de potencial.
Informalmente, ele repetidamente verifica se uma determinada função
é um potencial e procura corrigir cada
violação das propriedades (p0) a (p3), alterando
, até encontrar um
circuito negativo ou um
que seja de fato um potencial.