sublinear_solver/sublinear/
mod.rs1pub mod dimension_reduction;
7pub mod spectral_sparsification;
8pub mod sublinear_neumann;
9pub mod johnson_lindenstrauss;
10pub mod sketching;
11pub mod fast_sampling;
12
13use crate::matrix::Matrix;
14use crate::types::Precision;
15use crate::error::{SolverError, Result};
16
17#[derive(Debug, Clone)]
19pub struct SublinearConfig {
20 pub target_dimension: usize,
22 pub sparsification_eps: Precision,
24 pub jl_distortion: Precision,
26 pub sampling_probability: Precision,
28 pub max_recursion_depth: usize,
30 pub base_case_threshold: usize,
32}
33
34impl Default for SublinearConfig {
35 fn default() -> Self {
36 Self {
37 target_dimension: 64,
38 sparsification_eps: 0.1,
39 jl_distortion: 0.5,
40 sampling_probability: 0.01,
41 max_recursion_depth: 10,
42 base_case_threshold: 100,
43 }
44 }
45}
46
47#[derive(Debug, Clone)]
49pub enum ComplexityBound {
50 Logarithmic(usize),
52 SquareRoot(usize),
54 Sublinear { n: usize, eps: Precision },
56}
57
58pub trait SublinearSolver {
60 fn verify_sublinear_conditions(&self, matrix: &dyn Matrix) -> Result<ComplexityBound>;
62
63 fn solve_sublinear(
65 &self,
66 matrix: &dyn Matrix,
67 b: &[Precision],
68 config: &SublinearConfig,
69 ) -> Result<Vec<Precision>>;
70
71 fn complexity_bound(&self) -> ComplexityBound;
73}