查找集合中的大多数不同元素

时间:2013-10-26 13:22:30

标签: algorithm language-agnostic

假设我们有一家香水店,有100种不同的香水。

假设有10,000位顾客,每种香水都有一到五颗星。

让我们说问题是:“如何最好地构建一包5种香水,以便95%的顾客至少给其中一种香水评价4+”

如何通过算法进行此操作?

注意:我可以看到即使问题也没有正确形成;不能保证这种结构甚至存在。在两个参数之间进行权衡。

注意:另外,(这使香水类比变得有点人为),无论我们得到一个好的比赛还是三个好比赛都没关系。所以{4.3,0,0,0,0}相当于{4.3,4.2,4.2,4.2,4}} - 在这两种情况下得分都是4.3。

让我们说,为了论证的目的,香水0-19是甜的,香水20-39是酸的,等等(sim。盐,苦,unami)

因此0-19之间会有很高的互相关。

如果你用空间中的100个点建模,那么0-19会非常强烈地相互吸引,它们会组成一个簇。

同样地,你会得到其他四种口味的4个其他群集。

因此,仅从一个指标中,我们就分出了5种不同的口味。

但这种技术是否会扩展?

π

PS只是提供相关技术的名称将非常有用,因为这将允许我向谷歌提供进一步的信息。因此,任何只能在行业认可的术语中重申问题的答案都会有用!

2 个答案:

答案 0 :(得分:2)

该算法应找到问题的解决方案:

  1. 按照给予4+评级的客户数量订购香水
  2. 从列表
  3. 中选择尚未加入的第一款香水
  4. 删除现已满意的客户的评分。
  5. 对包装中的香水2 - 5重复此过程。
  6. 在需要获得满足标准的选择时进行回溯。

答案 1 :(得分:1)

真正的问题是NP难,但你可以使用贪心算法:

  1. 让C成为您的全体客户。
  2. 为每种香水分配由C中的顾客数量给出的覆盖率,每种香水的含量为4+
  3. 按降序覆盖排序。如果C为空并且所有coverage都为零,则随机选择一个香水(实际上,如果C非零但是<原始的5%,则满足您的要求)
  4. 从C中删除刚刚选择的香水
  5. 所满足的所有客户(非评级)
  6. 从2开始重复,除非你已经有5款香水。
  7. 这会自动处理味道聚集:一个给甜味香水留下高分的顾客将会被最受欢迎的香水所满足,他将从C中被击出,所有他的进一步收视率忽略,算法将继续满足其他客户。

    另外,你应该注意到即使你不能满足五种香水的必要条件(95%,4 +),香水的相似性也会确保这种算法最大化覆盖范围和标记 - 所以你可能最终得到比方说,(93%,3.9)。

    另外,假设有10%的用户没有给出任何高于3的分数。没有办法你可以满足95%的客户,因为总数的10%最多只有3%满足的。您可能希望与实际确实至少提供4+评级的客户构建C.

    或者您可以更改算法而不是问题中的算法,决定使用背包:您想要获得最高累积评级。这也提高了客户对整体包装感到满意的可能性(因为他几乎保证非常喜欢一个香水,但他可能非常不喜欢其他四个)。