use crate::RetrieveError;
pub fn optimize_truncation_r(num_vectors: usize, dimension: usize) -> Result<f32, RetrieveError> {
if num_vectors == 0 || dimension == 0 {
return Err(RetrieveError::InvalidParameter(
"cannot optimize parameters for empty dataset".into(),
));
}
let n = num_vectors as f32;
let d = dimension as f32;
let log_n = n.ln();
let r = (log_n * d.sqrt()).max(1.0);
Ok(r)
}
pub fn estimate_max_degree(num_vectors: usize, r: f32) -> usize {
let n = num_vectors as f32;
let max_deg = (n.powf(2.0 / 3.0) * r).ceil() as usize;
max_deg.clamp(16, 256) }