qq_31382269 2023-12-11 10:33 采纳率: 33.3%
浏览 30
已结题

虚心请教C#的代码优化问题

虚心请教,我遇到了一个问题,水平有限,困扰我好几天了:
有9个嵌套的for循环,每个for循环各循环100次,最里面是一个封装好的函数,该函数输入为数组,输出为Z。我需要遍历计算所有的Z值,再取其最小值。PS:已知该函数的输入和输出非线性关系,所以尽量全部计算。
代码:C#

 int[]  X =  new  int[10];
    int Z = 0;
    int Min = 10000;
    for(int i1 = 0;i1<100;i1++)
    {
        X[0] = I1;
         for(int i2 = 0;i2<100;i2++)
        {
            X[1] = i2;
            //多层嵌套省略
             ........................
                      for(int i9 = 0;i9<100;i9++)
                     {
                           X[8] = i9 ;
                           X[9] = 100 - i1 -i2 -i3 - i4 - i5 - i6 - i7 - i8 - i9;
                           Z = Function(X);
                           if(Z < Min)   Min = Z;
                     }
        }
    }
```c#



请问:
1.由于Function函数的输入和输出不是呈线性关系,有没有其它算法可以优化,从而减少计算量?

2.如果在必须要暴力全部计算Z值的前提下,可以采取何种方法加快运算速度,减少等待时间?

  • 写回答

17条回答 默认 最新

  • wanghui0380 2023-12-11 14:14
    关注

    有些东西不明确,所以你可以暂时需要按楼上的建议修改。
    1.可以用并行
    2.可以分块并行

    不明确的地方
    1.100 - i1 - i2 - i3 - i4 - i5 - i6 - i7 - i8 - i9; 可以是负数?比如都是99
    2.Function 这个概率判定的到底是什么?线性相关,还是说这就是是个离散度,余弦相似度,方差这种

    如果疑问1,i9也在0-99不是负数,我们可以简化到递归。 因为我们倒推来看 a+b=100,b=100-a,所以倒过来递归处理,这就可以省掉很多多余的循环步骤

    如果疑问2是非线性相关,那么我们不用全排列,用组合就行,那么a+b=100,a的值可以只限定到100/2=50,这样也可以省掉很多多余的循环步骤

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(16条)

报告相同问题?

问题事件

  • 系统已结题 12月22日
  • 已采纳回答 12月14日
  • 赞助了问题酬金15元 12月11日
  • 创建了问题 12月11日

悬赏问题

  • ¥20 全书网Java爬取数据
  • ¥15 SAP HANA SQL Script 。SUM OVER 怎么加where
  • ¥15 怎么获取红包封面的原始链接,并且获取红包封面序列号
  • ¥100 微信小程序跑脚本授权的问题
  • ¥60 为什么使用python对地震数据进行umap降维后,数据成图会出现不连续的现象
  • ¥100 房产抖音小程序苹果搜不到安卓可以付费悬赏
  • ¥15 STM32串口接收问题
  • ¥15 腾讯IOA系统怎么在文件夹里修改办公网络的连接
  • ¥15 filenotfounderror:文件是存在的,权限也给了,但还一直报错
  • ¥15 安卓qpython向ksweb服务器post文件失败