Skip to content

Time to match sets increases exponentially related to the set sizes #106

Open
@pitalig

Description

@pitalig

I believe that because set comparison tries to match all permutations, it is taking an impracticable time (with 10 items it took 17 minutes 😅) to test bigger sets.

Here is a test that I wrote to check that:

(reduce 
  (fn [acc i]
    (let [result (conj acc i)
          expected (conj result (inc i))]
      (println (time (fact ""
                       result
                       => (match expected))))
      (println (str "set size: " (count result)))
      result))
  #{} (range 10))

This was the result (just removed some noise like the facts results):

"Elapsed time: 4.773552 msecs"
set size: 1

"Elapsed time: 5.979492 msecs"
set size: 2

"Elapsed time: 3.775644 msecs"
set size: 3

"Elapsed time: 5.138717 msecs"
set size: 4

"Elapsed time: 16.466419 msecs"
set size: 5

"Elapsed time: 95.003742 msecs"
set size: 6

"Elapsed time: 674.578195 msecs"
set size: 7

"Elapsed time: 6921.199258 msecs"
set size: 8

"Elapsed time: 79986.038842 msecs"
set size: 9

"Elapsed time: 1036299.751686 msecs"
set size: 10

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions