问题标签 [combinatorics]

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 投票
8 回答
749 浏览

algorithm - 复杂组合算法

因此,Wendy's 将他们的三明治宣传为有 256 种组合——这意味着有 8 种成分你可以不拥有(尽管我想知道他们为什么会将你不包含任何内容的组合视为有效,但我离题了)。

通用方法允许您将每个选择的各种状态相乘,从而实现更复杂的组合。在这种情况下,只能包含或排除 Wendy 的项目。但有些三明治可能有两种芥末可供选择(但不是两种芥末,以节省成本)。

这些都相当简单。你将选项的数量相乘,所以对于 Wendy's,它是:

2*2*2*2*2*2*2*2 = 256

如果他们如上所述多样化他们的芥末选择,它将是:

2*2*3*2*2*2*2*2 = 384

走得更远似乎更难。

如果您将芝麻作为单独的项目,那么他们需要面包项目。包子可以有芝麻,包子可以不包子,芝麻不能包子。这可以简化为具有三种状态(无、有种子的小圆面包、没有的小圆面包)的单个小圆面包项目,但在某些情况下无法做到这一点。

例如,戴尔的计算机配置器不允许某些组合(可能插槽已满,放入同一系统时项目不兼容等)。

  • 在处理项目可能发生冲突的复杂得多的系统时,什么是适当的组合方法?
  • 有什么好的、通用的方法来存储这些信息,而不必为每个产品/组合/项目编码来捕获冲突?
  • 当系统必须处理复杂的冲突组合时,是否有一种简单的方法可以说“有 X 种方法来配置您的系统/三明治”?
0 投票
5 回答
10096 浏览

php - PHP 中的组合、配置和排列

在 PHP 中生成数组的所有组合、配置和排列的最有效方法是什么?

0 投票
4 回答
1661 浏览

java - 生成按单个数字之和排序的 n 位数字(无递归)

我希望按以下顺序生成所有可能的 n 位数字值,其中顺序由各个数字的总和决定。

例如,使用n = 3

sum 组内的顺序并不重要。

任何帮助,想法将不胜感激

0 投票
3 回答
1052 浏览

c++ - 打印从数字创建的可能字符串

给定一个 10 位数的电话号码,我们必须打印由此创建的所有可能的字符串。数字的映射与电话键盘上的完全一样。

即 1,0-> 没有字母 2-> A,B,C

例如,1230 ADG BDG CDG AEG....

c/c++ 中这个问题的最佳解决方案是什么?

0 投票
6 回答
7476 浏览

hash - 从文件内容计算的 MD5 哈希的前 4 个字节发生冲突的概率是多少?

这是一个组合问题,需要一些散列算法的理论。

假设输入可以是 30 kB 到 5 MB 大小的任意随机字节序列(我猜这会产生相当多的输入值组合 :))

从字节序列计算的 MD5 哈希的前 4 个字节(或前 n 个字节)对于不同的文件相同的概率是多少?

如果这不能专门针对 MD5 哈希计算,那么任何生成均匀分布的 m 字节哈希的哈希函数在给定输入范围的前 n 个字节上计算冲突哈希的概率是多少?

0 投票
6 回答
6948 浏览

math - 第 N 个组合

有没有直接的方法来获得所有 nCr 组合的有序集合的第 N 个组合?

示例:我有四个元素:[6, 4, 2, 1]。一次取三个的所有可能组合是:[[6, 4, 2], [6, 4, 1], [6, 2, 1], [4, 2, 1]]。

有没有一种算法可以在有序结果集中给我例如第三个答案 [6, 2, 1],而不枚举所有先前的答案?

0 投票
5 回答
294 浏览

set - 设置组合题

将此作为家庭作业,但不确定从哪里开始!

给定集合{1,2,3,4},您可以从该集合中形成长度为 2 的六种组合,即:

如果我要选择其中一种组合,({1,2}例如),我怎么知道有多少其他组合与它不相交?在这种情况下,它是四个:{1,3},{1,4},{2,3}{2,4}

不太确定如何在数学上进行此操作,任何指向正确方向的指针都将不胜感激。

0 投票
7 回答
4407 浏览

algorithm - 在列表中查找匹配对的算法

我将在下面以我想要的精确形式表达这个问题:

给定:两个浮点列表ND长度相同kk是 2 的倍数)。众所周知,对于所有人i=0,...,k-1来说,都存在j != i这样的情况D[j]*D[i] == N[i]*N[j]。(我使用从零开始的索引)

返回: 一个(长度k/2)对的列表,(i,j)例如D[j]*D[i] == N[i]*N[j]。返回的对可能不是唯一的(任何有效的对列表都可以)

该算法的应用是找到广义回文特征值问题的特征值的倒数对。等式条件等价于N[i]/D[i] == D[j]/N[j],但也适用于分母为零的情况(这是一种确定的可能性)。特征值问题中的简并性导致配对不唯一。

更一般地说,该算法等价于:

给定X:长度列表kk是 2 的倍数)。众所周知,对于 all i=0,...,k-1,存在j != i这样的IsMatch(X[i],X[j])返回 true ,其中IsMatch是一个布尔匹配函数,它保证至少j != i为 all之一返回 true i

返回:一个(长度k/2)对列表,对于列表中(i,j)IsMatch(i,j) == true所有对。返回的对可能不是唯一的(任何有效的对列表都可以)

显然,我的第一个问题可以用第二个问题来表述IsMatch(u,v) := { (u - 1/v) == 0 }。现在,由于浮点精度的限制,永远不会有完全相等,所以我想要最小化匹配错误的解决方案。换句话说,假设IsMatch(u,v)返回值u - 1/v并且我希望算法返回一个列表,IsMatch 为其返回最小的错误集。这是一个组合优化问题。我在想我可以先天真地计算所有可能的索引对i和之间的匹配错误j,但是我需要选择一组最小错误,我不知道该怎么做。

澄清

IsMatch函数是自反的(IsMatch(a,b)暗示IsMatch(b,a)),但不是传递的。然而,它是 3-传递的:IsMatch(a,b) && IsMatch(b,c) && IsMatch(c,d)意味着IsMatch(a,d).

附录

这个问题显然是图论中的最小权重完美匹配问题。但是,就我而言,我知道应该有一个“好的”完美匹配,因此边缘权重的分布并不是完全随机的。我觉得应该以某种方式使用这些信息。现在的问题是,对于最小权重完美匹配问题是否有一个很好的实现,它使用我的先验知识在搜索的早期获得解决方案。我也对任何此类算法的简单实现持开放态度。

0 投票
3 回答
6512 浏览

math - 如果有 M 个不同的盒子和 N 个相同的球

我们需要把这些球放进盒子里。

可以有多少个州?

这是计算机模拟谜题的一部分。我几乎忘记了我所有的数学知识。

0 投票
10 回答
24167 浏览

c++ - 计算组合数量

干杯,

我知道您可以使用以下公式获得组合数量(无需重复,顺序并不重要):

但是,我不知道如何在 C++ 中实现这一点,例如

unsigned __int64即使对于(或unsigned long long),这个数字也太大了。是否有一些解决方法可以在没有任何第三方“bigint”-库的情况下实施公式?