Algorithms and Data structures

Implementations of algorithms and data structures optimized for Elixir's functional programming paradigm. Packages among the 3,000 most downloaded in the past 90 days.

80 packages
  • jumper 1.0.2

    Jump consistent hash implementation in Elixir

    12
    1.4m last 90 days
  • zipper 1.1.0

    Generic Zipper Implementation for Erlang

    38
    733.7k last 90 days
  • A fast consistent hash ring implementation in Elixir.

    551
    695.4k last 90 days
  • ra 2.17.0

    Raft library

    892
    674.2k last 90 days
  • flow 1.2.4

    Computational parallel flows for Elixir

    1.6k
    509.9k last 90 days
  • Parallel stream operations for Elixir

    102
    429.0k last 90 days
  • shards 1.1.1

    Erlang/Elixir library for partitioned or sharded ETS tables.

    295
    378.3k last 90 days
  • General purpose circular buffer.

    23
    342.1k last 90 days
  • libgraph 0.16.0

    A high-performance graph datastructure library for Elixir projects

    560
    318.9k last 90 days
  • libring 1.7.0

    A fast consistent hash ring implementation in Elixir

    226
    316.9k last 90 days
  • table 0.1.2

    Unified access to tabular data

    43
    255.2k last 90 days
  • radix 0.5.0

    A bitwise radix tree for prefix based matching on bitstring keys of any length.

    11
    240.8k last 90 days
  • trie 2.0.7

    Erlang Trie Implementation

    131
    182.7k last 90 days
  • murmur 2.0.0

    Murmur is a pure Elixir implementation of the non-cryptographic hash Murmur3. It aims to implement the x86_32bit, x86_128bit and x64_128bit variants.

    4
    165.2k last 90 days
  • Implementations of δ-CRDTs

    537
    139.4k last 90 days
  • A faster Map, augmented with a MerkleTree

    97
    137.1k last 90 days
  • Priority Search Queue

    7
    82.1k last 90 days
  • Implementation of the Ramer–Douglas–Peucker algorithm for reducing the number of points used to represent a curve.

    28
    61.0k last 90 days
  • Consistent Hash Ring

    45
    55.1k last 90 days
  • qex 0.5.1

    A `:queue` wrapper with improvements in API and addition of Protocol implementations

    34
    43.9k last 90 days
  • Simple Elixir queue, with a constant-time `size/1` and a maximum capacity.

    22
    41.0k last 90 days
  • bimap 1.3.0

    Elixir implementation of bidirectional map and multimap

    33
    38.8k last 90 days
  • jchash 0.1.4

    Jump Consistent Hash NIF library for Erlang/Elixir.

    17
    34.2k last 90 days
  • deque 1.2.0

    Fast bounded deque using two rotating lists.

    156
    33.7k last 90 days
  • A splay-tree implementation

    13
    30.9k last 90 days
  • SortedSet is a fast and efficient Rust backed sorted set.

    1.6k
    27.7k last 90 days
  • A library for cosine similarity & simhash calculation

    16
    26.2k last 90 days
  • A simple, dependency free boolean satisfiability solver.

    2
    23.2k last 90 days
  • noether 1.0.0

    Algebra utilities for Elixir

    23
    21.4k last 90 days
  • heap 3.0.0

    Small composable Heap implementation. Heaps sort elements at insert time.

    -
    20.9k last 90 days
  • ord_map 0.1.0

    Ordered map for Elixir lang

    5
    20.6k last 90 days
  • cbuf 0.7.1

    A circular buffer backed by a queue, map, or ETS

    11
    18.2k last 90 days
  • arrays 2.1.1

    Well-structured Arrays with fast random-element-access for Elixir, offering a common interface with multiple implementations (MapArray, Erlang :array, etc.) with varying performance guarantees that can be switched in your configuration.

    87
    12.7k last 90 days
  • bloomex 1.2.0

    Bloomex is a pure Elixir implementation of Scalable Bloom Filters.

    112
    11.4k last 90 days
  • sets-like wrapper based on maps

    13
    11.1k last 90 days
  • NaryTree implements the data structure for n-ary tree (also called rose tree), where each node in the tree can have zero or more children. NaryTree provides methods for traversal and manipulation of the tree structure and node contents.

    18
    10.7k last 90 days
  • pqueue 2.0.7

    Erlang Priority Queue Implementation

    171
    10.3k last 90 days
  • Permutation is a package and protocol for calculating the possible permutations or combinations of an Enumerable.

    4
    9.8k last 90 days
  • solverl 1.0.16

    Elixir/Erlang interface to MiniZinc (https://www.minizinc.org/).

    45
    9.8k last 90 days
  • A double-ended queue data structure

    5
    8.7k last 90 days
  • Huet's zippers in Elixir

    -
    8.7k last 90 days
  • Elixir library computing simple combination and permutation on Enumerables.

    34
    8.3k last 90 days
  • Tries in Gleam

    12
    7.3k last 90 days
  • Immutable arrays for Gleam

    9
    7.3k last 90 days
  • riak_dt 2.1.1

    riak CTDT datatypes

    355
    7.1k last 90 days
  • A pure Gleam package to compute the edit distance of two strings

    7
    6.9k last 90 days
  • Library for dealing with data structures

    52
    6.5k last 90 days
  • Storing a set of closed intervals

    0
    6.4k last 90 days
  • zlist 1.3.0

    Erlang lazy list library

    11
    6.2k last 90 days
  • A high-performance, concurrent, and mutable Cuckoo Filter for Erlang and Elixir

    47
    6.2k last 90 days
  • Real-valued intervals with support for the `Enumerable` protocol.

    11
    5.9k last 90 days
  • jch 0.2.3

    A Jump Consistent Hash library

    44
    5.8k last 90 days
  • lqueue 1.2.0

    Double-ended queue with limited length

    3
    5.0k last 90 days
  • Pure Elixir AVL tree implementation

    8
    5.0k last 90 days
  • GenStagA data type and related functions to support an unrooted (multiple starting nodes) polytree (a tree-like graph with edges).

    1
    4.6k last 90 days
  • An Elixir implementation of the Google diff_match_patch library.

    6
    4.5k last 90 days
  • do 2.0.2

    Monads, Functors and Do-Notation for Erlang

    2
    4.3k last 90 days
  • abit 0.3.3

    Use `:atomics` as a bit array or as an array of N-bit counters.

    10
    3.8k last 90 days
  • An OTP application

    -
    3.8k last 90 days
  • talan 0.2.0

    Probabilistic data structures powered by atomics. Bloom filter, Counting bloom filter, Linear counter (cardinality)

    6
    3.8k last 90 days
  • router 1.0.4

    Trie based router.

    15
    3.5k last 90 days
  • RingBuffer - size limited queue, like a ring or cyclic buffer. With non blocking and non locking writers.

    5
    3.5k last 90 days
  • GlobalConst converts large Key-Value entities to a module to make fast accessing by thousands of processes.

    0
    3.5k last 90 days
  • ExShards – Elixir Wrapper for cabol/shards

    43
    3.4k last 90 days
  • data 0.6.0

    Extensions to Elixir data structures

    20
    3.4k last 90 days
  • Non-empty lists in Gleam

    8
    3.2k last 90 days
  • LexoRank on Elixir. An implementation of a list ordering system.

    7
    3.1k last 90 days
  • tote 1.0.2

    Bags (or multisets) in Gleam

    9
    3.0k last 90 days
  • Helper functions for working with weighted random values.

    4
    2.8k last 90 days
  • Fast-and-loose PRNG experiments

    8
    2.5k last 90 days
  • Easily sort by multiple fields in a readable manner

    1
    2.2k last 90 days
  • iv 1.3.2

    A fast, safe, batteries-included array for Gleam!

    -
    2.1k last 90 days
  • types 0.1.8

    Conflict-free Replicated Data Types

    141
    2.0k last 90 days
  • Traverse is a toolset to walk arbitrary Elixir Datastructures in a functional way.

    9
    2.0k last 90 days
  • A fleet of Raft consensus groups

    -
    2.0k last 90 days
  • merklet 2.0.0

    Merkle Trees for data replication purposes

    78
    1.9k last 90 days
  • A hash tree or Merkle tree is a tree in which every non-leaf node is labelled with the hash of the labels or values (in case of leaves) of its child nodes. Hash trees are useful because they allow efficient and secure verification of the contents of large data structures.

    96
    1.9k last 90 days
  • pacer 0.1.6

    Dependency graphs for optimal function call ordering

    46
    1.7k last 90 days
  • An ETS-based implementation of the token bucket algorithm

    -
    1.7k last 90 days
  • monex 0.1.17

    Monadic types collection. Option (Maybe) - some(val)/none(). Result - ok(val)/error(err).

    9
    1.7k last 90 days