我知道那是个可怕的标题。我没有接受过CS的训练,所以我还没有上过算法课程来知道这可能是什么。
让我解释一下:
我有一个包含6个数字集合的数组:
var theList = [{[1,2,3,4,5,6],[1,2,3,4,5,7],[1,2,3,4,6,7],[1,3,4,5,6,7]}];这个数组可以很大。然后,我将遍历数组中的每一项,并计数其中三组的出现情况。ie 1 2 3出现3次,2 3 4出现3次,等等。我将此信息保存在另一个数组中,其计数显示为索引3:
var countList = [{[1,2,3,3],[2,3,4,3]}]接下来我要做的是检查每组6人(来自theList),并检查countList中每组3人的出现次数。如果它们都大于1,则删除这组6,减少countList中的计数,然后继续到下一个数字。
这似乎是可行的,然而,数字仍然包含了数量众多的三人组,从较高的数字。例如,如果数字从1-10开始,当计算完成时,较低的三组(1,2,3,1,2,4)很少出现,但是更高的三组(6,7,8,8,9)有很多次出现,所以我最后得到的是一组六组,从重复搜索开始的低数,但它们都以相同的几个高数结束。
我的看法是,由于countList是排序的,而六组列表(theList)是排序的,所以它会更经常地“看到”那些较低的三组,并与它们一起删除六组,但是当它到达较高的数字时,较低的组都被删除了,因此它们“必须”存在。
有什么算法我可以查一下吗?
如果这让人困惑,我很抱歉,谢谢你的帮助。
发布于 2015-06-28 19:25:10
正如您所述,由于theList是排序的,所以您倾向于删除较低的运行次数而不是较高的运行次数。如果你想要对称,那么一种方法是在开始去除阶段之前随机地洗牌theList。
随机调整一个(Javascript)数组是一个众所周知的问题.请参阅this community Wiki question,以获得现成的答案。
https://stackoverflow.com/questions/31103219
复制相似问题