use std::collections::HashMap;
const RRF_K: f32 = 60.0;
pub fn rrf_union(a: &[usize], b: &[usize]) -> Vec<usize> {
let mut scores: HashMap<usize, f32> = HashMap::new();
for (rank, &id) in a.iter().enumerate() {
*scores.entry(id).or_insert(0.0) += 1.0 / (RRF_K + rank as f32 + 1.0);
}
for (rank, &id) in b.iter().enumerate() {
*scores.entry(id).or_insert(0.0) += 1.0 / (RRF_K + rank as f32 + 1.0);
}
let mut all: Vec<(usize, f32)> = scores.into_iter().collect();
all.sort_by(|x, y| crate::order::cmp_score_desc(*x, *y));
all.into_iter().map(|p| p.0).collect()
}