描述列表包含重复项的程度的列表的 属性 是什么?

What do you call the property of a list that describes the degree to which it contains duplicates?

我有一个函数可以选择列表的笛卡尔积,使得重复元素的数量最多:

import Data.List (nub)

f :: Eq a => [[a]] -> [[a]]
f xss = filter ((==) minLength . length . nub) cartProd
  where
    minLength = minimum (map (length . nub) cartProd)
    cartProd = sequence xss

例如:

*Main> f [[1,2,3],[4],[1,5]]
[[1,4,1]]

但是:

*Main> sequence [[1,2,3],[4],[1,5]]
[[1,4,1],[1,4,5],[2,4,1],[2,4,5],[3,4,1],[3,4,5]]

我的函数 f 的结果有 属性 的名称吗?

我相信你的函数正在计算 minimum set cover:

Given a set of elements { 1 , 2 , . . . , n } (called the universe) and a collection S of sets whose union equals the universe, the set cover problem is to identify the smallest sub-collection of S whose union equals the universe.

在你的例子中,n 是 length xss。对于 concat xss 的每个不同元素 x 在 S 中有一个集合,即集合 { i | x `elem` (xss !! i) } 出现 x 的所有索引中。然后最小集合覆盖告诉您从 xss 中的每个列表中选择哪个 x(有时会给您多个选择;任何选择将产生相同的最终小节长度)。

这是一个适用于您的 [[1,2,3],[4],[1,5]]:

的示例

宇宙是{1,2,3}。

集合S中有五套;我将它们命名为 S_1 到 S_5:

  • S_1 = {1,3} 因为第一个和第三个列表包含 1.
  • S_2 = {1} 因为第一个列表包含 2.
  • S_3 = {1} 因为第一个列表包含 3.
  • S_4 = {2} 因为第二个列表包含 4.
  • S_5 = {3} 因为第三个列表包含 5.

这个的最小集合封面是{S_1, S_4}。因为这是一组封面,这意味着每个列表都包含 14。因为它是最小的,所以没有其他集合选择会产生更小的最终值集合。因此,我们可以从每个列表中选择 14 来产生最终答案。碰巧的是,没有列表同时包含 14 所以只有一个选择,即 [1,4,1].