qq_31382269 2023-12-11 10:33 采纳率: 50%
浏览 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日

悬赏问题

  • ¥15 JETSON NANO
  • ¥15 VS开发qt时如何在paintgl函数中用pushbutton控制切换纹理
  • ¥20 关于 openpyxl 处理excel文件地问题
  • ¥15 MS中不知道高分子的构型怎么构建模型
  • ¥60 QQOP数据,什么是op数据号,怎么提取op数据!能不能大量提取(语言-c语言)
  • ¥15 matlab代码 关于微分方程和嵌套的分段函数。
  • ¥15 onlyoffice编辑完后立即下载,下载的不是最新编辑的文档
  • ¥15 求caverdock使用教程
  • ¥15 Coze智能助手搭建过程中的问题请教
  • ¥15 12864只亮屏 不显示汉字