mod continuous;
mod discrete;
mod eigensolvers;
mod graph;
mod multi;
mod search;
#[cfg(test)]
mod tests;
pub use continuous::{ContinuousQuantumWalk, SzegedyQuantumWalk};
pub use discrete::DiscreteQuantumWalk;
pub(crate) use eigensolvers::{compute_laplacian_eigenvalues_impl, estimate_fiedler_value_impl};
pub use graph::{CoinOperator, Graph, GraphType, SearchOracle};
pub use multi::{DecoherentQuantumWalk, MultiWalkerQuantumWalk};
pub use search::QuantumWalkSearch;
pub fn quantum_walk_line_example() {
println!("Quantum Walk on a Line (10 vertices)");
let graph = Graph::new(GraphType::Line, 10);
let walk = DiscreteQuantumWalk::new(graph, CoinOperator::Hadamard);
let mut walk = walk;
walk.initialize_position(5);
for steps in [0, 5, 10, 20, 30] {
walk.initialize_position(5);
for _ in 0..steps {
walk.step();
}
let probs = walk.position_probabilities();
println!("\nAfter {steps} steps:");
print!("Probabilities: ");
for (v, p) in probs.iter().enumerate() {
if *p > 0.01 {
print!("v{v}: {p:.3} ");
}
}
println!();
}
}
pub fn quantum_walk_search_example() {
println!("\nQuantum Walk Search on Complete Graph (8 vertices)");
let graph = Graph::new(GraphType::Complete, 8);
let marked = vec![3, 5]; let oracle = SearchOracle::new(marked.clone());
let mut search = QuantumWalkSearch::new(graph, oracle);
println!("Marked vertices: {marked:?}");
let (found, prob, steps) = search.run(50);
println!("\nFound vertex {found} with probability {prob:.3} after {steps} steps");
}