异星工厂吧 关注:62,293贴子:398,897

回复:【电路展示】最大值筛选模块

只看楼主收藏回复

在探究这个问题前,我们先回顾平均值这个公式
A=(a+b+c+d+e+.....)/N
为了方便演示,我们先假设有5个数a a+1 a+2 a+3 a+4
A=(5a+10)/5=a+2 ≥ 信号a和a+1
不知道大家有没有明白,只要10<N的时候,int(A)必然≤所有信号
我们再抽象一些
我们知道在一堆数据里面总有一个最小值,我们假设为L,那么其他比L大的值便可以表达为:
B=L+b;C=L+c;D=L+d;E=L+e;........
其中,b c d e ....均≥0
那么平均值就可以表达为:
Average=[(L+b)+(L+c)+(L+d)+(L+e)+...+L]/N=[NL+(b+c+d+e+...)]/N=L+(b+c+d+e+...)/N
通过这个表达式,我们可以发现只要(b+c+d+e+...)<N,int(Average)=L最小值
这样便会出现这个问题
所以出现这种情况的最常见情形就是有(N-1)个相同值L,第N个较大的值U就在[L,L+N-1]的范围内


IP属地:重庆16楼2022-04-20 16:04
回复
    所以我们的解决办法就是将最后得出的结果,对其进行倍数放大
    放大多少倍呢
    在回过头看这个条件(b+c+d+e+...)<N
    (b+c+d+e+...)这个部分有多少个数呢,N-1个,因为有个最小值L它对应的数值为0,所以不存在
    我们都知道,在游戏里信号只能为整数
    所以b c d e ...这些数值要为0,1,2,3...
    如果要满足这个不等式的话,b c d e ...只能为0或者1
    这就给了最大值一个约束,即U=L或者U=L+1
    这个就给了我们解决思路,造成这个问题的原因是有多个相同的最小值L和多个比最小值L最多大1的最大值L
    我们只需要把那个1进行倍数放大,放大到N倍,便可以破解这个问题
    Average=N*[(L+b)+(L+c)+(L+d)+(L+e)+...+L]/N=NL+(b+c+d+e+...)======>Average一定是一个没有小数的整数
    再次强调:出现这个问题是因为多个数据相同,最大值仅比最小值多1.这个关系到后面问题的解决


    IP属地:重庆17楼2022-04-20 16:17
    回复
      2025-07-18 00:16:32
      广告
      在刨根究底后,我们就有了解决办法
      前面说的有点问题,重新总结一下
      出现问题的限定条件:N1个最小值,N2个最大值,最大值=最小值+1(或者N-1个最小值,1个最大值,最大值<最小值+N)
      解决办法:在原有的取机制模块所有信号乘以(N1+N2)倍


      IP属地:重庆18楼2022-04-20 16:20
      回复
        好了,继续开干


        IP属地:重庆19楼2022-04-20 16:21
        回复
          突然发现自己做的最终模块还能简化一下,我先试完简化最终模块再讲


          IP属地:重庆20楼2022-04-20 16:32
          回复
            不试了,继续吧
            首先是将第一次筛选好的信号15 16按N倍扩大,变成信号30 32
            先用判断器获取信号个数N,再用运算器计算输入信号的N倍
            具体如图



            IP属地:重庆21楼2022-04-20 16:59
            回复
              然后,实际上我们上一步在运算的时候,信号N也会跟着执行,所以需要用运算器消除信号N,再进行输出


              IP属地:重庆22楼2022-04-20 17:05
              回复
                接着,我们要求信号17 16 16的平均值,然后再对其进行比较筛选
                先回顾N倍的平均值计算公式:
                Average=N*[(L+b)+(L+c)+(L+d)+(L+e)+...+L]/N=NL+(b+c+d+e+...)=B+C+D+E+...=Sum(B+C...)
                可以发现,新的平均值就是原来信号之和
                所以平均值计算就是求和,然后在进行比较,考虑比较的途中有信号A乱入,要消除信号A
                具体如图




                IP属地:重庆23楼2022-04-20 17:14
                回复
                  2025-07-18 00:10:32
                  广告
                  通过上面那一步,我们就获得了最佳答案
                  但是那个答案是原来的N倍,所以还要除以N
                  同样还需要消除信号N
                  具体如图



                  IP属地:重庆24楼2022-04-20 17:19
                  回复
                    最后附上案例模块,也就是稍微改进的
                    https://pa去n.baidu.co去m/s/1PiLK去OvMy4ga3i去XbuaG去hhTw
                    feg0


                    IP属地:重庆25楼2022-04-20 17:20
                    回复
                      我感觉这东西还能继续改进,没时间去搞,等有空再说


                      IP属地:重庆26楼2022-04-20 17:21
                      回复
                        好了,优化后的模块
                        就是在输入的时候对其翻个N倍,这样就可以避免后续的问题了
                        https去://pan.b去aidu.com/s/1oB0去5Wmgq6rgzazq去zeNimlw
                        提取码:jnin
                        不详细讲解,如图所示


                        IP属地:重庆27楼2022-04-20 18:25
                        回复
                          对信号源做脉冲处理是因为这玩意基本用于火车发车,信号来自库存箱子进进出出不可能稳定的;有可能你会把所有火车全发出去了


                          28楼2022-04-21 08:02
                          回复
                            大佬.jpg


                            IP属地:山西29楼2022-04-30 20:15
                            回复