【问题标题】:Fixed Place Permutation/Combination固定位置排列/组合
【发布时间】:2009-05-29 03:00:04
【问题描述】:

我正在寻找一种方法,可以生成 4 个集合元素的不同组合,以使每个集合的元素在最终组合中都有固定的位置: 为了更好地解释我的要求,让我给出这 4 套的样本,最后是我要找的:

Set#1(街道前方向){ N, S } Set#2(街道名称){Frankford, Baily} Set#3(街道类型){Ave, St} Set#4(街道方向){S}

让我列出几个预期的组合:
N Baily Ave S
S 弗兰克福德街 S
S Baily Av S
.
.
.

现在你可以看到每个集合的元素都落入它的位置
预方向已到位 1
街道名称就位 2
Streety Type 3
街道描述到位 4

我正在寻找执行此任务的最有效方法,其中一种方法是一次工作 2 组,例如:
组合第 1 组和第 2 组 --> 创建一个新的第 5 组结果组合
组合第 5 组和第 3 组 --> 创建一个新的第 6 组结果组合
组合第 6 组和第 4 组 --> 这将给我最终的组合

有没有最好的方法来做这件事?请帮忙。我会更喜欢 C# 或 Java。

谢谢

【问题讨论】:

    标签: permutation combinations


    【解决方案1】:

    这里有一些 linq (c#) 可以为您提供所有组合,它不是“最有效的方式”。

    var query =
      from d in predirections
      from n in names
      from t in types
      from s in postdirections
      select new {d, n, t, s};
    

    【讨论】:

      【解决方案2】:

      听起来您正在寻找某些集合的笛卡尔积。您可以使用嵌套的 for 循环来做到这一点。这是您没有要求的 Haskell 代码。

      Prelude> [[x,y] | x <- ['1'..'3'], y <- ['A'..'C']]
      ["1A","1B","1C","2A","2B","2C","3A","3B","3C"]
      

      【讨论】:

        【解决方案3】:

        @大卫B 如果 predirections 列表为空怎么办,有没有一种方法可以让我们仍然获得组合,因为通过您的方式不会返回任何笛卡尔积。


        大卫 B 在这里:

        var query =
          from d in predirections.DefaultIfEmpty()
          from n in names.DefaultIfEmpty()
          from t in types.DefaultIfEmpty()
          from s in postdirections.DefaultIfEmpty()
          select new {d, n, t, s};
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-05
          • 1970-01-01
          • 2015-04-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多