Tag: combinatorics

如何获得一组可复制元素的所有唯一n长组合?

我发现了许多解决方案,它们在所有可能的顺序中组合了一个集合元素,但它们在每个结果中只使用一次元素,而我需要将它们视为可重用的。 例如,如果输入元素为{“a”,“b”,“c”}且数字为2,则输出为{“a”,“a”},{“a”,“b”},{ “a”,“c”},{“b”,“a”},{“b”,“b”},{“b”,“c”},{“c”,“a”},{ “c”,“b”},{“a”,“c”}。

从字符串的源列表动态生成最短正则表达式

我有一堆SKU(库存单位)代表一系列字符串,我想创建一个匹配的正则表达式。 所以,例如,如果我有SKU: var skus = new[] { “BATPAG003”, “BATTWLP03”, “BATTWLP04”, “BATTWSP04”, “SPIFATB01″ }; …我想自动生成正则表达式以识别任何一个SKU。 我知道我只能做”BATPAG003|BATTWLP03|BATTWLP04|BATTWSP04|SPIFATB01″ ,但SKU列表可能非常冗长,我想将生成的正则表达式压缩为”BAT(PAG003|TW(LP0(3|4)|SP04))|SPIFATB01” 所以这是一个组合运动。 我想生成所有可能的Regex以匹配我的任何输入字符串,并认为最短可能是最好的。 例如,我可以生产以下任何一种: BATPAG003|BATTWLP03|BATTWLP04|BATTWSP04|SPIFATB01 BAT(PAG003|TW(LP0(3|4)|SP04))|SPIFATB01 BAT(PAG003|TW(LP(03|04)|SP04))|SPIFATB01 B(ATPAG003|ATTW(LP0(3|4)|ATSP04))|SPIFATB01 任何这些都可行,但最短的可能就是我选择的那个。 首先,我尝试实现此function: Func<IEnumerable, IEnumerable> regexify = null; regexify = xs => from n in Enumerable.Range(1, 10) let g = xs.ToArray().Where(s => !String.IsNullOrWhiteSpace(s)).GroupBy(x => new String(x.Take(n).ToArray()), x => new String(x.Skip(n).ToArray())) let parts = […]

C#LINQ组合:没有空集的集合的所有组合

我有一组字符串,我想找到所有可能的字符串组合并将它们添加到列表中。 我想最终得到一个列表,列出每个字符串组合,减去空集。 我已经创建了一个解决方案,它完全使用嵌套的for循环。 但是我想更优雅地做到这一点,最好是使用LINQ ,而我对它并不是那么精通,因为我还是很陌生。 解决方案应该有2 ^ n – 1个组合列表,其中n是原始集合的基数。 以下是我正在寻找的正确例子: set = {a, b, c} completedListOfCombinations = { {a}, {b}, {a, b}, {c}, {a, c}, {b, c}, {a, b, c} } 这是我的工作,基本但丑陋的解决方案,我在以下帮助下制作: https : //stackoverflow.com/a/3319652/3371287 List myStrings = new List { “a”, “b”, “c” }; var allCombos = new List<List>(); for (int i = […]

查找两个数组之间的所有可能值组合

我有两个字符串数组,不一定长度相同,我想找到数组中两个值之间所有可能的“组合”组合,而不是从任何一个数组重复。 例如,给定数组: {“A1”,“A2”,“A3”} {“B1”,“B2”} 我想要的结果是以下几组: {(“A1”,“B1”),(“A2”,“B2”)} {(“A1”,“B1”),(“A3”,“B2”)} {(“A1”,“B2”),(“A2”,“B1”)} {(“A1”,“B2”),(“A3”,“B1”)} {(“A2”,“B1”),(“A3”,“B2”)} {(“A2”,“B2”),(“A3”,“B1”)} 我的总体方向是创建递归函数,它将两个数组作为参数并一次删除每个“选定”字符串,调用自身直到任一数组为空,但我有点担心性能问题(我需要运行它大约1000对字符串数组的代码)。 任何人都可以指导我采用有效的方法来做到这一点吗?