quantrs2_core/quantum_walk/
mod.rs1mod continuous;
12mod discrete;
13mod eigensolvers;
14mod graph;
15mod multi;
16mod search;
17
18#[cfg(test)]
19mod tests;
20
21pub use continuous::{ContinuousQuantumWalk, SzegedyQuantumWalk};
22pub use discrete::DiscreteQuantumWalk;
23pub(crate) use eigensolvers::{compute_laplacian_eigenvalues_impl, estimate_fiedler_value_impl};
24pub use graph::{CoinOperator, Graph, GraphType, SearchOracle};
25pub use multi::{DecoherentQuantumWalk, MultiWalkerQuantumWalk};
26pub use search::QuantumWalkSearch;
27
28pub fn quantum_walk_line_example() {
30 println!("Quantum Walk on a Line (10 vertices)");
31
32 let graph = Graph::new(GraphType::Line, 10);
33 let walk = DiscreteQuantumWalk::new(graph, CoinOperator::Hadamard);
34
35 let mut walk = walk;
37 walk.initialize_position(5);
38
39 for steps in [0, 5, 10, 20, 30] {
41 walk.initialize_position(5);
43 for _ in 0..steps {
44 walk.step();
45 }
46 let probs = walk.position_probabilities();
47
48 println!("\nAfter {steps} steps:");
49 print!("Probabilities: ");
50 for (v, p) in probs.iter().enumerate() {
51 if *p > 0.01 {
52 print!("v{v}: {p:.3} ");
53 }
54 }
55 println!();
56 }
57}
58
59pub fn quantum_walk_search_example() {
61 println!("\nQuantum Walk Search on Complete Graph (8 vertices)");
62
63 let graph = Graph::new(GraphType::Complete, 8);
64 let marked = vec![3, 5]; let oracle = SearchOracle::new(marked.clone());
66
67 let mut search = QuantumWalkSearch::new(graph, oracle);
68
69 println!("Marked vertices: {marked:?}");
70
71 let (found, prob, steps) = search.run(50);
73
74 println!("\nFound vertex {found} with probability {prob:.3} after {steps} steps");
75}