【发布时间】:2015-08-08 22:42:41
【问题描述】:
给定一个非负整数列表,比如 a0,a1,a2, . . . ,an 和一个常数正整数 m。我们想要生成所有形式为 a'0,a'1,a'2, 的非负整数列表。 . . ,a'n 使得:
- 存在一个 i 满足 ai ≠ a'i。
- 对于所有 i,我们有 ai ≥ a'i
- a0 + a1 + a2 + 。 . . + an - a'0 - a'1 - a'2 - 。 . . - a'n 是 m 的倍数
就时间而言,什么是最好的java算法。我尝试了两种不同的方法。
- 对于介于 0 和 ais 之和之间的所有 km:首先将 km 的所有分区生成 n 个部分。对于这些分区中的每一个,从原始整数序列中逐个减去它。如果所有分量都是非负数,则结果列表有效。
- 生成所有较小的位置并检查它们是否满足条件 3。
令人惊讶的是,我的第二个想法比第一个想法快得多,但仍然相当慢。我应该如何处理这个?这个问题与Generating the partitions of a number的精神相似。
【问题讨论】:
-
尝试在math.stackexchange.com 发帖,因为它看起来更像是数学问题而不是编程问题。
-
m是谁?请完成您的问题 -
只需选择
ai = a'i for all i < n和a'n = an - m -
所以修复你的问题,这是你在问题中省略的第三个约束。
ai也是正面的吗?否则如果一个ai是负数是不可能的
标签: java algorithm performance numbers decomposition