恭喜,你发布的帖子
发布于 2021-03-20 17:18:40
23楼
排序并不会使计算省下运算次数。数据该有几种组合就是几种组合,所有组合的各项相加结果可以全部不同。要得到指定的相加结果,有可能是算到最后一个的时候误差才为0。我能够猜到你的意思。你想通过排序然后从中间某处向两边找最佳值。大概都是这么做了。
只有误差才能使运算量下降。当你算出一个误差已经达到很小的时候,比如1,那么你觉得余下的组合的误差会不会比1小?不算不知道的。
现在就是在想,当误差已经合格的时候怎样离开循环。
楼上你看看还有什么想法?
以前看算法时,有类似这方面的解题思路。这个算法是找出一个接近的值,并不是列举所有最接近的组合。
做法如下:
1、从大到小排序;
2、取第一个跟需要的值比较,如果大于需要的值则第2、3、4个找下去找到小于需要值的,这样就可以减少很多N次判断;
3、取到第一个接近需要值后,再往下找运算和接近需要值的,大于就抛弃小于就采取;
4、重复比较取舍后很快会找到的,而不需要2^N的无限循环。
因为已经排序了,所以不用担心无用的重复比较问题。
至于要提前退出For?这不是很简单么?直接把FOR 的 FINAL 的值给 INDX的VW存储单元你看他还不乖乖的提前退出?或者强制来个JMP?他都得提前退出FOR循环的。
请填写推广理由:
分享
只看
楼主