Skip to content

Commit 1700c82

Browse files
Make the graph more symmetric (under reflection)
1 parent 63ad896 commit 1700c82

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

parallel-hnsw/src/lib.rs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -162,15 +162,23 @@ impl<C> Layer<C> {
162162
self.nodes.len()
163163
}
164164

165-
pub fn routing_nodes(&self, nodeid: NodeId, sp: SearchParameters) -> Vec<NodeId> {
165+
pub fn routing_nodes(
166+
&self,
167+
nodeid: NodeId,
168+
sp: SearchParameters,
169+
) -> impl Iterator<Item = NodeId> {
166170
// Calculate using the circulants
167171
let size = self.node_count();
168172
PRIMES
169173
.iter()
170174
.take(sp.circulant_parameter_count)
171-
.map(|prime| NodeId((nodeid.0 + prime) % size))
172-
.filter(|i| *i != nodeid)
173-
.collect()
175+
.flat_map(move |prime| {
176+
[
177+
NodeId((nodeid.0 + prime) % size),
178+
NodeId((nodeid.0 + (size - (prime % size))) % size),
179+
]
180+
})
181+
.filter(move |i| *i != nodeid)
174182
}
175183
}
176184

@@ -217,13 +225,14 @@ impl<C: Comparator> Layer<C> {
217225
let neighbors = self.get_neighbors(next);
218226
let mut neighbor_distances: Vec<_> = neighbors
219227
.iter() // Remove reviously visited nodes
220-
.chain(self.routing_nodes(next, sp).iter())
221-
.filter(|n| !visited.contains(*n))
228+
.copied()
229+
.chain(self.routing_nodes(next, sp))
230+
.filter(|n| !visited.contains(n))
222231
.map(|n| {
223232
let distance = self
224233
.comparator
225-
.compare_vec(v.clone(), AbstractVector::Stored(self.get_vector(*n)));
226-
(*n, distance)
234+
.compare_vec(v.clone(), AbstractVector::Stored(self.get_vector(n)));
235+
(n, distance)
227236
})
228237
.collect();
229238
neighbor_distances.sort_by_key(|(n, distance)| (OrderedFloat(*distance), *n));

parallel-hnsw/src/parameters.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ impl Default for SearchParameters {
1414
number_of_candidates: 300,
1515
upper_layer_candidate_count: 300,
1616
probe_depth: 2,
17-
circulant_parameter_count: 12,
17+
circulant_parameter_count: 6,
1818
}
1919
}
2020
}
@@ -60,7 +60,7 @@ impl Default for BuildParameters {
6060
number_of_candidates: 6,
6161
upper_layer_candidate_count: 6,
6262
probe_depth: 2,
63-
circulant_parameter_count: 12,
63+
circulant_parameter_count: 6,
6464
},
6565
}
6666
}

0 commit comments

Comments
 (0)