Heap data structure for Elixir.
Find a file
2016-07-08 11:03:27 +12:00
config Initial push of Heap. 2016-03-02 20:30:05 +13:00
lib Update description and fix typo. 2016-07-08 09:56:30 +12:00
spec Initial push of Heap. 2016-03-02 20:30:05 +13:00
.gitignore Ignore generated docs. 2016-03-02 20:50:14 +13:00
.travis.yml Add .travis.yml. 2016-03-02 20:36:24 +13:00
mix.exs Update mix.exs to have correct package information as per hex standard. 2016-07-08 11:03:27 +12:00
mix.lock Initial push of Heap. 2016-03-02 20:30:05 +13:00
README.md Add some badges to the readme. 2016-03-02 20:48:06 +13:00

Heap

Build Status Hex.pm

A Heap is a very useful data structure, because it sorts, quickly, at insert time.

See also: https://en.wikipedia.org/wiki/Heap_(data_structure)

You can use it for things like:

  • Help with scientific computing
  • Quickly sorting
  • Priority queues

Installation

If available in Hex, the package can be installed as:

  1. Add heap to your list of dependencies in mix.exs:

    def deps do [{:heap, "~> 0.0.1"}] end

Examples

Create a min heap and use it to find the smallest element in a collection:

1..500 |> Enum.shuffle |> Enum.into(Heap.min) |> Heap.root
# => 1

Likewise, for max heaps:

1..500 |> Enum.shuffle |> Enum.into(Heap.max) |> Heap.root
# => 500

A priority queue:

Tuples are compared by their elements in order, so you can push tuples of {priority, term} into a Heap for sorting by priority:

Heap.new
|> Heap.push({4, :jam})
|> Heap.push({1, :milk})
|> Heap.push({2, :eggs})
|> Heap.push({1, :bread})
|> Heap.push({3, :butter})
|> Heap.push({2, :coffee})
|> Enum.map(fn {_, what} -> what end)
# => [:bread, :milk, :coffee, :eggs, :butter, :jam]

Documentation

Full API documentation is available on (hexdocs.pm)[https://hexdocs.pm/heap]

Contributing

  1. Fork it ( https://github.com/Huia/Huia/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request