Skip to main content

Introduction

Fastpath is a fast and lightweight tool for finding the shortest path in a weighted graph. As input it only needs the starting node, the ending node, and the weights of each node to node edge. For versatility it uses the Bellman-Ford algorithm, which allows for negative weights. Future version will incorporate the Dijkstra algorithm to speed up runtimes on graphs that do not contain negative edges. To install fastpath,

git clone git@github.com:deprekate/fastpath.git
cd fastpath; make

The only library dependency for fastpath is uthash (which is included). The fastpathz has the extra dependency of mini-gmp (which is included).

There are two flavors of fastpath. The first is the default fastpath, which will work for 99% of needed cases. It's limitation is that it uses the C-type long double for edge weights, which can cause rounding errors if you have extremely large/small numbers for edge weights (ie -1E50 or 1E50). This is because during the path relaxation step of the Bellmanford code, C cannot distinguish a difference between 1E50 and 1E50 + 1 If your numbers are extremely large/small, then you can use the fastpathz version, which uses infinite-precision integers as edge weights. The downside of using fastpathz is that decimal places get dropped, so the C code does not distinguish between 1 and 1.1. This limitation can partially be overcome by just multiplying all your weights by an arbitrary number.

Fastpath Example

Run either flavor on the included sample data:

fastpath --source A --target Z < edges.txt 
fastpathz --source A --target Z < edges.txt 

The output of either command is the path of nodes, and should look like

A
B
D
E
Z

The structure of the graph looks like:

A -----> B -----> C <----- F
         |        |
         |        |
         v        v
         D -----> E -----> Z
  • Strings can be used for the nodes, and the weights can be positive or negative long double numbers. The weights can even be in the form of scientific shorthand (1.6E+9).

Python Example

FastPath is now also available as a PIP package available at pypi.org

It is installable by simply using pip

pip install fastpath 

To use in your python code, first import the module, write edges to the graph, and then provide a beginning node (source) and an end node (target)

import fastpath as fp

f = open("edges.txt", "r")
for line in f:
        ret = fp.add_edge(line)

for edge in fp.get_path(source="A", target="Z"):
        print(edge)

Output is the path of nodes, and should look like

$ python example.py 
A
B
D
E
Z

Metadata

Release files for fastpath 1.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fastpath 1.9
File Size Uploaded
fastpath-1.9.tar.gz 59.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fastpath 1.9
File Interpreter ABI Platform
fastpath-1.9-cp36-cp36m-manylinux1_x86_64.whl CPython 3.6 CPython 3.6 pymalloc Linux glibc 2.5+ x86-64 Details

Total release size: 237.1 kB

Release files / fastpath-1.9.tar.gz

Download URL fastpath-1.9.tar.gz
Size 59.0 kB
Tags Source
SHA-256 checksum
How to use checksums
3372d306a3c4e4e764b3995946132333726a229e9002879b9112779dd442b31a
BLAKE2b-256 checksum
How to use checksums
75140cfe89b016c8f82ff9db25c84a64c146b0e5ec988a1ba2493fd29d109198
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/57.0.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.8

Release files / fastpath-1.9-cp36-cp36m-manylinux1_x86_64.whl

Download URL fastpath-1.9-cp36-cp36m-manylinux1_x86_64.whl
Size 178.1 kB
Tags CPython 3.6 CPython 3.6 pymalloc Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
d4c3e9110570b29235b55d7dcd3ee3df3ff1397e80ec364daf074e36376f3e1b
BLAKE2b-256 checksum
How to use checksums
b8d7cff0e1b323a1dd3b8395b01b336f0f343eb288fde87634e6438dfaf78519
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/57.0.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.8

Release history Release notifications | RSS feed

This release

1.9 This release

2 release files

1.8

2 release files

1.7

1 release file

1.6

2 release files

1.5

2 release files

1.4

2 release files

1.3.1

2 release files

1.3

2 release files

1.2

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1

2 release files

1.0

2 release files

0.5

2 release files

0.4

2 release files

0.3

2 release files

0.1

3 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page