【发布时间】:2015-11-06 17:35:06
【问题描述】:
假设我有x 对象集,每个集合都有一定数量的对象。我想创建一个数组来存储这些对象的所有唯一“和”组合。
例如,如果我在集合 A 中有 5 个对象,在集合 B 中有 10 个对象,在集合 C 中有 8 个对象,那么我知道从每个集合中挑选一个对象有 5*10*8 = 400 种不同的方式.但我想将这些组合实际存储在一个数组中。
所以数组将是多维的,类似于:
{
{ a, a, a }
{ a, a, b }
{ a, a, c }
...
{ a, b, a }
{ a, b, b }
and so on...
}
我需要尽可能高效的解决方案,因为我正在处理可能存在数千万种组合的情况。我不完全确定如何开始解决这个问题。
抱歉,如果不清楚,但我真的不知道该怎么称呼我想要实现的目标,所以我只是尽我所能描述它。感谢您提供的任何帮助。
编辑:以下是有关该问题的更多信息:
这个问题的目的是我要从每个结果数组中计算一个“分数”值。然后,我想找到最高的n 分数并将它们返回给用户。所以实际上,我相信我不需要将整个数组放在内存中。我可以遍历数组,计算分数,如果分数足够高,则将其添加到返回的数组中。那样的话,我只需要内存中连续的顶部n对象。
我希望这能让事情更清楚。
【问题讨论】:
-
几个 cmets:从符号上讲,我认为
set不能多次拥有相同的元素。或者,至少要知道,当您使用它们的set()时,某些语言(例如 Python)会重复数据删除。其次 - 拥有数以千万计的连击,您是否一次需要整个阵列?或者你可以迭代每一个。否则你可能会遇到内存大小问题,不是吗? -
嘿,如果不清楚,抱歉。每个集合 A、B、C 中的对象都是唯一的。如果您指的是符号
{ a, a, a },我想说的是{ object a from set a, object a from set b, object a from set c }等... -
啊,明白了,然后忽略第一点。第二个仍然存在。
-
是的,我只是要遍历数组中的每个对象,所以我不需要一次全部。那我是不是要把它写到磁盘什么的,然后一块一块地读取呢?
-
如果您一次不需要所有项目,那么您不需要创建整个阵列,也不需要从磁盘或任何东西写入/读取它。如果
A、B和C各有 1000 个元素,那就是 10 亿个组合,但您的程序只需要在给定时间存储这 3*1000 个元素。
标签: arrays combinations