README.md
# 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/