Skip to content

Commit 7a90fc5

Browse files
authored
Improve all simple paths multi-target performance (#1520)
* Integrate petgraph's mult-target version of all_simple_paths * Add release note * Resolve review comments
1 parent d1b43b6 commit 7a90fc5

File tree

3 files changed

+28
-28
lines changed

3 files changed

+28
-28
lines changed

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
other:
2+
- |
3+
Avoid unnecessary hashing operations in `rustworkx.all_simple_paths` with
4+
multiple targets, improving performance for the use case.

src/connectivity/mod.rs

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,19 +1036,17 @@ pub fn graph_all_simple_paths(
10361036
Ok(result)
10371037
}
10381038
TargetNodes::Multiple(target_set) => {
1039-
let result = connectivity::all_simple_paths_multiple_targets(
1040-
&graph.graph,
1041-
from_index,
1042-
&target_set,
1043-
min_intermediate_nodes,
1044-
cutoff_petgraph,
1045-
);
1046-
1047-
Ok(result
1048-
.into_values()
1049-
.flatten()
1050-
.map(|path| path.into_iter().map(|node| node.index()).collect())
1051-
.collect())
1039+
let result: Vec<Vec<usize>> =
1040+
algo::all_simple_paths_multi::<Vec<_>, _, foldhash::fast::RandomState>(
1041+
&graph.graph,
1042+
from_index,
1043+
&target_set,
1044+
min_intermediate_nodes,
1045+
cutoff_petgraph,
1046+
)
1047+
.map(|v: Vec<NodeIndex>| v.into_iter().map(|i| i.index()).collect())
1048+
.collect();
1049+
Ok(result)
10521050
}
10531051
}
10541052
}
@@ -1111,19 +1109,17 @@ pub fn digraph_all_simple_paths(
11111109
Ok(result)
11121110
}
11131111
TargetNodes::Multiple(target_set) => {
1114-
let result = connectivity::all_simple_paths_multiple_targets(
1115-
&graph.graph,
1116-
from_index,
1117-
&target_set,
1118-
min_intermediate_nodes,
1119-
cutoff_petgraph,
1120-
);
1121-
1122-
Ok(result
1123-
.into_values()
1124-
.flatten()
1125-
.map(|path| path.into_iter().map(|node| node.index()).collect())
1126-
.collect())
1112+
let result: Vec<Vec<usize>> =
1113+
algo::all_simple_paths_multi::<Vec<_>, _, foldhash::fast::RandomState>(
1114+
&graph.graph,
1115+
from_index,
1116+
&target_set,
1117+
min_intermediate_nodes,
1118+
cutoff_petgraph,
1119+
)
1120+
.map(|v: Vec<NodeIndex>| v.into_iter().map(|i| i.index()).collect())
1121+
.collect();
1122+
Ok(result)
11271123
}
11281124
}
11291125
}

0 commit comments

Comments
 (0)