问题标签 [integer-partition]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3821 浏览

java - Java中的整数分区

这是我执行此操作的代码。它适用于字符串表示,但不是那个ArrayList<ArrayList<Integer>>

我用 temp1 做有趣的事情的原因是,如果我只是将 temp 添加到 master,以前的元素会改变(master 中的所有元素都是指向同一个地方的引用)所以这是我深入的尝试复制+清除。

字符串有效。为什么不ArrayList<ArrayList<Integer>>呢?我该如何解决?

的输出ArrayList<ArrayList<Integer>>是:

0 投票
4 回答
22109 浏览

algorithm - 整数分区(算法和递归)

求和数的多少组合(代码中的变量n)。例如:

3 = 1+1+1 = 2+1 = 3 => ANS 为 3

5 = 5 = 4+1 = 3+2 = 3+1+1 = 2+2+1 = 2+1+1+1 = 1+1+1+1+1 => ANS 为 7

在下面的例子中,m是最大数并且n是 sum,目的是找出它有多少个(sum)组合。

我只想知道为什么要这样做p(n, m) = p(n, m - 1) + p(n - m, m)

这里的代码:

赞赏!

0 投票
4 回答
12687 浏览

python - 给定 k 个分区的 Python 整数分区

我正在尝试为 Python 查找或开发整数分区代码。

仅供参考,整数分区将给定整数 n 表示为小于 n 的整数之和。例如,整数 5 可以表示为4 + 1 = 3 + 2 = 3 + 1 + 1 = 2 + 2 + 1 = 2 + 1 + 1 + 1 = 1 + 1 + 1 + 1 + 1

我为此找到了许多解决方案。http://homepages.ed.ac.uk/jkellehe/partitions.phphttp://code.activestate.com/recipes/218332-generator-for-integer-partitions/

但是,我真正想要的是限制分区的数量。

说,# of partition k = 2,一个程序只需要显示5 = 4 + 1 = 3 + 2

如果k = 3,5 = 3 + 1 + 1 = 2 + 2 + 1

0 投票
2 回答
868 浏览

algorithm - 按其编号生成整数分区

我正在尝试生成按字典顺序N编号的给定整数的体面分区K,例如 N = 5, K = 3我们得到:

第三个是1 + 1 + 3。如何在不生成每个分区的情况下生成它(用 C 语言,但最重要的是我需要算法)?

寻找分区中的最大数(假设我们可以找到分区数d[i][j],其中i是 number 并且j是其分区中的最大整数),然后减少我们正在寻找的原始数和数。所以是的,我正在尝试使用动态编程。仍在处理代码。

这根本不起作用:

0 投票
2 回答
1253 浏览

c - 查找整数分区的字典顺序

对于排列,给定Nk,我有一个函数可以找到按字典顺序k排列的N。此外,给定一个 permutation perm,我有一个函数可以在 的所有排列中找到该排列的字典索引N。为此,我使用了此答案中建议的“因子分解” 。

现在我想对N. 例如,对于N=7,我希望能够在索引(左)和分区(右)之间来回切换:

我已经尝试了几件事。我想出的最好的是

这给出了以下内容:

这不太奏效,但似乎在正确的轨道上。我想出这个是因为它可以计算我必须将数字向下移动多少次(例如6,3,2go to 6,3,1,1)。但是,我不知道如何解决它,因为我不知道如何解释何时必须重新组合(例如6,3,1,1go to 6,2,2)。

0 投票
4 回答
2829 浏览

c++ - 整数的分区 + 分区数

整数 n 的分区是将 n 写为正整数之和的一种方式。为了

例如,对于 n=7,一个分区是 1+1+5。我需要一个能找到所有

使用 'r' 整数对整数 'n' 进行分区。例如,所有的分区n=7

使用r=3整数是1+1+5, 1+2+4, 1+3+3, 2+2+3.

这是我到目前为止所拥有的:

这个程序的输出是:

如何更改我的代码,以便我可以拥有那个 'r' 变量?

编辑:

如果不清楚,“r”值表示每个分区的整数数。所以在上面的例子中,如果 r=2,那么分区中只能有两个整数。分区将是 4+1 和 3+2。'r' 值应由用户输入。

0 投票
2 回答
838 浏览

java - 整数分割算法的递归方法

我需要通过所涉及的元素数 (M) 找到数字 (N) 的可能分区之一,如下所示:

我需要创建一个函数 P(N, M),它将为调用 P(4, 2) 返回以下结果:

我创建了以下方法,但我找不到打破每个分区之间界限的方法:

代码再次更新。现在我使用字符串来返回元素并且我已经能够达到预期的结果,但是我试图找到一个不使用字符串来返回分区的解决方案,所以我不需要使用字符串拆分功能。

0 投票
3 回答
480 浏览

c++ - 就地共轭整数分区

我正在构建一个包含 Partitions 类的 C++ 库。我正在尝试就地实现共轭(如下所述),但我无法让它发挥作用。

我的班级成员是:

例如,整数分区[5,4,4,1]

如果分区是[m_1,m_2,...,m_k],那么共轭[n_1,n_2,...,n_l]

例如, 的共轭[5,4,4,1][4,3,3,3,1]。另一种看待这一点的方法是将分区绘制为单位正方形的行,其中i第 th 行中的正方形数量为m_i。读取列的高度然后给出共轭。对于同一个例子,图片是

数学转换为编程语法m_i = _parts[i-1]k = _length. 这是共轭的一个损坏的实现:

这在很多时候都有效,但有时它会覆盖仍然需要的部分分区。我正在寻找一种巧妙的方法来进行适当的共轭,即不创建Partition.

考虑共轭的另一种方法是认识到共轭是以下序列

使用这个想法,我有以下实现,它给出了正确的答案:

但是,它使用另一个标准向量,我试图避免。


根据 Evgeny Kluev 的回答(在下面接受),这是有效的最终代码(有关详细信息,请参阅他的回答):

0 投票
1 回答
96 浏览

algorithm - 计算数字的不同方法

我需要编写一个函数,该函数将返回可以将 n(n 是自然数)写为自然数之和的方式数。例如:4可以写成1+1+1+1、1+1+2、2+2、3+1和4。我写了一个函数,返回所有选项的个数,但是不取考虑到可能性 1 + 1 + 2 和 2 + 1 + 1(以及所有类似情况)是相等的。所以对于 n=4 它返回 8 而不是 5。这是我的函数:

您能否帮我修复我的功能,这样它就可以按应有的方式工作。谢谢你。

0 投票
1 回答
224 浏览

algorithm - 组合排列组

我正在为棋盘游戏开发概率分析程序。作为算法的一部分*我需要计算一个数字的分区的可能排列(加上一些填充),以便所有分区组件不能占据任何低于排列总长度的位置,以数字为单位,减去值的组件。

(然而,被分割的数字极不可能超过 8,并且排列的长度永远不会超过 7。)


例如,假设我有 4 的分区,“211”,我想在填充为 2 时找到排列,即长度为 5:

这表示为像这样的数组 {2,1,1,0,0}

当 2 在 0 索引中时有 6 个排列(4!/2!2!),并且 2 可以占用 4 个索引(2 不能放在最后一个索引中)所以这种情况下总共有 24 个排列( a 1 可以占用任何索引)。

输入“21100”的输出:

21100、21010、21001、20110、20101、20011

02110、02101、02011、12100、12010、12001

00211、10210、11200、10201、01210、01201

10021、01021、00121、11020、10120 01120

请注意,这只是“21100”的所有排列减去 2 在第 4 个索引中的排列的集合。这是一个比较简单的案例。


该问题可以描述为组合n个不同的排列组,因为上述情况可以表示为x=1 n=4和x=2 n=5的排列组合,其中x是值计数,n是“空间”计数。

我的困难是制定一种可以通过计算获得所有可能性的方法,任何建议都将不胜感激。-请原谅我的问题中的术语混乱。


*算法回答以下问题:

有一组n 个单位被攻击k次。每次攻击都有p次失败的机会和q (1 - p ) 次攻击组中的一个随机单位的机会。第二次损坏的单位将被摧毁并从集合中移除。

攻击后有x 个未损坏单位、y个损坏单位和z个被摧毁单位的概率是 多少?

如果有人知道解决此问题的更直接方法,请告诉我。