markov-chain 0.1.1

A generic markov chain library.
Documentation
# markov-chain
A markov chain library for Rust.

# [Documentation]https://docs.rs/markov-chain/0.1.0/markov_chain/

# [Crates.io]https://crates.io/crates/markov-chain

# Features
* Training sequences of arbitrary types
* Nodes of N order
* Specialized string generation and training
* Serialization via serde
* Generation utility

# Wishlist
* Iterator for getting random items one-at-a-time
* Infinite chain generation
* Implementations of serde file writing in a utility module
* Finished documentation complete with examples

# Building
By default, the library does not build the full `markov-util` binary. To include
the binary in the build, add the flags `--features "generator serde_cbor
serde_yaml"` to `cargo build` to generate the binary. Additionally, if you do
not want to compile with CBOR or YAML support, you can remove whichever you
want to omit. **Also note that at least one serde_\* library is required to build
markov-util.**

# Basic usage
In your Cargo.toml file, make sure you have the line `markov_chain = "0.1"`
under the `[dependencies]` section.

Markov chains may be created with any type that implements `Clone`, `Hash`,
and `Eq`, and with some order (which is the number of items per node on the
markov chain).

It can be used with numbers:

```rust
use markov_chain::Chain;

let mut chain = Chain::new(1); // 1 is the order of the chain

// Train the chain on some vectors
chain.train(vec![1, 2, 3, 2, 1, 2, 3, 4, 3, 2, 1])
    .train(vec![5, 4, 3, 2, 1]);

// Generate a sequence and print it out
let sequence = chain.generate();
for number in sequence {
    print!("{} ", number);
}
println!("");
```

`Chain<T>` also derives from the serde `Serialize` and `Deserialize` traits, so
any `T` that derives those traits may be converted to and from a serialized
form. This is useful for writing to/from files. (File writing is on the TODO
list).

```rust
// TODO: file writing example
```

# License
ISC, see [COPYING](COPYING) for details.