Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 快速修剪并创建有效的数据组合_C#_Algorithm - Fatal编程技术网

C# 快速修剪并创建有效的数据组合

C# 快速修剪并创建有效的数据组合,c#,algorithm,C#,Algorithm,我确实在努力解决一个问题,我需要将可用场景“删减”到用户定义为有效的场景。下面是我试图在.Net(C#)中解决的问题的一个小例子。考虑到下面显示的级别/值,用户可以选择只有几个有效的组合,但是如果您想象下面的级别是30-40个级别的数据,而不是我所显示的5个级别,您可以看到我的困境。我可能需要通过数百万到数十亿个无效的组合才能得到有效的组合。有些情况下,级别中的所有值都适用,有些情况下,只有用户指定的组合才适用 数据的当前级别/值: 用户表示有效的组合为: *Notice all from l

我确实在努力解决一个问题,我需要将可用场景“删减”到用户定义为有效的场景。下面是我试图在.Net(C#)中解决的问题的一个小例子。考虑到下面显示的级别/值,用户可以选择只有几个有效的组合,但是如果您想象下面的级别是30-40个级别的数据,而不是我所显示的5个级别,您可以看到我的困境。我可能需要通过数百万到数十亿个无效的组合才能得到有效的组合。有些情况下,级别中的所有值都适用,有些情况下,只有用户指定的组合才适用

数据的当前级别/值:

用户表示有效的组合为:

*Notice all from level 4 are valid
Receiver -> Sony -> 500 -999 -> Retail
Receiver -> Sony -> 1000 - Up -> Retail  
给定5个级别信息的预期结果:

Receiver -> Sony -> 500-999 -> Open -Box -> Retail
Receiver -> Sony -> 500-999 -> New -> Retail
Receiver -> Sony -> 1000-Up -> Open -Box -> Retail
Receiver -> Sony -> 1000-Up -> New -> Retail
我尝试过的东西都是在小集合中执行的,但是如果我在组合中有很多级别和很大的间隙,在深入到这些级别之前不允许我修剪有效的组合,那么我将遇到重大的性能问题。我显然没有错误地处理这个问题


如有任何其他关于解决该问题的意见或建议,将不胜感激

假设您能够将输入解析为N个不同的集合,每个集合都包含特定级别的有效值,那么问题只是找到这N个集合的笛卡尔积

Eric Lippert在其中介绍了如何创建一个解决方案,以获得编译时未知序列的笛卡尔乘积。代码取自该帖子末尾,代码为:

static IEnumerable<IEnumerable<T>> CartesianProduct<T>(this IEnumerable<IEnumerable<T>> sequences) 
{ 
  IEnumerable<IEnumerable<T>> emptyProduct = new[] { Enumerable.Empty<T>() }; 
  return sequences.Aggregate( 
    emptyProduct, 
    (accumulator, sequence) => 
      from accseq in accumulator 
      from item in sequence 
      select accseq.Concat(new[] {item})); 
}
提供以下输出:

Receiver Sony 500 -999 Open -Box Retail Receiver Sony 500 -999 New Retail Receiver Sony 1000 - Up Open -Box Retail Receiver Sony 1000 - Up New Retail 接收器索尼500-999开箱零售 接收器索尼500-999新零售 接收器索尼1000开放式零售
接收器Sony 1000-Up New Retail收到很多负面消息…是否有其他堆栈论坛可以提交此消息?您可以添加到目前为止的代码吗?也许您可以公开您当前的解决方案,以便我们能够更深入地了解您的问题您看过DNS如何工作或数据库索引如何工作吗?我相信你的问题与此类似。如果我正确理解您的问题,当您的客户做出选择时,需要排除其他选择。请查看此答案。希望这有帮助:谢谢Servy,这是一个很好的开始……我将修改/开始它,并阅读Eric的博客posting@scarpacci好吧,除非你知道如何提供输入的细节,否则真的没有什么可以提供的了。我甚至不想考虑在分析或处理它的过程中需要做些什么,而不知道这是否是一个问题,或者它的具体细节。今天我会提供更多的细节,可以为你的问题提供一些启发。 Receiver Sony 500 -999 Open -Box Retail Receiver Sony 500 -999 New Retail Receiver Sony 1000 - Up Open -Box Retail Receiver Sony 1000 - Up New Retail