我想使用Clojure的劃分特定集合:分區特定集合
例如: 有一個向量[1 2 3 4 5]
。這裏還有一張地圖,如{2 1, 3 1}
,這意味着生成1個包含2個元素的集合,以及1個包含3個元素的集合。
(some_function {2 1, 3 1} [1 2 3 4 5])
;; I only want to these:
(([1 2 3] [4 5])
([1 2 4] [3 5])
([1 2 5] [3 4])
([1 2] [3 4 5])
([1 3 4] [2 5])
([1 3 5] [2 4])
([1 3] [2 4 5])
([1 4 5] [2 3])
([1 4] [2 3 5])
([1 5] [2 3 4]))
以前,我想到要用(combo/partitions [1 1 2])
生成所有的情況下,再根據條件篩選,但它是如此低效的,當你有一個像[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17]
大載體和地圖像{5 1, 6 2}(generate 1 set that contains 5 elements, and 2 sets that contain 6 elements)
。我只是想在第一時間生成我需要的東西,我該如何完成這項工作?
爲什麼combinatorics效率低下? 「(組合/組合[1 2 3] 2)」可以幫助解決這個問題。確保在使用組合之前對矢量進行分區 – 2014-10-18 02:33:41