问题标签 [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.
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 种方法来配置您的系统/三明治”?
php - PHP 中的组合、配置和排列
在 PHP 中生成数组的所有组合、配置和排列的最有效方法是什么?
java - 生成按单个数字之和排序的 n 位数字(无递归)
我希望按以下顺序生成所有可能的 n 位数字值,其中顺序由各个数字的总和决定。
例如,使用n = 3
:
sum 组内的顺序并不重要。
任何帮助,想法将不胜感激
c++ - 打印从数字创建的可能字符串
给定一个 10 位数的电话号码,我们必须打印由此创建的所有可能的字符串。数字的映射与电话键盘上的完全一样。
即 1,0-> 没有字母 2-> A,B,C
例如,1230 ADG BDG CDG AEG....
c/c++ 中这个问题的最佳解决方案是什么?
hash - 从文件内容计算的 MD5 哈希的前 4 个字节发生冲突的概率是多少?
这是一个组合问题,需要一些散列算法的理论。
假设输入可以是 30 kB 到 5 MB 大小的任意随机字节序列(我猜这会产生相当多的输入值组合 :))
从字节序列计算的 MD5 哈希的前 4 个字节(或前 n 个字节)对于不同的文件相同的概率是多少?
如果这不能专门针对 MD5 哈希计算,那么任何生成均匀分布的 m 字节哈希的哈希函数在给定输入范围的前 n 个字节上计算冲突哈希的概率是多少?
math - 第 N 个组合
有没有直接的方法来获得所有 nCr 组合的有序集合的第 N 个组合?
示例:我有四个元素:[6, 4, 2, 1]。一次取三个的所有可能组合是:[[6, 4, 2], [6, 4, 1], [6, 2, 1], [4, 2, 1]]。
有没有一种算法可以在有序结果集中给我例如第三个答案 [6, 2, 1],而不枚举所有先前的答案?
set - 设置组合题
将此作为家庭作业,但不确定从哪里开始!
给定集合{1,2,3,4}
,您可以从该集合中形成长度为 2 的六种组合,即:
如果我要选择其中一种组合,({1,2}
例如),我怎么知道有多少其他组合与它不相交?在这种情况下,它是四个:{1,3},{1,4},{2,3}{2,4}
不太确定如何在数学上进行此操作,任何指向正确方向的指针都将不胜感激。
algorithm - 在列表中查找匹配对的算法
我将在下面以我想要的精确形式表达这个问题:
给定:两个浮点列表N
且D
长度相同k
(k
是 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
:长度列表k
(k
是 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)
.
附录
这个问题显然是图论中的最小权重完美匹配问题。但是,就我而言,我知道应该有一个“好的”完美匹配,因此边缘权重的分布并不是完全随机的。我觉得应该以某种方式使用这些信息。现在的问题是,对于最小权重完美匹配问题是否有一个很好的实现,它使用我的先验知识在搜索的早期获得解决方案。我也对任何此类算法的简单实现持开放态度。
math - 如果有 M 个不同的盒子和 N 个相同的球
我们需要把这些球放进盒子里。
可以有多少个州?
这是计算机模拟谜题的一部分。我几乎忘记了我所有的数学知识。
c++ - 计算组合数量
干杯,
我知道您可以使用以下公式获得组合数量(无需重复,顺序并不重要):
但是,我不知道如何在 C++ 中实现这一点,例如
unsigned __int64
即使对于(或unsigned long long
),这个数字也太大了。是否有一些解决方法可以在没有任何第三方“bigint”-库的情况下实施公式?