fslaborg / Graphoscope

A pragmatic approach to network science.
http://fslab.org/Graphoscope/
MIT License
14 stars 6 forks source link

Define and implement core data structure #5

Closed HarryMcCarney closed 1 year ago

HarryMcCarney commented 1 year ago

This should involve comparing different options in terms of performance and usability.

kMutagene commented 1 year ago

Link to the coordinate representation of sparse matrices mentioned in our call: https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.coo_matrix.html

DoganCK commented 1 year ago

A draft of a core structure is in. ee923bd (Sorry, forgot to mention this issue in the commit message)

It stores Edge information as an Adjacency List. For the underlying data structure I used ResizeArray, which are, as the name suggests, can expand without generating another ResizeArray (unlike Arrays in F#). But ResizeArrays don't have the best API, so for now I've included FSharpx as a dependency which provides functional wrappers around generic collection types.

Virtually everything is in-place currently for performance, but I think we'll need immutable alternatives to most functionality for a seemless F# experience.

We have used it in development for a bit and it can handle graphs with over a million edges with ease.

Sorry for blocking you @LibraChris, but I think some of the conversions should be unblocked now.