Invizory/sperm

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# Stupendous Permutations
**Sperm** is a random permutations generator based on the ideas of group
theory that allows you to generate very large permutations without extra
memory consumption.

[![Gem Version](https://badge.fury.io/rb/sperm.png)](https://badge.fury.io/rb/sperm)
[![Build Status](https://travis-ci.org/Invizory/sperm.png)](https://travis-ci.org/Invizory/sperm)
[![Code Climate](https://codeclimate.com/github/Invizory/sperm.png)](https://codeclimate.com/github/Invizory/sperm)
[![Coverage Status](https://coveralls.io/repos/Invizory/sperm/badge.png)](https://coveralls.io/r/Invizory/sperm)

## Installation
Add this line to your application's Gemfile:
```ruby
gem 'sperm'
```

And then execute:
```bash
$ bundle
```

Or install it yourself as:
```bash
$ gem install sperm
```

## Usage
```ruby
Sperm.rand(5).each { |element| puts element }
```

This is a shorthand for:
```ruby
Sperm::RandomPermutations.new(5).rand.each { |element| puts element }
```

You can also use your own source of randomness:
```ruby
Sperm::RandomPermutations.new(5, Random.new(42))
Sperm::RandomPermutations.new(10**8, SecureRandom)
```

## How it works
### Computational complexity
Operation                  | Time complexity    | Space complexity
---------------------------|--------------------|------------------
Initialization             | O(n/ϕ(n) · log(n)) | O(1)
Generation of next element | O(1)               | O(1)

## Copyright
Copyright © 2014 [Arthur Khashaev]. See [LICENSE.txt](LICENSE.txt) for details.

[Arthur Khashaev]: http://khashaev.ru/