计算最优分配平均次数

计算最优平均次数。

公司组织了一次游戏,有M个员工参加,给每个员工分配N个乒乓球,支持人每次从一个人取两个乒乓球给另外一个员工,要求最后所有员工手里面的个数相同。…

输入描述:
第一行:输入总人数,1<M<50
第二行:输入分配的个数N,N>0

输出描述:
输出最优方案的移动次数,若不存在输出ERROR

样例输入:
4
6 14 8 4
样例输出:
3

import java.util.Scanner;

public class 平均分配移动次数计数 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int person = Integer.valueOf(scanner.nextLine());//人数
        String str2 = scanner.nextLine();//球的个数
        int[] ballArr = strToIntArray(str2, " ");//球的个数数组
        check(person,ballArr);
    }

    /**
     * 获取控制到输入
     */
    private static String getTerminal() {
        Scanner scanner = new Scanner(System.in);
        return scanner.nextLine();
    }

    /**
     * 获取控制到输入,转Int数组
     */
    private static int[] strToIntArray(String str,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本
针对导频序列个数小于用户数的情况,可以采用以下方式实现导频序列的最优分配: 1. 随机生成初始的导频序列分配方案; 2. 对于每一组导频序列分配方案,利用适应度函数计算其适应度值; 3. 采用粒子群算法对导频序列分配方案进行迭代优化,直到达到最优解。 适应度函数可以采用最小均方误差(MSE)作为指标,即计算每个用户接收到的信号与其发送的信号之间的误差平方和,再对所有用户的误差平方和取平均值。 在Matlab中,可以编写以下适应度函数: ```matlab function f = fitnessFunction(x, h, y) % x为导频序列分配方案,h为信道矩阵,y为接收信号矩阵 N = size(h, 2); % N为导频序列个数 M = size(y, 2); % M为用户数 f = 0; for i = 1:M error = y(:,i) - h(:,x(i))*x(i); % 计算误差 f = f + sum(error.^2); % 累加误差平方和 end f = f / M; % 求平均值 end ``` 其中,x为导频序列分配方案,h为信道矩阵,y为接收信号矩阵,M为用户数,N为导频序列个数。函数返回值f即为适应度值。 在粒子群算法中,需要初始化一定数量的粒子,并对它们进行迭代优化。具体实现可以参考以下Matlab代码: ```matlab % 初始化参数 N = 10; % 粒子数 M = 5; % 用户数 P = 4; % 导频序列数 h = randn(M, P) + 1i*randn(M, P); % 生成随机信道矩阵 y = randn(P, M) + 1i*randn(P, M); % 生成随机接收信号矩阵 maxIter = 100; % 最大迭代次数 w = 0.8; % 惯性权重 c1 = 2; % 自我认知因子 c2 = 2; % 社会认知因子 v = zeros(N, M); % 粒子速度矩阵 x = round(rand(N, M)*(P-1)+1); % 导频序列分配方案矩阵 pbest = x; % 个体最优位置矩阵 gbest = x(1,:); % 全局最优位置矩阵 for i = 1:N if fitnessFunction(x(i,:), h, y) < fitnessFunction(gbest, h, y) gbest = x(i,:); end end % 迭代优化 for iter = 1:maxIter for i = 1:N % 更新粒子速度 v(i,:) = w*v(i,:) + c1*rand(1,M).*(pbest(i,:) - x(i,:)) + c2*rand(1,M).*(gbest - x(i,:)); % 更新导频序列分配方案 x(i,:) = round(x(i,:) + v(i,:)); x(i,x(i,:)>P) = P; % 超出范围的位置取最大值 x(i,x(i,:)<1) = 1; % 超出范围的位置取最小值 % 更新个体最优位置 if fitnessFunction(x(i,:), h, y) < fitnessFunction(pbest(i,:), h, y) pbest(i,:) = x(i,:); end end % 更新全局最优位置 for i = 1:N if fitnessFunction(x(i,:), h, y) < fitnessFunction(gbest, h, y) gbest = x(i,:); end end end ``` 在上述代码中,我们采用了惯性权重、自我认知因子和社会认知因子来控制粒子速度的更新。函数返回的gbest即为最优的导频序列分配方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值