配对比较算法设计

问题描述 投票:1回答:1

我有5个单词的15个分组。假设第一个分组是'happy'分组,如下:[“ happy”,“ smile”,“ fun”,“ joy”,“ laugh”]],第二个分组是'sad'分组,并且是以下:[“悲伤”,“皱眉”,“冒泡者”,“哭泣”,“雨云”]。所有其他分组都是相似的,每个阵列中有五个单词。

我正在设计一个配对比较react app,我需要从每个分组中随机选择一个单词,然后与从每个分组中随机选择的单词配对。从上面的示例中,用于分组1和2的一对可能是[“ smile”,“ cry”]。总应该有120对(每个分组恰好一对,彼此分组)。

我曾考虑过使用一个循环并逐个进行分组,然后对其余分组中的每个分组,从我正在查看的分组中随机抽取一个单词,从另一个分组中抽取一个随机单词,然后创建一个配对。

我觉得这不是很优雅或高效,我很好奇如何设计更好的算法。我认为递归可能会有所帮助,但我想不出在这种情况下如何使用它。

任何想法或想法?谢谢!

algorithm
1个回答
0
投票

我曾考虑过使用递归,但是很遗憾,我没有想到任何算法。

我在这里尝试的是:当所有集合的列表都不为空时,迭代第一个集合上的每个项目,并将其与其他任何集合中的随机项目配对,然后删除该选定项目。遍历整个第一组后,只需从所有组的列表中删除该第一组即可。这样,就无需进行额外的计算来检查重复项。

let myArray = [["happy", "smile", "fun"],
               ["sad", "frown", "bummer"],
               [1,2,3],
               [4,5,6]]

let pairs = []

while (myArray.length != 1){    
    for (var i = 0; i<myArray[0].length; i++){
        var next = myArray[Math.floor(Math.random() * (myArray.length-1)) + 1];
        var nextindex = Math.floor(Math.random()*next.length)

        pairs.push([myArray [0][i], next[nextindex]]);
        next.splice(nextindex, 1)
    }
    anarray.splice(0, 1);
}

console.log(pairs)

尽管,正如您说的那样,此代码也不是优雅的(也是最有效的)。应该有一个更好的解决方案,因此值得继续思考更好的算法!

© www.soinside.com 2019 - 2024. All rights reserved.