Welcome
This is a supplementary website to our paper O’Reach: Even Faster Reachability in Large Graphs and provides the source code as well as all instances. Please cite our work if you use materials provided here.
Abstract
One of the most fundamental problems in computer science is the reachability problem: Given a directed graph and two vertices s and t, can s reach t via a path? We revisit existing techniques and combine them with new approaches to support a large portion of reachability queries in constant time using a linear-sized reachability index. Our new algorithm O’Reach can be easily combined with previously developed solutions for the problem or run standalone.
In a detailed experimental study, we compare a variety of algorithms with respect to their index- building and query times as well as their memory footprint on a diverse set of instances. Our experiments indicate that the query performance often depends strongly not only on the type of graph, but also on the result, i.e., reachable or unreachable. Furthermore, we show that previous algorithms are significantly sped up when combined with our new approach in almost all scenarios. Surprisingly, due to cache effects, a higher investment in space doesn’t necessarily pay off: Reachability queries can often be answered even faster than single memory accesses in a precomputed full reachability matrix.
Software
We implemented all algorithms in C++. The source code as well as instructions on how to build and run are publicly available on Github (MIT license).
Instances
We used the following seven collections of acyclic instances for our experiments. Each instance comes with four query files, containing random, only positive (“true”), only negative (“false”), and 50:50 positive and negative queries (“mixed”).
Kronecker
Generated with the RMAT generator for the Graph500 benchmark in different
sizes.
Instance kron_logni has 2i vertices.
Edges were oriented according to vertex ID from smaller to larger.
| Instance | #Vertices | #Edges | Density | Reachability (%) | Download |
|---|---|---|---|---|---|
| kron_logn12 | 4096 | 116952 | 28.552734 | 27.475973 | kron_logn12.tar.xz |
| kron_logn16 | 65536 | 2456071 | 37.476669 | 21.218687 | kron_logn16.tar.xz |
| kron_logn17 | 131071 | 5113985 | 39.016907 | 19.454443 | kron_logn17.tar.xz |
| kron_logn20 | 1048576 | 44619402 | 42.552378 | 5.819534 | kron_logn20.tar.xz |
| kron_logn21 | 2097152 | 91040932 | 43.411699 | 1.214995 | kron_logn21.tar.xz |
Random
Generated according to the Erdős-Renyí model G(n, m).
Instance randni-j has 2i vertices and 2j edges.
Edges were oriented according to vertex ID from smaller to larger.
| Instance | #Vertices | #Edges | Density | Reachability (%) | Download |
|---|---|---|---|---|---|
| randn20-21 | 1048576 | 2097152 | 2 | 0.001185 | randn20-21.tar.xz |
| randn20-22 | 1048576 | 4194304 | 4 | 0.035192 | randn20-22.tar.xz |
| randn20-23 | 1048576 | 8388608 | 8 | 1.906711 | randn20-23.tar.xz |
| randn23-24 | 8388608 | 16777216 | 2 | 0.000148 | randn23-24.tar.xz |
| randn23-25 | 8388608 | 33554432 | 4 | 0.004418 | randn23-25.tar.xz |
Delaunay
Delaunay instances adapted from the 10th DIMACS Implementation
Challenge.
delaunay_ni: Delaunay triangulation of 2i random points in the unit square.
| Instance | #Vertices | #Edges | Density | Reachability (%) | Download |
|---|---|---|---|---|---|
| delaunay_n15 | 32768 | 98274 | 2.999084 | 0.438026 | delaunay_n15.tar.xz |
| delaunay_n20 | 1048576 | 3145686 | 2.999960 | 0.009307 | delaunay_n20.tar.xz |
| delaunay_n22 | 4194304 | 12582869 | 2.999990 | 0.002037 | delaunay_n22.tar.xz |
Large Real
Different kinds of networks, adapted from the GRAIL Code Repository.
| Instance | #Vertices | #Edges | Density | Reachability (%) | Download |
|---|---|---|---|---|---|
| citeseer.scc | 693947 | 312282 | 0.450008 | 0.000150 | citeseer.scc.tar.xz |
| citeseerx | 6540401 | 15011260 | 2.295159 | 0.136736 | citeseerx.tar.xz |
| cit-Patents | 3774768 | 16518947 | 4.376149 | 0.040911 | cit-Patents.tar.xz |
| go_uniprot | 6967956 | 34769339 | 4.989891 | 0.000378 | go_uniprot.tar.xz |
| uniprotenc_22m | 1595444 | 1595442 | 0.999999 | 0.000065 | uniprotenc_22m.tar.xz |
| uniprotenc_100m | 16087295 | 16087293 | 1.000000 | 0.000008 | uniprotenc_100m.tar.xz |
| uniprotenc_150m | 25037600 | 25037598 | 1.000000 | 0.000005 | uniprotenc_150m.tar.xz |
Small Real Dense
Different kinds of networks, adapted from the GRAIL Code Repository.
| Instance | #Vertices | #Edges | Density | Reachability (%) | Download |
|---|---|---|---|---|---|
| go_sub | 6793 | 13361 | 1.966878 | 0.225796 | go_sub.tar.xz |
| pubmed_sub | 9000 | 40028 | 4.447556 | 0.645796 | pubmed_sub.tar.xz |
| yago_sub | 6642 | 42392 | 6.382415 | 0.150623 | yago_sub.tar.xz |
| citeseer_sub | 10720 | 44258 | 4.128545 | 0.367247 | citeseer_sub.tar.xz |
| arXiv | 6000 | 66707 | 11.117833 | 15.464258 | arXiv.tar.xz |
Small Real Sparse
Different kinds of networks, adapted from the GRAIL Code Repository.
| Instance | #Vertices | #Edges | Density | Reachability (%) | Download |
|---|---|---|---|---|---|
| amaze | 3710 | 3600 | 0.970350 | 17.233661 | amaze.tar.xz |
| kegg | 3617 | 4395 | 1.215095 | 20.163640 | kegg.tar.xz |
| nasa | 5605 | 6538 | 1.166459 | 0.528449 | nasa.tar.xz |
| xmark | 6080 | 7051 | 1.159704 | 1.451254 | xmark.tar.xz |
| vchocyc | 9491 | 10345 | 1.089980 | 0.151740 | vchocyc.tar.xz |
| mtbrv | 9602 | 10438 | 1.087065 | 0.151073 | mtbrv.tar.xz |
| anthra | 12499 | 13104 | 1.048404 | 0.095099 | anthra.tar.xz |
| ecoo | 12620 | 13350 | 1.057845 | 0.108791 | ecoo.tar.xz |
| agrocyc | 12684 | 13408 | 1.057080 | 0.106041 | agrocyc.tar.xz |
| human | 38811 | 39576 | 1.019711 | 0.023111 | human.tar.xz |
SNAP
Different kinds of networks, adapted from the Stanford Large Network Dataset Collection.
| Instance | #Vertices | #Edges | Density | Reachability (%) | Download |
|---|---|---|---|---|---|
| p2p-Gnutella31 | 48438 | 55349 | 1.142677 | 0.772494 | p2p-Gnutella31.tar.xz |
| email-EuAll | 230795 | 223004 | 0.966243 | 5.073220 | email-EuAll.tar.xz |
| web-Google | 371764 | 517805 | 1.392833 | 14.809034 | web-Google.tar.xz |
| soc-LiveJournal1 | 970270 | 1024140 | 1.055521 | 5.378105 | soc-LiveJournal1.tar.xz |
| wiki-Talk | 2281879 | 2311570 | 1.013012 | 0.811697 | wiki-Talk.tar.xz |
License and Bibliography
Our implementation of the algorithms is available under the MIT license.
If you publish results using our algorithms, instances, or implementation, please acknowledge our work by citing our paper as follows:
@inproceedings{hst-oreach-2021,
author = {Hanauer, Kathrin and Schulz, Christian and Trummer, Jonathan},
editor = {Coudert, David and Natale, Emanuele},
title = {O'Reach: Even Faster Reachability in Large Graphs},
booktitle = {19th International Symposium on Experimental Algorithms, {SEA} 2021,
June 7-9, 2021, Valrose, France},
series = {LIPIcs},
volume = {190},
pages = {13:1--13:24},
publisher = {Schloss Dagstuhl - Leibniz-Zentrum f{\"{u}}r Informatik},
year = {2021},
url = {https://doi.org/10.4230/LIPIcs.SEA.2021.13},
doi = {10.4230/LIPIcs.SEA.2021.13},
}
For the full version:
@article{hst-oreachfull-2021,
author = {Hanauer, Kathrin and Schulz, Christian and Trummer, Jonathan},
title = {O'Reach: Even Faster Reachability in Large Graphs},
journal = {CoRR},
volume = {abs/2008.10932},
year = {2021},
url = {https://arxiv.org/abs/2008.10932},
archivePrefix = {arXiv},
eprint = {2008.10932},
primaryClass = {cs.DS},
}
