c# - 确保只有一个公式可以应用于 4 个随机元素

标签 c# algorithm permutation

我有一个组合元素的公式列表:

A + B + C = X
D + E + F = Y
G + H + I = Z

我想确保给定任何随机的 4 个元素,永远不会有超过 1 个适用的公式。例如,下面的公式不应该被允许,因为如果我得到元素 A、B、C 和 D 那么两者都适用:

A + B + C = X
B + C + D = Y

每个公式都将由 LHS 上的 3 个元素组成,我想在 LHS 上执行规则。 如果有帮助,元素是可排序的。


另一个等价的问题:

我有一个包含 3 个元素的数组列表:List<Element[3]>如何确保没有 2 个元素出现在多个数组中。


对于大量元素和大量公式(超越暴力破解),什么是合理有效(运行时速度)的方式?

最佳答案

本质上这归结为排除问题:根据您的示例数据,

  • 第一个公式适用于集合 (A,B,C,X) 或者如果 X 是 (A,B,C) 一个常数
  • 第二个公式适用于 (D,E,F,Y) 或 (D,E,F)
  • 等等

并且您想确保列表中的任何新条目

  • 不对列表中已有的集合进行操作(如 (A,B,C[,X]))
  • 不对列表中已有条目的子集进行操作(如 (A,B)),因为在这种情况下,输入元组 (A,B,C[,X]) 将对已经存在的条目进行操作公式和新公式

根据元组的大小,创建一个详尽的子集列表可能会很昂贵,也可能不会很昂贵

这应该适用于小集合(廉价的子集列表)

Keep dictionary of formulas
On new formula
  Normalize variable list (e.g. (D,A,c)=>"ACD")
  Check if normalized variable list exists in dictionary
  If it exists, reject new formula and break
  For all subsets of variable list
    Check if normalized variable list of subset exists in dictionary
    If it exists, reject new formula and break
  End For
End On

关于c# - 确保只有一个公式可以应用于 4 个随机元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8894860/

相关文章:

c# - 打印的条码不清晰 (WPF)

c# - Ninject:在每次 Get 调用时调用一个方法

php - 计算 php 数组 : How to improve my Algorithm? 内可能的解决方案

c# - 生成的新 C# 文件类型错误

c# - 在Unity 3D中模拟 "Swipe to Unlock"

c# - 一组可用包装中的包装元素

sql - 使用 SQL 查询进行轮盘赌选择

c++ - 数独求解算法C++

偏移量的 Java 排列

Python3 - 总计为一个数字的 7 位数字的排列