java - 算法复杂度和效率,指数运算java

标签 java algorithm matrix complexity-theory exponential

我有一个字符串列表。我有一组数字:

{1,2,3,4}

我需要生成所有组合(?)(字符串)来检查我的列表,组合:

(1, 2, 3, 4), (1234), (1, 2, 3, 4), (123, 4), (12, 34), (1, 2, 34), (1, 234)、(1, 23, 4)、(1, 23)、(1, 2, 3)、(1 2)、((1 2)、(3 4))...等。

随着我的数字集变大,这个问题也会变得更大。使用递归来解决这个问题是不是很糟糕? (这就是我现在所拥有的)但是,迭代解决方案的空间要求是否更严格,例如列表的最大大小?

在终止时,我需要使用我的列表查看每个结果的匹配数,然后查看每个结果的组成部分的数量。 (1) = 1; (1, 2) = 2。

我的计算机内存不足(这是较大对象问题的抽象)

编辑:所以我的问题是在一个更大的上下文中,例如图形,比较 700 x 500 矩阵中的像素......我的方式不可能是最有效的方法......?我需要知道对象的嵌套结构以及组成它们的预先存在的组件数量(位于我的字符串列表中)

编辑2:描述了完整的问题here .

最佳答案

如果这是解决您的问题的唯一方法(生成所有组合),那么它会很慢,但它不一定需要占用大量内存。

进行递归时,您需要使用尾递归来优化内存使用。或者只是切换到迭代方法。

如果您需要保存匹配的组合,请确保仅保存组合而不是对象本身的副本。

作为最后的手段,您始终可以将每个匹配的组合附加到文件中以便稍后读入,这样您就不会使用太多内存。

所有这些都可以帮助您解决内存问题。

关于java - 算法复杂度和效率,指数运算java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24050383/

相关文章:

c++ - 与 2,3 和更多整数的子集和相关的想法

c - 如何应用矩阵 - 一个理解请求

java - 使用 Guava 检查是否只存在一个元素

java - Android onBackPressed() 没有被调用?

java - 套接字的缓冲读取器从未准备好

algorithm - 在每列中找到最小值的最快方法

algorithm - 我是否可以始终假设角值 !=1 的 mvp 矩阵正在执行缩放?

java - ImageView 之间的碰撞检测

algorithm - 动态规划最优广播

algorithm - 给定一个递增多项式,如何有效地找到 y 的固定间隔内的 x 值?