晓晓攻城师 2019-05-15 16:26 采纳率: 0%
浏览 184

有限资源分配问题(资源所在时间段不能重合)

固定的几个域名,分配给新创建的直播,同一个域名直播的时间段不能重合。
怎样分配比较合理?
直播分配好域名还可以修改时间段,此时域名不变。

下面是我目前思考的解决方案。

域名分配:

一、 创建:

    域名索引从 0 开始

    域名个数: ymCount

    当前创建直播的时间段的直播个数: liveCount

    正常直播的总个数  total


    if liveCount >= ymCount

        return 不可创建


    if  count==0 

        按创建的顺序进行。  分配第 total % ymCount 个域名

    else 

        // 找到当前时间段的第一个创建直播域名 == 第 i 个域名。 分配第 (i + 1) % ymCount
        找到空缺的位置的域名 往里面插入


    这样可以最大限度分配时间。


二、 修改:

    要修改的时间段的直播个数(排除当前的直播) liveCount


    if liveCount >= ymCount

        return 不可更新

    else 

        更新时间段


    这样可以最大限度分配时间。
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-09 13:59
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这是一个典型的动态规划问题,我们可以使用一个二维数组来存储每个时间段内可以分配的直播数量和相应的域名数量。在分配新创建的直播时,我们只需要检查这个矩阵中是否存在足够的空间来容纳新的直播,如果存在则返回成功分配的结果,否则返回不可分配。

    以下是PHP实现的示例代码:

    function allocateDomains($ymCount, $liveCount, $total) {
        $domainIndex = array_fill(0, $ymCount, 0); // 初始化域名索引为0
        $domainCount = 0; // 初始化域名总数
        
        // 如果创建的新直播的数量大于等于总的直播数量,则无法分配
        if ($liveCount >= $ymCount) {
            return "不可创建";
        }
        
        // 遍历创建的直播,找到第一个可以分配的直播
        for ($i = 0; $i < $ymCount; $i++) {
            while ($liveCount > 0 && $domainIndex[$i] < $total) {
                $domainIndex[$i]++;
                $liveCount--;
            }
            
            // 如果没有可以分配的空间,则分配下一个时间段的直播
            if ($liveCount <= 0) {
                break;
            }
        }
        
        // 如果分配完成后还剩余空间,则可以在当前时间段添加新的直播
        if ($liveCount > 0) {
            $domainIndex[] = $total;
        }
        
        // 返回分配结果
        return implode(',', $domainIndex);
    }
    

    请注意,这只是一个基本的解决方案,并且可能无法处理所有情况。例如,如果所有的直播都无法在指定的时间段内完成,则可能需要更复杂的逻辑来处理这种情况。

    评论

报告相同问题?