From 83524348531d11f61332d7e8ab0b3acb31498e44 Mon Sep 17 00:00:00 2001 From: rhishikeshj Date: Mon, 28 Aug 2023 15:42:20 +0200 Subject: [PATCH] Optimise topo-sort. Avoid creating sets in the recur. This seems to save around 3 seconds for a graph with about 8k nodes. --- src/com/stuartsierra/dependency.cljc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/stuartsierra/dependency.cljc b/src/com/stuartsierra/dependency.cljc index 47a5e7f..6272b5d 100644 --- a/src/com/stuartsierra/dependency.cljc +++ b/src/com/stuartsierra/dependency.cljc @@ -143,7 +143,11 @@ [add g]))] (recur (cons node sorted) (remove-node g' node) - (clojure.set/union (set more) (set add))))))) + ;; NOTE: dep/topo-sort:master creates set from more and add + ;; this seems to take much longer than a simple union + ;; on more and add. + ;; more and add are guaranteed to be sets by the above code. + (clojure.set/union more add)))))) (def ^:private max-number #?(:clj Long/MAX_VALUE