问答

对成员按照指定的数量进行分组和排列

作者:admin 2021-05-08 我要评论

// 要求一:将所有成员进行分组,每三个人一组,列出所有的组合,每个组合不能重复// 所有人员列表 (公司所有成员)$peopleList = [ '小红','小黄','小李','小...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
// 要求一:将所有成员进行分组,每三个人一组,列出所有的组合,每个组合不能重复
// 所有人员列表 (公司所有成员)
$peopleList = [
    '小红','小黄','小李','小丽','小刘','小陈','小丁','小钱','小赵','小孙', ...
];

// 示例:
$groupDemo = [
    ['小红','小黄','小李'],
    ['小红','小黄','小丽'],
    ['小红','小黄','小刘'],
    ...
];

// 要求二:给出一个参考组,和一个预选组合,参考组合里面有评分,将与选组合进行分组,并按照$reference参考组中的score评分,给出最优和参考组中最多的组合。同样的,组合出来的队伍不能重复

// 参考组 (预选的组成)
$reference = [
    ['score' => '9.5' , 'list' => ['小红','小黄','小李']],
    ['score' => '9.1' , 'list' => ['小红','小黄','小刘']],
    ['score' => '8.7' , 'list' => ['小丁','小钱','小赵']],
    ...
];

请问怎么使用PHP或者用一个简单的算法来实现呢

###

我个人想不到用“简单的算法”来实现。
第一个问题:
我的想法是把每个元素看作一个数字,值就是其索引,因为要组合成三人的成员,所以嵌套循环三次,根据索引的和来甄别是否重复;当然还要根据索引是否重复来甄别,具体代码如下:

public function demo()
    {
        $peopleList = ['小红','小黄','小李','小丽','小刘','小陈','小丁','小钱','小赵','小孙'];

        $count = count($peopleList);
        $result = [];
        for ($i = 0; $i < $count; $i++) {
            for ($j = 0; $j < $count; $j++) {
                for ($k = 0; $k < $count; $k++) {
                    //根据索引之和甄别是否重复
                    $sum = $i + $j + $k;
                    if (isset($result[$sum])) {
                        continue;
                    }
                    //根据索引甄别是否重复
                    if ($i == $j || $j == $k || $i == $k) {
                        continue;
                    }
                    $result[$sum] = [$peopleList[$i], $peopleList[$j], $peopleList[$k]];
                }
            }
        }

        echo '<pre>';print_r($result);
    }

这个方法很粗暴,但是我目前没想到其他方式,并且,这种方式的时间复杂度很高,一旦数组的元素过大,比如超过1000,基本执行不了。
我就提供这个思路,你可以更加深入的优化。

第二个问题没太懂,不做回答了。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 对成员按照指定的数量进行分组和排列

    对成员按照指定的数量进行分组和排列

  • 关于spring部署后的容器的问题?

    关于spring部署后的容器的问题?

  • vue 使用echarts的图表进行联动 echart

    vue 使用echarts的图表进行联动 echart

  • 计算实际时间天数(时间范围去重)

    计算实际时间天数(时间范围去重)

腾讯云代理商
海外云服务器