减少程序的时间复杂度(用Java)?

 尕丑de眸_879 发布于 2023-02-08 16:03

这个问题相当长.这可能需要很长时间,所以如果你没有我理解的时间.

首先让我解释一下我想要实现的目标:我和一些朋友玩这个数学游戏,我们从一组可能的数字中得到6个随机数:1到10,25,50,75和100. 6个数字被选中其中不允许重复.然后将在[100,999]的范围内选择目标号码.使用上述6个数字,我们只能使用基本操作(加法,减法,乘法和除法)来达到目标​​.只允许整数,并且不需要所有6个整数来达到解决方案.

一个例子:我们从数字4,8,6,9,25,100开始,需要找到328.可能的解决方案是:((4 x 100) - (9 x 8))= 400 - 72 = 328.这个,我只使用了6个初始数字中的4个而没有使用过两次.这是一个有效的解决方案.

我们并不总能找到自己的解决方案,这就是为什么我认为一个程序会很有用.我编写了一个程序(用Java编写),它已经过几次测试,并且已经有效了.它并不总是提供所有可能的解决方案,但它在自己的限制范围内工作.现在我已经尝试扩展它,所以所有的解决方案都会显示出来.

关于主要问题:我尝试执行的程序运行时间非常长.就像在,我会让它运行15分钟,它看起来不像是在任何接近完成.所以我想到了它,选项确实是无穷无尽的.我从6个数字开始,我将第一个与其他5个进行比较,然后将第二个与其他5个进行比较,依此类推,直到我完成了6次(每次比较我与每个运算符进行比较,再次进行4次).在最初的6个数字的单个状态中,我现在有5次6次4 = 120个状态(每个5个数字).所有这些都必须经历相同的仪式,所以难怪它花了这么长时间.

该程序实际上太大了,无法在此列出,因此我会将其上传给感兴趣的人:http: //www.speedyshare.com/ksT43/MathGame3.jar (点击下载旁边的MathGame3.jar标题)

以下是发生的事情的一般概述:

-6 integers + goal number are initialized
-I use the class StateNumbers that are acting as game states
  -> in this class the remaining numbers (initially the 6 starting numbers)
     are kept as well as the evaluated expressions, for printing purposes

此方法是主要操作发生的位置:

StateNumbers stateInProcess = getStates().remove(0);
ArrayList remainingNumbers = stateInProcess.getRemainingNumbers();
for(int j = 0; j < remainingNumbers.size(); j++){
  for(int i = 0; i < remainingNumbers.size(); i++){
    for(Operator op : Operator.values()){       // Looping over different operators
       if(i == j) continue;
           ...

    }
  }
}

我评估了第一个元素所有可能的操作以及该状态的所有剩余数字.然后我用自己写的等于检查它是否已经在状态的arraylist中(它充当队列,但顺序并不重要).如果它不在那里,那么状态将被添加到列表中,然后我对其他元素也这样做.在那之后,我放弃了这个州,并从不断增长的名单中挑选另一个.

该列表在10分钟内增加到8万个状态,并且变得越来越慢.那是因为当我想要添加新状态时,要比较的状态数量越来越多.这让我想知道是否与其他州进行比较以防止重复是一个好主意.

该计划的完成并不是那么重要,但我希望将其视为一种学习体验.我不是要求任何人为我编写代码,但是对我能够处理得更好的友好建议将非常感激.这意味着如果您想要提及有关该计划另一方面的内容,请执行此操作.由于大多数主题处理程序的特定部分,我不确定这个论坛上是否要求太多.虽然我的问题也是具体的,但原因可能很多.

编辑:我不是要找到最快的单一解决方案,而是每个解决方案.因此,如果我找到解决方案,我的程序将不会停止.然而,它会尝试忽略双精度,如:((4 + 5)7)和(7(5 + 4)).只接受两个中的一个,因为加法和乘法的equals方法不关心操作数的定位.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有