• Stars
    star
    4
  • Rank 3,205,125 (Top 65 %)
  • Language
    Crystal
  • License
    MIT License
  • Created about 8 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

data structure heap for crystal-lang

heap

useful function that use array as a heap

Installation

Add this to your application's shard.yml:

dependencies:
  heap:
    github: chenkovsky/heap.cr

Usage

require "heap"
describe Heap do
  # TODO: Write tests

  it "nsmallest" do
    [99, 1, 88, 2, 3, 56].nsmallest(2).sort.should eq([1, 2])
  end

  it "arg_nsmallest" do
    [99, 1, 88, 2, 3, 56].arg_nsmallest(2).sort.should eq([1, 3])
  end

  it "nsmallest_by" do
    [1, 2, 3].nsmallest_by(2) { |x| -x }.sort.should eq([2, 3])
  end

  it "arg_nsmallest_by" do
    [1, 2, 3].arg_nsmallest_by(2) { |x| -x }.sort.should eq([1, 2])
  end

  it "merge" do
    res = [] of Int32
    Array(Int32).merge([1, 2, 3], [4, 5, 6]) do |x|
      res << x
    end
    res.should eq([1, 2, 3, 4, 5, 6])
  end

  it "mergeby" do
    res = [] of Int32
    Array(Int32).merge_by([3, 2, 1], [6, 5, 4], key_func: ->(x : Int32) { -x }) do |x|
      res << x
    end
    res.should eq([6, 5, 4, 3, 2, 1])
  end

  it "nlargest" do
    [1, 2, 3].nlargest(2).sort.should eq([2, 3])
  end

  it "arg_nlargest" do
    [1, 2, 3].arg_nlargest(2).sort.should eq([1, 2])
  end

  it "nlargest_by" do
    [1, 2, 3, 4].nlargest_by(2) { |x| -x }.sort.should eq([1, 2])
  end

  it "arg_nlargest_by" do
    [1, 2, 3, 4].arg_nlargest_by(2) { |x| -x }.sort.should eq([0, 1])
  end

  it "push pop" do
    a = [1, 2]
    a.heap_push 3
    a.heap_pop.should eq(1)
  end

  it "heapify" do
    a = [3, 2, 1]
    a.heapify.should eq([1, 2, 3])
  end

  it "min_max_heap" do
    heap = MinMaxHeap(Int32).new
    heap << 1
    heap << 90
    heap << 100
    STDERR.puts heap.to_a
    arr = [1, 90, 100, 4, 8, 3, 2, 85, 40, 55, 70, 75, 60, 50, 10, 80]
    heap = MinMaxHeap(Int32).new arr
    heap.pop_last.should eq(100)
    heap.pop_last.should eq(90)
    heap << 100
    heap << 90
    arr2 = [] of Int32
    while heap.size > 0
      arr2 << (heap.pop)
    end
    arr2.should eq(arr.sort)
    heap = MinMaxHeap.new arr, max_size: 4
    arr2 = [] of Int32
    while heap.size > 0
      arr2 << (heap.pop)
    end
    arr2.should eq([1, 2, 3, 4])
  end
end

Development

TODO: Write development instructions here

Contributing

  1. Fork it ( https://github.com/chenkovsky/heap.cr/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

Contributors

  • chenkovsky chenkovsky.chen - creator, maintainer

More Repositories

1

docopt.cr

docopt for crystal-lang
Crystal
23
star
2

aha

useful algorithm for text processing. includes ahocorasick automaton, suffix automaton, symspell....
Crystal
8
star
3

aho_corasick

aho_corasick for crystal-lang
Crystal
5
star
4

kuhn_munkres

kuhn munkres algorithm c implementation
C
4
star
5

super_template

SQL Template for Ruby
Ruby
4
star
6

pygoogle

useful google apis for language processing
Python
3
star
7

ngram

efficient data structure for storing ngram.
C
3
star
8

cookie_export

export cookie from firefox and chrome
Python
3
star
9

xegex

excellent regular expression tool.
Crystal
3
star
10

app_spiders

spiders crawl android app
Python
2
star
11

huffman

huffman algorithm in crystal
Crystal
2
star
12

darts-clone

Automatically exported from code.google.com/p/darts-clone
C++
2
star
13

pyngram

python binding for ngram query library
C
2
star
14

shears

lm prune by size, based on srilm
C++
2
star
15

mxnet.cr

mxnet bind for crystal-lang [WIP]
Crystal
2
star
16

rbngram

ruby binding for ngram query
C
2
star
17

lmprune

prune language model by gram num
C++
2
star
18

recpy

recommend system based on sklearn and numpy. It uses vector operation, so it's very fast.
Python
2
star
19

LuceneBench

Lucene Benchmark : benchmarking Lucene vs. SeekStorm
Java
1
star
20

rake_hdfs

a patch makes rake run on hdfs file system
Ruby
1
star
21

graphviz.cr

Crystal
1
star
22

crytok

Fastest configurable Indo European Language Tokenizer on earth
Crystal
1
star
23

blis.cr

crystal-lang binding for blis
Crystal
1
star
24

rake_emr

run task on emr with less pain
Ruby
1
star
25

super_io

serialize, deserialize for crystal
Crystal
1
star
26

rsatomic

Rust
1
star
27

fast-params

Python
1
star