从N个数中等概率打印M个数

本文介绍了如何在给定长度为N的无重复元素数组arr和整数M的情况下,实现一个函数,以等概率随机打印arr中的M个不同元素,确保不重复打印,并要求时间复杂度为O(M),额外空间复杂度为O(1),允许修改原数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【题目】

给定一个长度为N且没有重复元素的数组arr和一个整数m,实现函数等概率随机打印arr的M个数。

【要求】

相同的数不要重复打印
时间复杂度为O(M),额外空间复杂度为O(1)
可以改变arr数组

【代码】

//从N个数中等概率打印M个数
    public static void printRandM(int[] arr, int m) {
        if(arr==null||arr.length==0||m<0){
            return;
        }
        m=Math.min(arr.length, m);//防止m取值太大无效
        int count=0;
        int i=0;
        while(count<m){
            i=(int)Math.random()*(arr.length-count);//逐步缩小打印范围
            System.out.println(arr[i]);//在指定范围内随机打印arr[i]
            swap(arr,i,arr.length-count++-1);//打印后将arr[i]换到末尾
        }
    }

【注意】

很多有关等概率随机的面试题都是用这种和最后一个位置交换的解法。

根据BP神经网络的原理,构建网络性能的优劣因素,关键在于网络输入层的影响因子准确性,即网络训练样本的真实性和等值性(区域地质情况的相似性),因此笔者只对华北型矿区的44个矿井回采工作面进行统计作为本网络的训练样本,如表5-1所示,分别收集了多个矿井采煤面的煤层底板岩层的抗破坏能力系数(ARD)、煤层埋藏深值(H)、开采煤层的倾角均值(a)、采煤面的宽度(L)、煤层的开采厚度值(M)、实测底板破坏深度(FD)等指标,利用BP神经网络算法进行迭代训练,从而得到深部煤层开采底板破坏最大深度的BP神经网络预测模型。 BP神经网络模型结构分别利用Tansig函数、Logsig函数、Traingdx函数依次作为BP神经网络隐含层、输出层及训练的函数模型进行计算,同时采用Levenberg-Marquardt Backpropagation为阀值和权值的学习函数,Mean Squared Error(MSE)为性能函数。BP神经网络算法中隐含层内神经元数目的设定是一个非常重要的变量因子,其神经元的数目设定太多或太少都会对网络的自由度、系统的容错性能、学习空间等产生重要的影响。Hecht-Nielsen(1987)指出,一个隐含层可能足以解决大多数问题,隐含层设定为1时,隐含层上的节点个数在BP神经网络系统训练中采用公式5-17进行动态设置。L =√ (n+m)+α式中:L代表隐含层内的节点个数;n代表输入层的节点个数;m代表输出层的节点个数;a是调节常量(一般取值1 ~ 10)。将收集到的44组样本数据输入以上设定的BP神经网络系统内运行训练,通过不断的调整网络的调节常量和其他参数,最后得到了该网络的隐含层节点个数、网络最大训练的次数、样本学习率、误差允许阈值等参数依次分别取值为10、1000、0.001、1e-4 时,网络系统通过4次迭代计算后收敛得到系统最优解。本次研究总共采集华北型矿井回采工作面44组实测有效数据,用34组数据归一化后对网络模型进行训练及验证,再用10组数据对网络模型进行测试。网络模型训练回归值衡量的是产出和目标之间的相关性,如图5-5所示,该网络模型的训练、验证、测试的回归值分别为97.471%,94.018%,93.381%;因此,该网络模型能达到预测要求。保存训练后的网络模型为“华北型煤田煤层底板破坏深度预测网络模型。请根据上述要求用python写一个代码,给出代码详细解释,并且样本数据是excel文件
最新发布
08-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值