数学吧 关注:890,819贴子:8,751,598
  • 23回复贴,共1

自由发挥一个对一个5维数组坐变换

只看楼主收藏回复

自由发挥一个对一个5维数组坐变换
我有一个5重循环的穷举任务,每一重的循环长度是a,b,c,d,e, 那么总计算量是这5个数之积
如果这个积太大,比如超过1亿,那么我会等得很不耐烦,需要减少个别循环计算量(偷工减料 嘿嘿),
请您自由构思一个函数f(x),这个函数的参数会与a,b,c,d,e有关
单调增函数,表达式尽量简洁,不要用排序算法对这5个数排序
对于较小的正整数x,f(x)=x
对于较大的正整数x,f(x)<=x
abcde>1亿,且f(a)f(b)f(c)f(d)f(e)小于并且很接近1亿
不要反问我各种古怪问题,自由发挥自由发挥
举个例子,17,35,67,59,55 ,这5个数的积超过1亿了,我就会用这个f(x)变换这些数字
比如变成 17,35,56,55,54 ,这时它们的积是9千万了


IP属地:广东1楼2022-05-12 19:07回复
    x>39 f(x)=10^1.6-1/x


    IP属地:浙江来自iPhone客户端3楼2022-05-12 23:52
    收起回复
      有无更多思路


      IP属地:广东4楼2022-05-13 20:03
      回复
        都可证f(39)<40了还能有啥思路


        IP属地:浙江来自iPhone客户端6楼2022-05-13 23:48
        回复
          抛砖引玉一下
          待定一个数m, 当某变量大于m时把该变量修改为m,否则不变
          所以 本质问题该是寻找m使得 min(a,m)min(b,m)min(c,m)min(d,m)min(e,m)尽量接近1亿
          可是这个m的表达式嘛,因为要沉迷学习和游戏,我还没仔细想过是怎样的,有无优雅的表达式,所以向数学吧伸手找灵感的同时,在程序里则直接硬搜,比如像这样做:
          var a=10,b=10,c=20,d=289,e=314
          var m=Math.max(e,Math.max(d,Math.max(c,Math.max(a,b))))
          while(a*b*c*d*e>=100000000){
          a=Math.min(a,m)
          b=Math.min(b,m)
          c=Math.min(c,m)
          d=Math.min(d,m)
          e=Math.min(e,m)
          m--
          }
          [m, a*b*c*d*e ] //输出222,99458000


          IP属地:广东7楼2022-05-14 12:39
          收起回复
            又没其他人 你直接回我不就好了
            你这个新描述跟上面的描述屁关系没有
            我在3楼的回复里就写过了 f(a)…f(e)和f(a,…,e)是完全不同的两回事。你开始给的前者,后来给后者。
            单调增函数的导数大于零,这条也被你吃了。
            算法也写错了 m是223不是222
            m是a b c d e的函数就跟前面的描述一点关系都没有
            数字太大懒得打,改成a<b<c和1000
            m=max{1000^(1/3), (1000/a)^(1/2), 1000/(ab)}。要m是整数的话自己加取整


            IP属地:浙江来自iPhone客户端8楼2022-05-17 02:28
            收起回复
              明明一次就能解决的问题 你让我回了4次 建议反思一下


              IP属地:浙江来自iPhone客户端9楼2022-05-17 02:29
              回复
                有些自出题非常容易错。如果数学水平或直觉更高的话,很容易看出其中的问题。
                举个例子,对于f(a),显然能找到g(a,b,c,d,e)=f(a)f(b)f(c)f(d)f(e)。
                但是给出g(a,b,c,d,e)的形式,你大概率是没法找出满足等式的f(a)的。
                也就是f(a)的限制是比g(a,b,c,d,e)更高的。
                所以你认为的不够好,实际是认为“不满足条件”的f()比我提出的“满足条件”的f()更好。
                而这里的不满足条件,是你对函数的基础知识产生了错误,甚至没法准确描述的你问题。
                解这种“错误”的自出题不会让我有多少成就感,只会让我头疼怎么解释非常显然的事情。
                尤其是因为你的一些问题而进行一些纯粹浪费时间的来回往复。
                https://tieba.baidu.com/p/7834342759
                在这贴里也发生了类似的事情。
                我在考虑以后是不是不该回答“自出题”。


                IP属地:浙江10楼2022-05-17 19:21
                回复
                  那贴已经删了,厚码的应该没关系
                  对方想通后的态度还是非常值得称道的


                  IP属地:浙江11楼2022-05-17 19:35
                  回复
                    感觉好麻烦,好像必须得先找出abcde的离散情况,凑个估价函数再拼到阶梯函数上好麻烦,但似乎是可以做的,应该也可以推广到不止5个数。。


                    IP属地:浙江来自Android客户端12楼2022-05-28 20:01
                    收起回复
                      我竟然错过了老K的帖子。
                      我不懂计算机,但是单从小于一个亿的角度来说,我记得计算机应该会开根号吧。
                      所以唯一的可能性是,给定abcde>一个亿,找出单调增的f使得f(a)f(b)f(c)f(d)f(e)<一个亿且取得最大值。
                      非线性离散最优化。


                      IP属地:江苏13楼2022-05-29 09:55
                      回复